2009-08-10 14 views
8

パラメータを使ってphpをコンパイルするのに違いはありますか?共有モジュールとしてコンパイルするだけでなく、そのようにコンパイルするのではなく、共有モジュールを使ってモジュールを使ってPHPをコンパイルしますか?

--with-[extension name] 

ですか?パフォーマンス上のメリットはありますか?もしそうでなければ、なぜあなたはこれをしたいのですか?

答えて

0

パフォーマンス上のメリットはごくわずかです。 PHPビルドをパッケージ化するための単なる別のオプションです。

私のMacでは、Marc Liyange’s build of PHPを使用しています。これには、組み込みのPostgreSQLサポートが含まれています。これは--with-pdo-pgsqlフラグで作成されました。その結果、pdo-pgsql共有ライブラリで配布する必要はありません。

--with-pdo-pgsqlでビルドしなかった場合、彼はpdo-pgsql共有ライブラリを配布し、それをロードするためにphp.iniにディレクティブを含める必要がありました。確かに、わずかな違いですが、その機能を使用することが分かっている場合は、それをPHP自体に組み込んでも問題ありません。

1

あなたの質問に対する完全な答えではないかもしれませんが、これまでのところ私が見つけたことがあります。「PHP」という書籍に部分的な答えがあります。サラゴレモン(amazon;一部はGoogleブックでも入手可能です)によって書かれています。

関連部分(56ページの一番上にあるノート)がある:いくつかの拡張機能が がいくつかは --with-extenameを使用して構成されている--enable-extnameを使用して設定し、 ている理由

はこれまでだろうか?機能的には、2つの間に違いはありません。ただし、 の練習では、 を有効にして他のサードパーティ製のライブラリを必要とする機能の場合、 を意味します。 これとは対照的に、 の前提条件を持つフィーチャを意味する が--withです。

だから、

、ないパフォーマンスに関する単一の単語(私が推測差がある場合、それは「ロード1つのより大きなファイル」対「ロード1つの以上のファイル」の問題だけです)。この可能性の背後には技術的な理由があります。

これはPHP自体ではないので、にはが追加の外部ライブラリが必要です。 rightオプションを使用すると、ユーザーは既に外部ライブラリを持っているかどうかによって、拡張機能を有効または無効にすることができます。

0

私はNateがパフォーマンスに関して正しいと思います。このオプションは、パッキングに役立ちます。

基本的にコンパイルされたモジュールでは、PHPはモジュール関数を直接呼び出すことができますが、コンパイル後に呼び出されるメモリアドレスに変換されます。

ロード可能なモジュールのバージョンでは、PHPはdl_openを呼び出してライブラリをロードし、コンパイルされたバージョンのようにそのアドレスで関数を呼び出します。私は、このdl_open呼び出しはWebサーバーの起動時に一度しか行われないので、無視することができます。

2

多分、メモリフットプリントの違いはありますか?

私が間違っているが、組み込みモジュールがメモリにロードされたすべてのプロセス(静的にリンクされているため)に複製されるのを修正します。一方、共有モジュールは一度だけロードされ、すべてのPHPプロセスによって共有されます。

1

すべての機能が共有モジュールとして読み込まれているときに気付きました。PHPページの読み込み速度が速く、CPU使用率は低くなっていますが、一部のコマンドラインPHP関数は正しく機能しません。モジュールが必要なときにのみロードされるため、共有モジュールの設定が大きな静的バイナリよりも効率的であると仮定することは論理的です。

関連する問題