Có một cuộc tranh luận nhỏ liên quan đến tốc độ của fnmatch qua pathinfo đây: how to check if file is php?pathinfo vs fnmatch
Tôi đã không hoàn toàn bị thuyết phục để quyết định điểm chuẩn hai chức năng.
Sử dụng đường dẫn động và tĩnh cho thấy rằng đường dẫn nhanh hơn.
Logic và kết thúc điểm chuẩn của tôi có hợp lệ không?
EDIT: Dùng mac php từ cmd
PHP 5.3.0 (cli) (được xây dựng: ngày 20 tháng 7 năm 2009 13:56:33) Bản quyền (c) 1997-2009 Các PHP Nhóm Zend Engine v2.3.0, Bản quyền (c) 1998-2009 Zend Technologies
con đường năng động pathinfo 3,2973630428314 fnmatch 3,4520659446716 x1.05
con đường tĩnh pathinfo ,86487698554993 fnmatch 1,0420439243317 x1.2
mac xampp php từ cmd
PHP 5.3.1 (cli) (được xây dựng: 27 Tháng Hai 2010 12:41:51) Bản quyền (c) 1997- 2009 PHP Nhóm Zend Engine v2.3.0, Bản quyền (c) 1998-2009 Zend Technologies
con đường năng động pathinfo 3,63922715187 fnmatch 4,99041700363 x1.37
đường tĩnh pathinfo 1.03110480309 fnmatch 2.38929820061 x2.32
tôi bao gồm một mẫu của các kết quả đó là trong vài giây cho 100.000 lặp trên máy tính của tôi:
dynamic path
pathinfo 3.79311800003
fnmatch 5.10071492195
x1.34
static path
pathinfo 1.03921294212
fnmatch 2.37709188461
x2.29
Code:
<pre>
<?php
$iterations=100000;
// Benchmark with dynamic file path
print("dynamic path\n");
$i=$iterations;
$t1=microtime(true);
while($i-->0){
$f='/'.uniqid().'/'.uniqid().'/'.uniqid().'/'.uniqid().'.php';
if(pathinfo($f,PATHINFO_EXTENSION)=='php') $d=uniqid();
}
$t2=microtime(true) - $t1;
print("pathinfo $t2\n");
$i=$iterations;
$t1=microtime(true);
while($i-->0){
$f='/'.uniqid().'/'.uniqid().'/'.uniqid().'/'.uniqid().'.php';
if(fnmatch('*.php',$f)) $d=uniqid();
}
$t3 = microtime(true) - $t1;
print("fnmatch $t3\n");
print('x'.round($t3/$t2,2)."\n\n");
// Benchmark with static file path
print("static path\n");
$f='/'.uniqid().'/'.uniqid().'/'.uniqid().'/'.uniqid().'.php';
$i=$iterations;
$t1=microtime(true);
while($i-->0) if(pathinfo($f,PATHINFO_EXTENSION)=='php') $d=uniqid();
$t2=microtime(true) - $t1;
print("pathinfo $t2\n");
$i=$iterations;
$t1=microtime(true);
while($i-->0) if(fnmatch('*.php',$f)) $d=uniqid();
$t3=microtime(true) - $t1;
print("fnmatch $t3\n");
print('x'.round($t3/$t2,2)."\n\n");
?>
</pre>
phải là một CW vì nó không phải là một câu hỏi thực sự tôi đoán – Gordon
Đó là một câu hỏi thực sự! Tại sao những người khác lại đạt được kết luận khác? – zaf
Bạn đã chạy thử nghiệm bao nhiêu lần? Trên các máy đa nhiệm, một số tác vụ có thể bị trì hoãn, làm chậm các phần mã có thể nhanh hơn. – webbiedave