如何加快 file_get_contents 和 json_decode
how to speed up file_get_contents and json_decode
我目前正在开发一个粉丝网站(仅供我使用),它从不同的 API 获取所有数据,如下所示:
$newjson = file_get_contents(LINK_TO_JSON_HERE);
$newarr = json_decode($newjson);
我的问题是:目前站点加载了 13 个不同的(巨大的)JSON 文件,这大大降低了站点的速度。加载最多需要 30-45 秒,这确实不能接受,但我试图在优化它之前让它正常工作。是否可以通过使用其他功能来加快速度?看到其他粉丝网站在 1 秒内加载相同的内容让我问。
关于功能:我将整个 JSON 加载到数组中,然后取出我需要的信息,这些信息通常少于 JSON 文件文本的 1%。有没有办法在将整个文档加载到数组之前过滤我需要的东西?
提前致谢
这不是功能速度的问题,而是等待对端服务器响应的问题。如果可能,您可以缓存数据。
很有可能 JSON 没有减慢您的速度,而只是 file_get_contents()
。正确地对你的问题进行基准测试,这样你就不会浪费时间优化错误的东西。
<?php
$start = microtime(true);
$newjson = file_get_contents(LINK_TO_JSON_HERE);
echo 'file_get_contents('.htmlentities($LINK_TO_JSON_HERE).'): '.(microtime(true) - $start).' seconds<br>';
$start = microtime(true);
$newarr = json_decode($newjson);
echo 'json_decode(): '.(microtime(true) - $start).' seconds<br><br>';
无论如何,保持实时数据和获得更好速度的最佳方法是切换到 curl_multi_exec()
我不确定在这些 API 上更新数据的频率,因此您还可以开发某种缓存机制,每天获取几次数据并将其保存在本地 JSON 文件中.
我目前正在开发一个粉丝网站(仅供我使用),它从不同的 API 获取所有数据,如下所示:
$newjson = file_get_contents(LINK_TO_JSON_HERE);
$newarr = json_decode($newjson);
我的问题是:目前站点加载了 13 个不同的(巨大的)JSON 文件,这大大降低了站点的速度。加载最多需要 30-45 秒,这确实不能接受,但我试图在优化它之前让它正常工作。是否可以通过使用其他功能来加快速度?看到其他粉丝网站在 1 秒内加载相同的内容让我问。
关于功能:我将整个 JSON 加载到数组中,然后取出我需要的信息,这些信息通常少于 JSON 文件文本的 1%。有没有办法在将整个文档加载到数组之前过滤我需要的东西?
提前致谢
这不是功能速度的问题,而是等待对端服务器响应的问题。如果可能,您可以缓存数据。
很有可能 JSON 没有减慢您的速度,而只是 file_get_contents()
。正确地对你的问题进行基准测试,这样你就不会浪费时间优化错误的东西。
<?php
$start = microtime(true);
$newjson = file_get_contents(LINK_TO_JSON_HERE);
echo 'file_get_contents('.htmlentities($LINK_TO_JSON_HERE).'): '.(microtime(true) - $start).' seconds<br>';
$start = microtime(true);
$newarr = json_decode($newjson);
echo 'json_decode(): '.(microtime(true) - $start).' seconds<br><br>';
无论如何,保持实时数据和获得更好速度的最佳方法是切换到 curl_multi_exec()
我不确定在这些 API 上更新数据的频率,因此您还可以开发某种缓存机制,每天获取几次数据并将其保存在本地 JSON 文件中.