对于运行 Apache 的 Linux 服务器来说,这两者中哪一个更容易/更快处理?
A) 指向 php 文件的符号链接:
file-sym.php ---> file-orig.php
B) 一个 PHP 文件 ( file-inc.php
) 包含另一个 PHP 文件 ( file-orig.php
),如下所示:
file-inc.php 的内容
<?php
include('file-orig.php');
?>
好奇是否有人做过任何基准测试!
答案1
我的直觉告诉我,符号链接会更快,因为在处理该链中的第一个链接时,你需要读取的数据更少。不过,我不确定两者之间是否有太大区别,请尝试对两者进行测试,看看有什么区别。
A)
- 读取文件(在 ext2+ 上,符号链接包含在 inode 中,因此只需一次查找)
- 读取其他文件
- 执行 php
B)
- 读取文件
- 执行 php
- 读取其他文件
- 执行 php
我猜想 include() 变体对于 Windows 用户来说很好,因为他们的系统上不能有符号链接。
答案2
许多管理员出于安全和性能原因禁用 apache 符号链接。
出于性能目的,请查看有关 Apache 调优的此页面:http://httpd.apache.org/docs/2.2/misc/perf-tuning.html
在您的 URL 空间中,如果您没有 Options FollowSymLinks,或者您有 Options SymLinksIfOwnerMatch,Apache 将不得不发出额外的系统调用来检查符号链接。每个文件名组件一个额外的调用。例如,如果您有:
<Directory />
DocumentRoot /www/htdocs
Options SymLinksIfOwnerMatch
</Directory>
并对 URI /index.html 发出请求。然后 Apache 将对 /www、/www/htdocs 和 /www/htdocs/index.html 执行 lstat(2)。这些 lstats 的结果永远不会被缓存,因此它们将出现在每个请求中。
您可以看到,根据您的环境和代码,符号链接可能会造成指数级的性能问题。