PHPを縮小するポイントはありますか?


101

私はあなた PHP 縮小できることを知っています、何か意味があるのではないかと思っています。PHPはインタープリター型言語であるため、コンパイルされた言語よりも実行速度が少し遅くなります。私の質問は、PHPを縮小すると、クライアントはページの読み込みなどの目に見える速度の向上を目にするでしょうか?

また、PHPまたは類似のものをコンパイルする方法はありますか?


明らかな点の1つは難読化です。これは、コードの移植性を低下させ、有効な目標にすることができます。
John

回答:


161

PHPはバイトコードにコンパイルされ、VMに似たものの上で解釈されます。PerlやRubyなど、他の多くのスクリプト言語は同じ一般的なプロセスに従います。それは、例えばBASICのような伝統的なインタプリタ言語ではありません。

ソースを「縮小」しようとした場合、効果的な速度向上はありません。APCのようなバイトコードキャッシュを使用すると、大幅に増加します。

FacebookはHipHopというコンパイラを導入し、PHPソースをC ++コードに変換しました。PHPの大物であるRasmus Lerdorfが、今年の初めにDiggに対して、HipHopによるパフォーマンスの向上について説明したプレゼンテーションを行いました。つまり、コードを最適化してバイトコードキャッシュを使用するよりもそれほど速くはありません。HipHopは、大多数のユーザーにとってはやり過ぎです。

Facebookは最近、HipHopの作成に基づいた新しい仮想マシンであるHHVMも発表しました。それはまだかなり新しいものであり、それが一般大衆に大きなパフォーマンス向上をもたらすかどうかは明らかではありません。

明確に述べられていることを確認するために、そのプレゼンテーションをすべてお読みください。また、Facebookのxdebugxhprofなどのツールを使用して、コードのベンチマークとプロファイルを行い、ボトルネックを特定する方法を数多く指摘しています。


2
バイトコード/ vm全体は、実際には外部(!)バイトコードキャッシュなしでは何も購入しないことに注意してください。PHPがデフォルトでバイトコードを

共有ホスティングの問題だと思います。APCは、古い6.0ベースのトランク以降、デフォルトでPHPに含まれています。デフォルトで5.4に表示されるのか、新しいトランクが呼び出されるのかはわかりません
Charles

情報をありがとうございました。残念ながら、私は自分のサーバーを十分に制御できません(レンタルされています)。WebホストがAPCを使用している可能性はありますか?
Bojangles、2010年

3
ほとんどの共有ホスティングプロバイダーはAPCを使用しません。設定を制御できるように、Virtual Private Serverを調べる必要があります。多くの場合、VPSは通常の共有ホスティングよりも高価ですが、実際の専用サーバーよりはるかに安価です。人気のあるVPSプロバイダーには、SlicehostとLinodeがあります。最初にコードのベンチマークとプロファイリングを行う必要があることを忘れないでください!
Charles

15

以下のように、オペコードキャッシュを使用しての賛成でPHPを縮小化のアイデア見送りますPHP AcceleratorAPC

または何か他のもの memcached


18
私は「何か他のもの」と言いました。
スティーブン

3
オペコードキャッシュ以外のことを意味することは明らかではありません。
Treffynnon、2010年

5
memcachedは、パフォーマンスを改善する完全な方法です...ベンチマークとプロファイリングを実行し、キャッシュ自体が可能な限り最高のパフォーマンス向上になることを確認した後。
Charles

1
PHP 5.5を使用している場合、opcodeキャッシュはデフォルトで付属しているため、インストールする必要はありません。
ファイアウォール

1
私は実際:( cromulentを見上げ、私はこの文脈でmemcachedのは誤解を招くされて使用して、他の人と同意のキャッシュデータをコンパイル処理の一部は、結果のオペコードと同じではありませんよう。。。
マイク・パーセル

3

いくつかの書き換え(短い変数名)を使用すると、数バイトのメモリを節約できますが、それもめったに重要ではありません。

ただし、一部のアプリケーションは、インクルードスクリプトを連結できるように設計しています。ではphp -w、それはスクリプトの起動のために少し速度ゲインを追加し、大幅に圧縮することができます。ただし、オペコード対応サーバーでは、保存されるファイルのmtimeチェックはわずかです。


3

これは広告よりも答えが少ないです。私は、Zendオペコードを変換して静的型付けを備えたVMで実行するPHP拡張機能に取り組んでいます。任意のPHPコードを高速化しません。これにより、通常のPHPが許可するよりも高速に実行されるコードを記述できます。ここで重要なのは静的型付けです。最近のCPUでは、動的言語は分岐予測ミスのペナルティを左右に消費します。PHP配列がハッシュテーブルであるという事実も高コストを伴います。ブランチの予測ミス、キャッシュの非効率的な使用、不十分なメモリプリフェッチ、SIMD最適化はまったく行われません。特にブランチの予測ミスとキャッシュミスは、今日のプロセッサにとってアキレス腱です。私の小さなVMは、ハッシュテーブルの代わりに静的型とC配列を使用することで、これらの問題を回避しています。結果は、約10倍速く実行されます。これはバイトコード解釈を使用しています。拡張機能は、オプションでgccを介して関数をコンパイルできます。その場合、速度は2〜5倍になります。

ここに興味のある人のためのリンクがあります:

https://github.com/chung-leong/qb/wiki

ここでも、拡張機能は一般的なPHPアクセラレータではありません。あなたはそれに固有のコードを書かなければなりません。


2

はい、(技術的ではない)ポイントが1つあります。

あなたのホスティング業者は彼のサーバーであなたのコードをスパイすることができます。あなたがそれを縮小して醜くすると、スパイがあなたのアイデアを盗むのがより難しくなります。

phpを縮小および醜悪にする1つの理由は、スパイからの保護かもしれません。コードを醜くすることは、自動デプロイメントの1つのステップであるべきだと思います。


1

PHPコンパイラがあります... リストについては、この前の質問を参照してください。しかし、(あなたがFacebookの規模であるか、クライアント側で実行するようにアプリケーションをターゲットにしている場合を除いて)それらは通常、価値があるよりもはるかに多くの問題を抱えています

単純なオペコードキャッシングは、関連する作業に対してより多くの利点を提供します。または、コードをプロファイリングしてボトルネックを特定し、最適化します。


1

PHPを縮小する必要はありません。パフォーマンスを向上させるには、Opcodeキャッシュをインストールします。しかし、理想的な解決策は、PHPを5.5バージョン以上にアップグレードすることです。新しいバージョンには、デフォルトでZend Optimiserと呼ばれるopcodeキャッシュがあり、他のバージョンよりもパフォーマンスが優れています。http://massivescale.blogspot.com/2013/06 /php-55-zend-optimiser-opcache-vs-xcache.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.