我可以请求部分JSON字符串吗?或者只解码特定部分以加快进程?

时间:2011-05-12 21:17:52

标签: php json

我的页面效果非常慢,因为它是由JSON请求加载的。

所以我想知道如何加速整个过程。我可以只请求部分字符串吗?考虑到我在下面使用的所有内容都是“强制转换”数组,要获得所有这些数据都是浪费。

以下代码必须针对我页面上列出的每部电影运行,目前为20分。但在减少电影数量之前,我想知道如何加速这部分,这是正确的问题

这是我得到的代码减慢了页面速度,因为它必须运行20次。

$films_result = $tmdb->getMovie($film->id);
$films = json_decode($films_result);
foreach ($films as $film) {
 foreach ($film->cast as $cast) {
  if ($cast->job == 'Actor') {
   echo '<a href="person.php?id=' . $cast->id . '">' . $cast->name . '</a> ';
   $num_actors++;
   if ($num_actors == 5)
   break;
  }
 }
}

我看了一眼,但我不知道我在找什么。我非常非常初学者。所以请问任何解决方案都不涉及任何其他技术,只需PHP。

4 个答案:

答案 0 :(得分:0)

您可以设置一个cron作业,在幕后每X分钟抓取一次所有JSON(这种方式无关紧要),然后解析它并将其存储在数据库中。然后,每次加载上面显示的PHP页面时,只需从数据库中获取缓存数据并输出即可。

答案 1 :(得分:0)

您应该能够在不到一秒的时间内解析大量的JSON x 20。你怎么知道JSON是瓶颈?可能还有其他一些问题。从数据库中检索数据的速度有多快?

答案 2 :(得分:0)

由于压缩已停用,因此您的API在Google网页速度中获得100分中的0分。 启用压缩后,JSON输出的加载速度将提高95%。

如果您无法控制服务器,可能很难修复,但这里有一个如何修复它的链接。

Minimize payload

答案 3 :(得分:0)

你假设JSON解码是导致缓慢的原因:我认为(少量)资金在API响应时间是接收器,而不是解析。

假设它需要解析,你真的希望有一种类型的流解析器:在Java领域有json-simple(参见http://code.google.com/p/json-simple/wiki/DecodingExamples#Example_5_-_Stoppable_SAX-like_content_handler),它允许你使用一个处理程序并自己跟踪状态所以你只需要保留你关心的东西。不幸的是,PHP并没有真正暴露json_decode使用的解析器回调,并且不再支持任何旧的JSON编码器/解码器(不管它们是否暴露了对用户代码的回调)。

您可以考虑将JSON转储到客户端并在那里解析它,如果它确实是一个约束。