【发布时间】:2011-11-12 22:01:14
【问题描述】:
当用户单击我网站上的按钮时,页面的特定部分将被刷新,但呈现整个部分需要一段时间。是否可以实时显示/输出部分的部分而不是等待整个部分完成?如果我将它作为对 html 内容的 ajax 请求发送,我会怎么做?谢谢
【问题讨论】:
标签: php ajax jquery output-buffering
当用户单击我网站上的按钮时,页面的特定部分将被刷新,但呈现整个部分需要一段时间。是否可以实时显示/输出部分的部分而不是等待整个部分完成?如果我将它作为对 html 内容的 ajax 请求发送,我会怎么做?谢谢
【问题讨论】:
标签: php ajax jquery output-buffering
我建议在您的 AJAX 调用中设置 cache: true(如果使用 jQuery),无论哪种方式,您都需要设置 HTTP 响应标头。 Here are some examples. 通过设置 cache-control 标头和 expires 等,您的 AJAX 请求(如果未更改)将从缓存中加载。这将大大加快速度。
一个简单的例子:
if (!headers_sent()) {
// seconds, minutes, hours, days
$expires = 60*60*24*14;
header('Pragma: public');
header('Cache-Control: maxage=' . $expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT');
}
注意:这不适用于 POST 请求,只能用于 GET。
【讨论】:
如前所述,缓存 AJAX 请求是一个不错的选择。除此之外,我认为您可以让您的应用程序看起来更快的所有方法就是在使用 AJAX (重新)加载内容时向用户显示progressbar。
【讨论】:
<progress> 标签 ;)
您可以实现 Pagelets 技术。从本质上讲,您可以通过以下方式进行此操作:
index.html
Ajax -> load content from PHP script which outputs the navigation bar
Ajax -> load content from PHP script which outputs the body
并且有几个不同的 Ajax 调用加载您网站的每个不同部分。但是,这样做的缺点是会增加用户浏览器必须发出的 HTTP 请求的数量。
这是假设不同的部分可以与页面的其余部分分开生成。如果您的所有内容都需要同时生成,那么这种技术将毫无用处。
这是一本好书(名为“BigPipe”的 Facebook 项目):http://www.facebook.com/note.php?note_id=389414033919
【讨论】: