如何减少我网站上的“第一个字节的时间”?

时间:2011-12-16 20:33:35

标签: performance dns

如果你去主页,你会看到在页面加载之前,浏览器等待......

我如何减少第一个字节的时间

enter image description here

7 个答案:

答案 0 :(得分:15)

没有您显示负责生成网站内容的代码,没有人能给您详细的答案 - 因为这就是延迟的地方。

但是,由于该网站使用的是php,因此您最有可能使用output buffering

鉴于这种情况,以下代码将给出(网络延迟+)2s的TTFB:

<?php ob_start(); ?>
<!doctype html>
<html>
    <head>
        <title>Slow to Load, Slow to finish</title>
    </head>
    <body>
    <?php 
        sleep(2); // Simulate slow processing
        echo "Body"
    ?>
    </body>
</html>

然而,这将为您提供TTFB(网络延迟+)0s:

<!doctype html>
<html>
    <head>
        <title>Fast to load, Slow to finish</title>
    </head>
    <body>
        <?php ob_start(); ?>
        <?php 
            sleep(2); // Simulate slow processing
            echo "Body"
        ?>
    </body>
</html>

加载整个页面的时间在两种情况下都是相同的 - 只有在延迟发生变化的情况下。如果您专注于减少TTFB(为什么),那么应该为您提供足够的信息以进一步调查。

重要:在关注TTFB之前,您应该做很多frontend changes

答案 1 :(得分:3)

延迟是由生成索引页的服务器端脚本引起的。

通过快速浏览一下您的网站,我猜猜该网站正在使用PHP。因此,延迟是由index.php脚本中包含的内容引起的。

主机,网络,硬件和HTTP服务器(Apache)绝对不是原因。您的图表显示静态文件(.css,.js等)交付速度相当快。

因此,有关更多详细信息,您应该提供更多信息(index.php执行缓慢可能有很多不同的原因......)。

答案 2 :(得分:3)

我已经处理了巨大的TTFB (8-10秒)并拼命寻找解决方案。搜索和搜索没有任何成功后,我决定仔细查看我的PHP代码和数据库索引

输出缓冲解决方案降低了我的TTFB但不够。我再次遭到用户投诉。

真正的问题是服务器处理时间(数据库查询和PHP循环)以及您生成的 HTML源

现在,我建议采取以下步骤:

  1. 查看数据库索引。请确保使用正确索引&#34; 所有数据&#34;你回来了。使用Explain验证您的索引是否已被使用,使用了哪个索引以及如何使用索引。
  2. 在我的情况下,我返回一个对象数组,并检查了我的主表的索引。一切看起来还不错,但我忘记了我的对象包括其他表中的其他较小的对象。这些表没有正确编入索引。因此我的巨大TTFB。我只是将8秒加到2秒,只需将正确的索引添加到右表中。

    1. 查看您的PHP代码。
    2. 你可能有一些循环循环,这可能会很慢。您应该使用PHP MVC框架。你的选择。我不会说出任何名字。

      即使它正在工作,也要避免使用此类代码。我知道,一些PHP4程序员会说这很好。 :)

      $query = "SELECT something FROM table";
      $result = mysqli_query($mysqli, $query);
      
      if($result) {
          while($row = mysqli_fetch_assoc($result)) {
              $query = "UPDATE other_table SET something_else = "'.$row['something'].'";
              $result2 = mysqli_query($mysqli, $query)
          }
      }
      
      1. 请注意生成的HTML代码
      2. 例如,您通过PHP循环生成Javascript代码。逻辑是好的。加载时间不是。我们假设您将100行返回到表格中。对于每一行,您只有5种可能的操作(更改状态,编辑,删除,复制,打印)。这意味着5个jQuery对话框(HTML divs,带有控件)和5个JS脚本乘以100行=要在该页面上写入的数千行代码。 我的情况是,我的HTML代码为4MB,超过32.000行。在将所有这些对话框放在正确的JS函数上之后,刚刚从2秒传递到1秒。

        总之,(如果您还在阅读本文:))不要搜索一些神奇的功能来减少您的TTFB。 搜索您的代码和数据库。

        PS:其他一些东西将有助于提高速度:浏览器缓存和压缩,使用CDN,缩小HTML,CSS和JS,推迟解析JavaScript,将图像组合成CSS精灵等。 使用Google Page speed和Google Audits获取更多性能建议。

答案 3 :(得分:1)

.htaccess中的错误也会大大增加TTFB。

我不得不删除Wordfence留下的一些旧代码来解析我的8-12秒TTFB(现在是500毫秒)。

答案 4 :(得分:0)

我认为这取决于您使用什么工具来衡量这类数据。当我使用webpagetest.org时 - 第一个字节的时间是292毫秒,这很好。也许你应该重新检查一下?

这个数字的一​​部分取决于你与服务器的关系 - 你必须做的跳越多 - 这个数字越大。它也与服务器硬件和连接有关 - 通常这是你无法控制的。您可能想要查看其他主机,但我会先运行一些测试 - 让您的朋友在webpagetest.org(或类似网站)上测试您的网站并查看他们获得的值。

答案 5 :(得分:-1)

最有效的解决方案可能是使用具有本机HTML缓存功能的CDN(静态和动态)。 TTFB依赖于您在原始服务器上快速处理HTML的能力,您可以通过从CDN提供新的缓存副本来完全跳过处理时间。

我最近写了一篇关于它的文章,其中讨论了TTFB延迟因素和不同资源的平均加载时间(基于在1B会话中收集的数据)。您可能会发现它很有用: http://www.incapsula.com/the-incapsula-blog/item/809-using-cdn-to-improve-seo-and-ttfb

答案 6 :(得分:-2)

您可以为TTFB使用cloudflare和cdn服务。如果您没有采取适当的反馈更改您的主机服务器。