PHP中类型提示的性能开销有多大 - 它是否足以成为决定使用它的一个考虑因素?
答案 0 :(得分:5)
不,这并不重要。如果你需要做一些算法密集的事情,比如声音处理或3D编程,你应该使用另一种编程语言。
如果您想要硬数据,请制作基准......
<?php
function with_typehint(array $bla)
{
if(count($bla) > 55) {
die("Array to big");
}
}
function dont_typehint($bla)
{
if(count($bla) > 55) {
die("Array to big");
}
}
function benchmark($fn)
{
$start = microtime(TRUE);
$array = array("bla", 3);
for($i=0; $i<1000000; $i++) {
$fn($array);
}
$end = microtime(TRUE);
return $end-$start;
}
printf("with typehint: %.3fs\n", benchmark("with_typehint"));
printf("dont typehint: %.3fs\n", benchmark("dont_typehint"));
在我的电脑上,性能是一样的。有时它更快,有时没有打字:
$ php Documents/type_hinting.php
with typehint: 0.432s
dont typehint: 0.428s
$ php Documents/type_hinting.php
with typehint: 0.414s
dont typehint: 0.416s
答案 1 :(得分:1)
您可以通过创建简单的bechmark找到答案,例如:
$test1 = function(stdClass $obj){};
$test2 = function($obj){};
$begin = microtime(true);
for ($i = 0; $i < 1000000; $i++){
$test1(new stdClass);
}
$end = microtime(true);
$timeElapsedTest1 = $end - $begin;
$begin = microtime(true);
for ($i = 0; $i < 1000000; $i++){
$test2(new stdClass);
}
$end = microtime(true);
$timeElapsedTest2 = $end - $begin;
echo 'difference: ', $timeElapsedTest1 - $timeElapsedTest2;
计算机上1 000 000个循环的差异:
1. 0.0994789600372 ms
2. 0.0944871902466 ms
3. 0.103265047073 ms
4. 0.0899112224579 ms
5. 0.0860922336578 ms
6. 0.0973558425903 ms
7. 0.0905900001526 ms
8. 0.0891189575195 ms
9. 0.09983086586 ms
10. 0.0914621353149 ms
我用stdClass
替换array
后,我计算机上1 000 000个循环的差异发生了一些变化:
1. 0.00209307670593 ms
2. 0.00217390060425 ms
3. 0.00558805465698 ms
4. 0.00264406204224 ms
5. 0.00367116928101 ms
6. 0.00262594223022 ms
7. 0.00353169441223 ms
8. 0.00217604637146 ms
9. 0.00049090385437 ms
10. 0.002516746521 ms