【发布时间】:2010-09-06 19:04:19
【问题描述】:
我知道 mod-rewrite 完成了很多积极的事情。但是有负面的吗?显然,如果你的规则写得不好,你就会遇到问题。但是,如果您有一个大容量站点并且您经常使用 mod-rewrite,它会对性能产生重大影响吗?我在 Google 上快速搜索了一些基准,但没有找到太多。
【问题讨论】:
我知道 mod-rewrite 完成了很多积极的事情。但是有负面的吗?显然,如果你的规则写得不好,你就会遇到问题。但是,如果您有一个大容量站点并且您经常使用 mod-rewrite,它会对性能产生重大影响吗?我在 Google 上快速搜索了一些基准,但没有找到太多。
【问题讨论】:
我曾在每月获得数百万/点击次数且没有任何重大性能问题的网站上使用 mod_rewrite。根据您的规则,您必须知道首先应用哪些重写。
使用 mod_rewrite 很可能比使用当前语言解析 URL 更快。
如果您真的担心性能,请不要使用.htaccess 文件,它们很慢。将所有重写规则放入 Apache 配置中,该配置仅在启动时读取一次。 .htaccess 文件会在每次请求时重新解析,以及父文件夹中的每个 .htaccess 文件。
【讨论】:
AllowOverride None禁用.htaccess。
AllowOverride "设置为 None 并且 AllowOverrideList 设置为 None,.htaccess 文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取 .htaccess 文件中的文件系统。”您可以在 Apache 配置中执行此操作。
为了呼应 Ryan 上面所说的,与配置文件中的规则相比,.htaccess 中的规则确实会损害您在繁忙站点上的加载时间。我们最初尝试过这个(约 6000 万页/月),但没有持续很长时间,直到我们的服务器开始冒烟:)
在配置中包含规则的明显缺点是您必须在修改规则时重新加载配置。
最后一个标志(“L”)对于加快规则的执行很有用,一旦您更频繁访问的规则位于顶部并首先进行评估。但是,如果您有一套很长的规则,这会使维护变得更加棘手 - 一天早上,我浪费了几个非常令人沮丧的小时,因为我正在编辑我的规则列表的中途并且在顶部有一个陷阱超过故意的!
我们也很难找到相关的基准,最终制定了我们自己的内部测试套件。一旦我们整理好规则,正确排序并进入我们的 Apache conf,我们并没有发现太多负面的性能影响。
【讨论】:
如果您担心 apache 的性能,如果您有很多重写规则,需要考虑的一件事是使用“skip”标志。这是一种跳过规则匹配的方法。因此,节省了用于匹配的任何开销。
不过要小心,我在一个经常使用“skip”标志的项目中,它使维护变得很痛苦,因为它取决于文件中写入内容的顺序。
【讨论】: