简单来说,规则
很容易理解RewriteRule ^([a-z]{2,8})$ ?id=$1 [L,QSA]
比
快RewriteRule ^(.*)$ ?id=$1 [L,QSA]
但有没有办法检查和比较它(Apache RewriteRule正则表达式)的正确性能?
答案 0 :(得分:3)
Apache正则表达式似乎是derived from PCRE所以您可以使用pcretest
进行基准测试并了解它们的表现。
以下是使用一百万个测试匹配和三个不同测试输入对两个表达式进行计时的结果。输出是每场比赛的平均执行时间。
$ pcretest -tm 1000000 -q
re> /^([a-z]{2,8})$/
data> a
Execute time 0.0002 milliseconds
No match
data> aaaaaaaa
Execute time 0.0003 milliseconds
0: aaaaaaaa
1: aaaaaaaa
data> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Execute time 0.0006 milliseconds
No match
data>
$ pcretest -tm 1000000 -q
re> /^(.*)$/
data> a
Execute time 0.0003 milliseconds
0: a
1: a
data> aaaaaaaa
Execute time 0.0003 milliseconds
0: aaaaaaaa
1: aaaaaaaa
data> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Execute time 0.0005 milliseconds
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
data>
他们似乎有类似的执行时间,在我的测试机器上每秒大约2-3百万次匹配。但真正的问题是,为什么你怀疑重写规则的匹配时间是个问题?