【问题标题】:How to optimise my php script that loads an API to load faster如何优化我的加载 API 的 php 脚本以更快地加载
【发布时间】:2017-01-16 12:52:10
【问题描述】:

我有一个 php 脚本来加载 API。它是功能性的;但是加载大约需要 15 秒。有没有办法让脚本运行得更好,从而有更快的加载时间?

这是 PHP:

<?php
error_reporting(0);
$apikey = "apikey=***************************";
$json = file_get_contents("https://eu.api.battle.net/wow/guild/Vek'Nilash/Renascence?fields=news&locale=en_GB&".$apikey);
$feed = json_decode($json);
$feedcount = 0;
foreach($feed->news as $newsfeed) {
    if ($feedcount >= 8) {
        break;
    }
    echo $newsfeed->character . PHP_EOL;
    $type = $newsfeed->type;
    // $iteminfo = $newsfeed->itemId . PHP_EOL;
    $itemnumber = $newsfeed->itemId;
    if ($type == "itemLoot"){
        echo " has looted:";
        $itemurl = file_get_contents("https://eu.api.battle.net/wow/item/$itemnumber?locale=en_GB&".$apikey);
        $itemname = json_decode($itemurl);
        echo " [" . $itemname->name . "]<br>";
    }
    elseif ($type=="itemPurchase"){
        echo " has purchased:";
        $itemurl = file_get_contents("https://eu.api.battle.net/wow/item/$itemnumber?locale=en_GB".$apikey);
        $itemname = json_decode($itemurl);
        echo " [" . $itemname->name . "]<br>";
    }
    elseif ($type=="playerAchievement"){
        echo " has Achieved:";
        echo " " . $newsfeed->achievement->title . "<br>";
    }
    ++$feedcount;
}
?>

【问题讨论】:

  • 您首先要回答的是:这与时间相关的步骤是什么?然后你就知道要优化什么了。立即浮现在脑海的是您发出的 http 请求。这需要多长时间?其次是:你必须处理的响应有多大,也许可以在请求中过滤,以便你必须处理 less 信息?
  • 这听起来合乎逻辑。我会进一步调查。谢谢。
  • 如果你曾经在那个网络上玩过游戏,你肯定知道频繁且不可预测的游戏延迟(their 服务器或网络,或your 网络)。如果您没有在循环中分析 file_get_contents 的贡献,那么当您询问优化此脚本时,您是在摸黑。

标签: php performance


【解决方案1】:

如果传输的数据很大,请尝试通过在您的 php 代码顶部添加以下内容来启用 gzip 压缩:

ob_start('ob_gzhandler');

如果不是这样,请查看这些链接,它们可能会有所帮助:

PHP file_get_contents very slow when using full url

How to speed up file_get_contents?

【讨论】:

  • 压缩脚本输出应该如何提高它的性能?代码显示输出只包含最多 8 乘以两行文本。压缩这么小的有效载荷几乎没有任何意义。甚至f帽子也不代表剧本本身的表现。
  • 答案的其余部分是 a) 质量有限,因为它是一个仅链接的答案和 b) 一个疯狂的猜测而不是一个答案。
  • 检索到的 JSON 文件超过 2k 行。谁能指出我正确的方向,所以我只检索文件的前几百行?不要求一步一步的回答,因为我正在尝试学习而不是复制和粘贴。
  • @J.Bates 首先测量 json_decode 需要多长时间,您会惊讶于如何使用如此少的毫秒来解析典型的 2K 行 json 文件。查看您的代码,您最多有 9 个 https 请求,每个请求(乐观地)在 1.5 秒内完成,总执行时间为 13.5 秒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2022-11-10
  • 2021-02-09
  • 2020-05-06
相关资源
最近更新 更多