2017-05-08 33 views
0

我目前工作的一个球迷网站(只是我的目的),这得到所有这从不同的API的数据是这样的:如何加快的file_get_contents和json_decode

$newjson = file_get_contents(LINK_TO_JSON_HERE); 
$newarr = json_decode($newjson); 

我的问题与此:目前网站加载13个不同的(巨大的)JSON文件,非常缓慢。加载需要30-45秒,这不是真的可以接受,但我试图在优化它之前使它工作。是否有可能通过使用其他功能来加速?看到其他粉丝在1秒内加载相同的内容让我问。
关于功能:我将整个JSON加载到数组中,然后取出我需要的信息,这通常不到JSON文件文本的1%。有没有办法在将整个文档加载到数组之前过滤我需要的东西?

预先感谢

+0

如果这是一个JSON数据,你实际上不需要PHP ..只需加载页面和document.ready开始从这些文件中获取json数据并通过js使用它这就是为什么Js很好 –

回答

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文件中。

+0

感谢您的回答!现在我知道哪些文件是最慢加载的。例如https://eu.api.battle.net/wow/data/character/achievements?locale=zh_CN&apikey=API_KEY_HERE(需要API密钥才能查看它)需要4,6秒的时间才能加载。我现在会研究'curl_multi_exec()',也许这可以帮助我。 – neverlucky

+0

@neverlucky如果4.6秒是最慢的API,那么'curl_multi_exec()'最多只能让你的页面加载时间缩短到4.6秒。您将需要找到更快的API或实现缓存机制。 – MonkeyZeus

+0

@neverlucky对此有何好运? – MonkeyZeus

0

这不是函数的速度的问题,但关于等待来自相对服务器的响应。如果可能的话,你可以缓存数据。

+0

这不是什么问题是关于。 @neverlucky问过滤JSON文件,而不是缓存它们。我明白你的观点,但并不回答这个问题。 –