我目前正在开发一个使用 PHP 函数来获取 JSON 数据并将其显示在页面上的站点。但是,在加载页面时,它会冻结,直到它成功获得响应,这看起来很奇怪,因为它还没有加载结束的 html 标记。
我可以使用 Javascript 进行 ajax 调用,这将在页面加载后异步发生,但由于页面是静态的,我使用 PHP 缓存它们,这样就不会缓存响应。
有没有办法在使用 PHP 加载页面后进行 PHP JSON 调用,或者我可以缓存 javascript JSON 响应吗?
我目前正在开发一个使用 PHP 函数来获取 JSON 数据并将其显示在页面上的站点。但是,在加载页面时,它会冻结,直到它成功获得响应,这看起来很奇怪,因为它还没有加载结束的 html 标记。
我可以使用 Javascript 进行 ajax 调用,这将在页面加载后异步发生,但由于页面是静态的,我使用 PHP 缓存它们,这样就不会缓存响应。
有没有办法在使用 PHP 加载页面后进行 PHP JSON 调用,或者我可以缓存 javascript JSON 响应吗?
我将从内联执行的 JSON 提取中删除并使用 JavaScript 进行 AJAX 调用。从那里,您可以通过您网站上的独立 PHP 脚本运行 JSON,并添加一些额外的缓存,如 apc,以加快 PHP 调用。
在 apc 缓存上,您需要安装 mod_apc。查找 apc_fetch 和 apc_store 函数调用,您可以使用它们来缓存 JSON,而不必经常进行昂贵的调用。
如果您正在执行所有 API 参数都在 url 中的 GET 请求,您可以执行类似的操作来加快重复 AJAX 请求。
$url = "http://songkick.com/api/url/to/whatever";
$apcKey = "url:$url";
$data = apc_fetch($apcKey);
if(!$data) {
$data = file_get_contents($url); //or curl, or whatever you're using.
apc_store($apcKey, $data); //save for next time.
}
echo $data;
您采用的方法称为“引导”。在可能的情况下分离组件通常是一种好习惯,但是,在您的情况下,如果您将大量数据引导到页面,最好保持原样并缓存生成的 html(Cloudflare 是我的最爱工具)。
对大量数据运行异步 javascript 请求可能会导致不合需要的前端加载时间 - 特别是如果您需要先加载 jQuery 等必备库。
引导的 JSON 越大,使用 PHP 的情况就越好。