0

私のウェブ アプリケーションでは、Amazon ECS PHP クラスを使用して Amazon 製品に関するデータを取得します。現在、ページリクエストごとに新しいオブジェクトを作成しています。オブジェクトの初期化に約 1000 ミリ秒、Amazon からデータを取得するのに 100 ミリ秒かかります。

私の質問は、すべてのユーザー リクエストに対してオブジェクトの作成を回避する方法です。PHPで実行できるかどうかはわかりませんので、別の解決策を提案してください。

サーバー上で実行され、PHP からの要求をリッスンし、Amazon からデータを取得して PHP に返す小さなプログラムを作成する必要があると思います。私が正しいかどうかを提案し、何を見ればよいか教えてください。

4

2 に答える 2

2

ここにあなたの道を設定する必要があるいくつかのヒントがあります:

  • 使用しているクラスは、Amazon のスロットル制限に達するのを避けるために、意図的に 1 秒の遅延を追加しています ( AmazonECS::requestDelay($enable = null))。
  • AmazonECS のインスタンスをシリアル化するべきではありません。これは、Amazon ECS API への単なるインターフェイスであり、必要なデータが含まれていないためです。
  • ユーザーのセッションで AmazonECS のインスタンスで実行したリクエストの結果をキャッシュする必要があります。

大まかな例を次に示します (私は以前に AmazonECS を使用したことがなく、コードを提供したこともありません)。

session_start(); // remove this if you are already doing it somewhere else

$amazon = new AmazonECS($accessKey, $secretKey, $country, $associateTag);

$myQuery = 'my query';

if (isset($_SESSION['amazon_ecs_cache'][$myQuery]) {
     // use the cached data in the session
     $myData = $_SESSION['amazon_ecs_cache'][$myQuery];
} else {
     // get the data from amazon
     $myData = $amazon->search($myQuery);
     // cache it so we don't have to get it again next time
     $_SESSION['amazon_ecs_cache'][$myQuery] = $myData;
}

// do fun stuff with $myData here
var_dump($myData);
于 2012-11-16T15:06:17.373 に答える
1

シリアル化するオブジェクトがシリアル化できない場合は、シリアル化可能で、実際に関心のある値を持つオブジェクトを作成するだけです。

于 2012-11-16T14:56:11.683 に答える