AD7*_*six 16
没有你显示负责生成网站内容的代码,没有人可以给你一个详细的答案 - 因为这是延迟的地方.
但是,由于该站点使用的是php,因此您最有可能使用输出缓冲
鉴于这种情况,以下代码将给出(网络延迟+)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>
Run Code Online (Sandbox Code Playgroud)
然而,这将为您提供(网络延迟+)0s的TTFB:
<!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>
Run Code Online (Sandbox Code Playgroud)
在两种情况下加载整个页面的时间都是相同的 - 只有在延迟发生变化的情况下.如果您专注于减少TTFB(为什么),那么应该为您提供足够的信息以进一步调查.
重要提示:在关注TTFB之前,您应该进行许多前端更改.
我已经处理了巨大的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)
}
}
Run Code Online (Sandbox Code Playgroud)
例如,您通过PHP循环生成Javascript代码。逻辑还可以。加载时间不是。假设您将100行返回到一个表中。对于每一行,您只有5种可能的操作(更改状态,编辑,删除,重复,打印)。这意味着5个jQuery对话框(带有控件的HTML div)和5个JS脚本乘以100行=要在该页面上编写的数千行代码。我的情况是,我4MB的HTML代码上有超过32.000行。在我将所有这些对话框都放在正确的JS函数上之后,从2秒缩短到1秒以下。
总之,(如果您仍在阅读此:))请不要搜索一些魔术功能来减少TTFB。搜索您的代码和数据库。
PS:还有一些其他事情将有助于提高速度:浏览器缓存和压缩,CDN的使用,最小化HTML,CSS和JS,延迟JavaScript的解析,将图像合并为CSS sprites等。使用Google Page speed和Google Audits获得更多性能建议。