2011-06-29 4 views
5

をコンパイルすると、APC、eAcceleratorなどのPHPキャッシングプログラムを使用すると、オペコードがメモリに保存され、その後のリクエストで高速に実行されます。私の質問は、phcやHPHPなどのコンパイラを使用していると仮定して、スクリプトをコンパイルするのはいつもより速く/速くないのでしょうか(動的な構造に問題があることは分かっていますが)。コンパイルしてそのステップをスキップするだけで、Zend EngineがC言語の関数を使って再読み込みする必要があるので、オペコードの格納はなぜか面倒ですか?PHPキャッシュの質問と私の理解から

+0

また、私は別のスレッドを開始したこの質問のパート2があります:http://stackoverflow.com/questions/6525187/why-are-dynamic-constructs-difficult-for-php-compilers-hphp – blacktie24

答えて

2

単純にcにコンパイルして、PHPスクリプトを同じ方法で実行することはできません。 HPHPは実際のコンパイルを行いますが、PHPのスーパーセット全体をサポートしていません。

他のコンパイラは、実際にはバイナリにPHPインタープリタを埋め込んでいるので、実際にコードをコンパイルしているわけではありません。

PHPはコンパイルするつもりはありません。オペコードキャッシングは非常に高速で、99%のアプリケーションに十分適しています。フェイスブックレベルのトラフィックがあり、バックエンドのDBを既に最適化している場合、パフォーマンスを向上させる唯一の方法は、コンパイルである可能性があります。

PHPは標準ライブラリの薄層ではありません。

+0

返信にタイムアウトするためのgracias。 「PHPが標準ライブラリの薄層ではない」と言ったときの意味をさらに説明できますか?返信用 – blacktie24

1

PHPがeval()を持っていなかった場合は、(相対的に)簡単にPHP->コンパイル済みバイナリ変換を行うことはおそらく可能です。しかし、PHPはeval()を介して動的にスクリプトをビルド/実行することができるので、フル・バイナリを実行することはできません。コンパイラはあなたの動的コードが何をすることができないか分からないので、バイナリはPHPの全体を含む必要があります。あなたは小さな1または2kのスクリプトから大規模な複数メガバイトのバイナリに移行します。

+0

thx!私はeval()を使わないと仮定し、動的構造の問題を取り上げました(私の元の質問の下にコメントとして投稿した別のスレッドのコンパイラと動的構造について別の質問があります)。コンパイルするのに効率的ですか? – blacktie24

+0

私は「効率的」についてはわかりませんが、なぜそれが不可能なのか分かりません。 –