2

私のアプリケーションのほとんどは PHP ((フロント エンドとバック エンド) で書かれています。動作が遅すぎる部分があり、おそらく PHP ではなく、書き直す必要があり
ます
。最速の開発
3. 簡単に保守できます。

このコードを CPP で PHP 拡張機能として書き直すことを考えていますが、このソリューションに固執していて、よりシンプルで優れたソリューションを見逃しているのではないでしょうか?

アルゴリズムは、実行されるたびに数 MB のデータに対して PorterStemmerAlgorithm です。

4

4 に答える 4

9

答えは、それがどのようなプロセスであるかによって異なります。

長時間実行されるプロセス (少なくとも数秒)の場合、おそらく C++ で記述された外部プログラムは非常に簡単です。PHP 拡張機能の複雑さはなく、安定性は PHP/Apache に影響しません。パイプ、共有メモリ、または並べ替えを介して通信できます...

短時間実行されるプロセス (ミリ秒で測定) の場合は、PHP 拡張機能を作成する必要がある可能性が高くなります。これにより、呼び出しごとのオーバーヘッドがほとんどなく、非常に高速に呼び出すことができます。

もう 1 つの可能性は、Unix ドメイン ソケットをリッスンし、PHP が情報を要求したときに PHP にすばやく応答するカスタム サーバーです。次に、呼び出しごとのオーバーヘッドは基本的にソケットを作成しています(悪くはありません)。サーバーは任意の言語 (c、c++、python、erlang など) である可能性があり、クライアントは socket_*() 関数を使用する 50 行の PHP クラスである可能性があります。


この決定を下す前に、多くの情報を評価する必要があります。通常、PHP は、非常にタイトなループまたは何千回もの関数呼び出しが繰り返されるまで、スローダウンを示しません。つまり、HTTP リクエストのオーバーヘッドとネットワーク遅延により、通常、PHP の遅延は重要ではなくなります (上記に該当しない場合)。

  • おそらくPHPで書くより良い方法はありますか?
  • データベースにバインドされていますか?
  • CPU バウンド、ネットワーク バウンド、または IO バウンドですか?
  • 結果をキャッシュできますか?
  • 面倒な作業を行うライブラリは既に存在しますか。

カスタム PHP 拡張機能にコミットすることで、それを維持するために必要な基礎知識が大幅に追加されます (C++ を超えても)。しかし、必要な場合には優れたオプションです。

詳細については、質問を更新してください。Stack Overflow が喜んでお手伝いします。

于 2009-02-23T05:00:49.137 に答える
3

提案

PorterStemmerAlgorithm には、http: //tartarus.org/~martin/PorterStemmer/c.txt で入手可能なC実装があります。

この C プログラムをデータ ソースに結合して、スタンドアロンの実行可能ファイルにするのは簡単なことです。次に、 proc_open()などの proc 関数の 1 つを使用して PHP から単純に呼び出すことができます。

このプログラムを php リクエストごとに何度も呼び出す必要がない限り、このアプローチにより、PHP 拡張機能を構築して統合する労力を節約できます。また、(c での) 大変な作業は既に完了していることは言うまでもありません。

于 2009-02-23T07:10:39.950 に答える
0

PorterStemmerAlgorithm が何であるかわかりません。ただし、プロセスを並行して実行し、情報をまとめて収集できる場合は、JAVA で簡単に実装された並行実行プロセスを見ることができます。PHPでどのように呼び出すことができるかはわかりませんが、確実に保守可能です。

このフレームワークを見ることができます。実装が簡単に見える

https://computefarm.dev.java.net/

よろしく、フランクリン。

于 2009-02-23T06:29:59.860 に答える
0

速度上の理由から別の言語で書き直す必要がある場合は、gahooa の回答がそのオプションをうまくカバーしていると思います。ただし、実行する前に、PHP 実装のパフォーマンスを改善するためにできることはすべて実行したと確信していますか?

  1. あなたの状況で出力をキャッシュすることは可能ですか? ページをロードするたびにアルゴリズムを実行するのではなく、一度実行して出力をキャッシュすることで問題を解決できますか?
  2. コードのプロファイリングを試みて、不要な作業が行われていないことを確認しましたか (内部ループでのデータベース クエリなど)。ここで Xdebug が役に立ちます。
  3. データセットでより優れたパフォーマンスを発揮する他のステミング アルゴリズムはありますか?
于 2009-02-23T07:35:30.640 に答える