代码执行的效率
在《性能调优攻略》里,我说过,要调优性需要找到程序中的Hotspot,也就是被调用最多的地方,这种地方,只要你能优化一点点,你的性能就会有质的提高。在这里我给大家举三个关于代码执行效率的例子(它们都来自于网上)
第一个例子
PHP中Getter和Setter的效率(来源reddit)
这个例子比较简单,你可以跳过。
考虑下面的PHP代码:我们可看到,使用Getter/Setter的方式,性能要比直接读写成员变量要差一倍以上。
<?php //dog_naive.php class dog { public $name = ""; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } $rover = new dog(); //通过Getter/Setter方式 for ($x=0; $x<10; $x++) { $t = microtime(true); for ($i=0; $i<1000000; $i++) { $rover->setName("rover"); $n = $rover->getName(); } echo microtime(true) - $t; echo "\n"; } //直接存取变量方式 for ($x=0; $x<10; $x++) { $t = microtime(true); for($i=0; $i<1000000; $i++) { $rover->name = "rover"; $n = $rover->name; } echo microtime(true) - $t; echo "\n"; } ?>
这个并没有什么稀,因为有函数调用的开销,函数调用需要压栈出栈,需要传值,有时还要需要中断,要干的事太多了。所以,代码多了,效率自然就慢了。所有的语言都这个德行,这就是为什么C++要引入inline的原因。而且Java在打开优化的时候也可以优化之。但是对于动态语言来说,这个事就变得有点困难了。