eri*_*ric 15 performance .htaccess mod-rewrite
我在SOF上搜索了很多关于.htaccess和mod_rewrite的内容,我希望表现明智哪一个更快:
RewriteRule ^([a-z0-9]+)/?$ index.php?id=$1 [NC,L]
RewriteRule ^(.*)/?$ index.php?id=$1 [NC,L]
RewriteRule ^([^/]*)/?$ index.php?id=$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)
因为第一个只接受字母和数字,它是否会让它更快执行?
Jas*_*rel 21
如有疑问,请进行测试.我使用Apache2设置了运行Ubuntu 2011.10的测试服务器,并使用攻城负载测试应用程序执行3次测试.测试运行1分钟(或直到5000次失败),50个并发用户请求'/index.html'
测试#1使用以下重写规则配置:
RewriteEngine on
RewriteRule ^([a-z0-9]+)/?$ /index.html?id=$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)
围攻的结果:
Transactions: 300970 hits
Availability: 98.36 %
Elapsed time: 57.25 secs
Data transferred: 20.38 MB
Response time: 0.00 secs
Transaction rate: 5257.12 trans/sec
Throughput: 0.36 MB/sec
Concurrency: 9.04
Successful transactions: 300970
Failed transactions: 5009
Longest transaction: 0.02
Shortest transaction: 0.00
Run Code Online (Sandbox Code Playgroud)
使用重写规则配置测试#2:
RewriteEngine on
RewriteRule ^(.*)/?$ /index.html?id=$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)
结果:
Transactions: 225244 hits
Availability: 97.82 %
Elapsed time: 42.43 secs
Data transferred: 15.25 MB
Response time: 0.00 secs
Transaction rate: 5308.60 trans/sec
Throughput: 0.36 MB/sec
Concurrency: 8.71
Successful transactions: 225244
Failed transactions: 5009
Longest transaction: 0.18
Shortest transaction: 0.00
Run Code Online (Sandbox Code Playgroud)
使用以下重写规则测试#3:
RewriteEngine on
RewriteRule ^([^/]*)/?$ /index.html?id=$1 [NC,L]
Run Code Online (Sandbox Code Playgroud)
结果:
Transactions: 210469 hits
Availability: 97.68 %
Elapsed time: 39.39 secs
Data transferred: 14.25 MB
Response time: 0.00 secs
Transaction rate: 5343.21 trans/sec
Throughput: 0.36 MB/sec
Concurrency: 8.60
Successful transactions: 210469
Failed transactions: 5009
Longest transaction: 0.02
Shortest transaction: 0.00
Run Code Online (Sandbox Code Playgroud)
对不起,但恕我直言杰森的答案表明,他不了解一些基准101的基准.一个样本的差异<1%.这种比较在统计上毫无意义,因为样本方差是无限的.我会对重复三次的第一个案例的时间安排感兴趣,比如说,传播的内容是什么......它也关注错误的问题.
如果您strace正在进行如下操作,那么您将更好地了解它发生了什么.(将apache子进程限制为3个左右,否则你需要跟踪很多!)
strace -u www-data -tt -ff -o /tmp/strace $(ps -o "-p %p" h -u www-data) &
Run Code Online (Sandbox Code Playgroud)
这里开销的99%到99.9%之间是探测器的文件系统开销,用于lstat和打开各种文件,例如SCRIPT_FILENAME路径上的所有推定的.htaccess文件(在我的共享服务的情况下,有8个这样的探测),并阅读任何存在的.层次结构中的最低层RewriteEngine On由mod_rewrite引擎解析.
如果您打开其中一个较高的日志级别,则可以看到测试VM上的per语句执行(包括日志开销)通常约为0.1毫秒.在基于suPHP的共享服务上激活PHP映像的成本约为100毫秒.如果文件不在虚拟文件系统缓存中,则单个"-f"文件探测的开销可以是相同的顺序.读取脚本文件的成本(如果服务没有启用Opcode缓存),特别是对于像Mediawiki或Wordpress这样的应用程序,可能需要一秒或更长时间,这取决于缓存.
因此,无论实际通话ap_regcomp和ap_regexec在httpd-2.x.y/server/util_pcre.c需要30微秒到35微秒是无关紧要的.作为练习的基准测试与此选择无关,因为任何运行时间差异都在采样噪声中.关键是这三种变体具有不同的语义含义.Eric应该遵循两个原则:
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |