如果你去主页,你会看到在页面加载之前,浏览器等待......
我如何减少第一个字节的时间?
答案 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源。
现在,我建议采取以下步骤:
在我的情况下,我返回一个对象数组,并检查了我的主表的索引。一切看起来还不错,但我忘记了我的对象包括其他表中的其他较小的对象。这些表没有正确编入索引。因此我的巨大TTFB。我只是将8秒加到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)
}
}
例如,您通过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服务。如果您没有采取适当的反馈更改您的主机服务器。