【问题标题】:Output buffering and AJAX输出缓冲和 AJAX
【发布时间】:2011-11-12 22:01:14
【问题描述】:

当用户单击我网站上的按钮时,页面的特定部分将被刷新,但呈现整个部分需要一段时间。是否可以实时显示/输出部分的部分而不是等待整个部分完成?如果我将它作为对 html 内容的 ajax 请求发送,我会怎么做?谢谢

【问题讨论】:

    标签: php ajax jquery output-buffering


    【解决方案1】:

    我建议在您的 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。

    【讨论】:

    • 我可以在用户的​​浏览器中捕获某些 html 内容吗?我将如何使用 httpd.conf 文件执行此操作?另外,我的内容是动态的,所以我不确定缓存是否合适。
    • 是的,你可以。您是否有权修改 .htaccess 文件?我会说更改这些设置 there 而不是直接修改 apache 配置。无论哪种方式,请查看我在答案中添加的链接(其中显示“这里有一些示例”)。
    【解决方案2】:

    如前所述,缓存 AJAX 请求是一个不错的选择。除此之外,我认为您可以让您的应用程序看起来更快的所有方法就是在使用 AJAX (重新)加载内容时向用户显示progressbar

    【讨论】:

    • 你也可以使用新的 HTML5 <progress> 标签 ;)
    • hmmm...所以没有任何方法可以显示正在通过 ajax 处理的内容?
    • 如果这适用于任何专业网站的客户网站,那么不要使用 HTML5,还没有足够的支持。除非你不关心 IE,否则一定要哈
    【解决方案3】:

    您可以实现 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-28
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多