我可以请求 JSON 字符串的一部分吗?或者仅解码特定部分以加快过程


Can I request part of a JSON string? Or decode only specific parts to speed up the process?

我有一个性能非常慢的页面,因为它是由JSON请求加载的。

所以我想知道我怎样才能加快整个事情的速度。我可以只请求字符串的一部分吗?考虑到我从下面的一个中使用的只是"cast"数组,必须获得所有这些数组是一种浪费。

以下代码必须为我的页面上列出的每部电影运行,目前为 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。

您的 API 在 google 页面速度中获得 0 分(满分 100 分),因为压缩被禁用。启用压缩后,JSON 输出的加载速度将提高 95%。

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

最小化有效负载

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

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

你假设 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 转储到客户端并在那里解析它,如果它确实是一个约束。