这很可能不是由于您的代码,而是下载外部 JSON 需要一段时间。
你应该考虑缓存它。
找出问题所在
您可以使用以下命令检查问题所在microtime()
:
<?php
$timeStart = microtime(true);
$lfm = file_get_contents('http://ws.audioscrobbler.com/2.0/?method=chart.gettopartists&api_key=apikey&format=json');
$timeAfterGet = microtime(true);
$json = json_decode($lfm, true);
foreach ($json['artists']['artist'] as $track) {
$artist = $track['name'];
$image = $track['image'][2]['#text'];
if ($artist&&$image){
echo 'data';
}
}
$timeEnd = microtime(true);
echo "Time taken to get JSON: " . number_format($timeAfterGet - $timeStart, 4) . " seconds<br />";
echo "Time taken to go through JSON: " . number_format($timeEnd - $timeAfterGet, 4) . " seconds<br />";
?>
缓存
保留本地文件 - 检查文件上次修改的时间以及是否小于MAX_CACHE_LIFETIME
(以秒为单位),然后使用缓存文件。
<?php
define("MAX_CACHE_LIFETIME", 60 * 60); //1 hour
$localJSONCache = "audioscrobbler.json.cache";
$lfm = null;
if (file_exists($localJSONCache)) {
if (time() - filemtime($localJSONCache) < MAX_CACHE_LIFETIME) {
$lfm = file_get_contents($localJSONCache);
}
}
if (empty($lfm)) {
$lfm = file_get_contents('http://ws.audioscrobbler.com/2.0/?method=chart.gettopartists&api_key=apikey&format=json');
file_put_contents($localJSONCache, $lfm);
}
$json = json_decode($lfm, true);
foreach ($json['artists']['artist'] as $track) {
$artist = $track['name'];
$image = $track['image'][2]['#text'];
if ($artist&&$image){
echo 'data';
}
}
?>