0

在我的 Web 应用程序中,我使用Amazon ECS PHP 类来获取有关 Amazon 产品的数据。目前我为每个页面请求创建新对象。初始化对象大约需要 1000 毫秒,从亚马逊获取数据大约需要 100 毫秒。

我的问题是如何避免为每个用户请求创建对象?我不确定它在 PHP 中是否可行,因此请随时提出替代解决方案。

我想我需要创建一个小程序,它将在服务器上运行并侦听来自 PHP 的请求,从 Amazon 获取数据并将其返回给 PHP。请建议我是否正确并告诉我我应该看什么?

4

2 回答 2

2

这里有一些提示可以帮助您:

  • 您正在使用的课程有意添加 1 秒延迟以避免达到 Amazon 油门限制 ( 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 回答