昨日、SQLite のパフォーマンスの問題に関する質問を投稿しました ( Zend Db PDO_sqlite の挿入および更新クエリでのひどいパフォーマンス)。いくつかのテストの後、メソッドが SoapServer を介して呼び出された場合にのみ問題が発生するようです (ネイティブ PHP SoapServer クラスと Zend_Soap_Server クラスの両方を試しました)。
テスト ケース - SQLite DB INSERT および UPDATE DB 操作を使用する 10 個のメソッドを呼び出します。
これがどのように機能するかのいくつかのケースを次に示します。
1.コントローラーを介して - Soap サーバーを使用せずに。ローカルホスト:~0.3 秒、リモート サーバー:~0.3 秒
2.Soap サーバー経由。1回目の電話。ローカルホスト:~1~2秒、リモートサーバー:~7秒!
3.Soap サーバー経由。いくつかの呼び出し。ローカルホスト:~1-10 秒、リモート サーバー:~7 秒
3 番目のケースはあまり気にしません。おそらく、ローカル サーバーのパフォーマンスの問題である可能性があります。重要なことは、リモートサーバーで安定して動作することです。
一方、単純な 10 個のメソッド呼び出しの 7 秒は信じられないほど長いです。明らかに - この 7 秒の一部はクライアントとサーバー間の通信です。ケース 1 ではそれが省略されていますが、それほど遅くはないと思います。
デバッグのためにすべてをログに記録していますが、ケース 1 で呼び出されたのと同じ SQLite メソッドが 0.00x-0.02 秒かかり、ここでは ~0.15-0.45 秒かかります。
問題は何ですか?SOAP を使用すると急激に遅くなるのは普通のことですか? (これは私の最初の石鹸サーバー プロジェクトです)。
編集:私が見つけた別の重要なログの事実:
情報 -2012-04-26 13:08:07.782679 クラス: SoapController。メソッド: SoapController::hadleWSDL。ライン: 18.
情報-2012-04-26 13:08:08.318641 * システム起動 *
つまり、基本的には、2 つのメソッドが呼び出される間の時間です。少量のデータを使用したクライアント/サーバー通信で 0.5 秒を超えると、私には多くのように思えます。以下は、handleWSDL アクションのコードです。
$options = array(
'encoding' => 'UTF-8',
'cache_wsdl' => WSDL_CACHE_BOTH,
'uri' =>$this->_WSDL_URI
);
$soap = new Zend_Soap_Server(null, $options);
$soap->setClass('SoapServerFunction');
$soap->setObject(new SoapServerFunction());
$soap->handle();
アプリケーションは非常に単純です。SOAP メソッドは 1 つのパラメーターを取り、それに基づいて 1 つのキャッシュ オブジェクトが作成され、データが処理され、データの一部が XML 形式で返されます。
速度を上げるために私ができること、または速度が低下する本当の理由を追跡する方法について、事前に感謝します。
よろしくお願いします!