我想知道PHP中的速度优化。
我有一系列每个页面加载请求的文件。平均有20个文件。如果已更改,则必须读取每个文件并对其进行解析。这是排除网页所需的标准文件(HTML,CSS,图像等)。
EG - >客户请求页面 - >服务器输出html,css,images - >服务器输出动态内容(20 +/-文件合并和缩小)。
尽可能快地提供这些文件的最佳方式是什么?
答案 0 :(得分:4)
在想知道速度优化之前,我们应该想知道profiling
,它由两部分组成:
最后一个可能远远超出你梦寐以求的远远。
答案 1 :(得分:1)
您在这里没有提供足够的信息来做出明智的答案。到目前为止,最大的好处是来自有效的内容缓存 - 但您可能需要查看的不仅仅是您发送的标头 - 您可能需要开始调整文件名(或URL的查询部分)以有效地允许浏览器使用较新的内容代替缓存(而非过期)的内容。
我有一系列每个页面加载请求的文件。平均有20个文件。
这些全部 php脚本是什么?它们都是HTML页面引用的吗?
如果文件已经更改,则必须读取每个文件
你的意思是他们必须在服务器上阅读和解析吗?为什么?请阅读this post,了解有关如何识别和提供可缓存静态内容的新版本的详细信息。
你看过服务器端缓存了吗?它并不那么难:
<?php
$cached=md5($_SERVER['REQUEST_URI']);
$lastmod=time() - @mtime($cache_dir . $cached)
if ((file_exists($cache_dir . $cached)) && (60 < $lastmod)) {
print file_get_contents($cache_dir . $cached);
exit;
} else {
ob_start();
... do slow expensive stuff
$output=ob_get_contents();
print $output;
file_put_contents($output, $cache_dir . $cached);
}
?>
请注意,服务器端缓存不如客户端缓存有效。
一旦您获得了最佳缓存,那么您需要查看从多个主机名提供内容 - 即使它们都指向同一服务器 - 浏览器会限制它对每个主机名的连接数所以请求可以在并行运行时有效排队。
为了进一步解决您的问题,我们需要了解您的应用程序。
下进行。
答案 2 :(得分:0)
如果您正在谈论PHP文件,请使用eAccelerator。如果您正在谈论其他文件,请检查filemtime以查看它们是否已更改,以及是否必须再次解析它们。
另外,使用yslow来确定您的网站速度慢的原因。
答案 3 :(得分:0)
有几种方法可以为PHP文件保留操作码缓存,自动检查文件修改。 APC是我非常喜欢的其中一个。