我正在构建一个应用程序,它会重复一些功能。
例如:
$Class = new Class;
for($i; $i < 1000; $i++) {
$Class->get_something();
}
我已经阅读了很多关于 OOP 的文章以及为什么它很慢,但我仍然不明白“慢”部分到底在哪里。人们继续使用世界“开销”,是加载实际的类吗?一旦我require
上课,现在我调用函数或变量时的速度是否相同?
您正在触及一个非常古老的争论,即进行一个大型查询以获取您的数据,或者遍历许多较小的查询以接收它们。答案在于实现的细节。在某些情况下,一遍又一遍地调用一个函数会更快,而其他时候它只会破坏你的性能。一遍又一遍地调用函数的“开销”非常小,重要的是它的“胆量”。
可以说的一件事是,您不应该在 PHP 中使用大量无用的 getter,因为它确实会减慢您的代码速度。你为什么不自己做一个基准测试,例如:
<?php
class test1{
private $prop = 1;
public function get_prop(){
return $this->prop;
}
}
class test2{
public $prop = 1;
}
$t1 = microtime(true);
$obj1 = new test1();
for($i=0;$i<=1000000;$i++){
$a = $obj1->get_prop();
}
echo 'test1, access with get_prop : '.(microtime(true) - $t1).'ms<br/>';
$t1 = microtime(true);
$obj2 = new test2();
for($i=0;$i<=1000000;$i++){
$a = $obj2->prop;
}
echo 'test2, direct access to prop : '.(microtime(true) - $t1).'ms';
这输出:
test1,使用 get_prop 访问:1.7691290378571ms
test2,直接访问道具:0.38315200805664ms
慢了 4 倍以上!
这是函数调用开销,但在正常情况下可以忽略不计。这也适用于函数,而不仅仅是类方法。类方法和函数之间的开销差异甚至可以忽略不计。
如果要运行数千次,避免在函数中移动该代码并使用内联代码是有意义的。否则,您不会注意到任何性能影响。
除非你真的需要,否则不要这样做,因为你最终会得到组织不良的代码
与此主题相关的其他资源。静态方法似乎慢得多。