SymLinks 与 PHP Includes(性能)

SymLinks 与 PHP Includes(性能)

对于运行 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)

  1. 读取文件(在 ext2+ 上,符号链接包含在 inode 中,因此只需一次查找)
  2. 读取其他文件
  3. 执行 php

B)

  1. 读取文件
  2. 执行 php
  3. 读取其他文件
  4. 执行 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 的结果永远不会被缓存,因此它们将出现在每个请求中。

您可以看到,根据您的环境和代码,符号链接可能会造成指数级的性能问题。

相关内容