[追記]2013/01/25
今更以下の情報はさすがに古いです・・・
昔はこういうことがあったんだよと下の世代へお伝え下さい・・・。
よく言われる、「PHPの最適化 12 PHP Optimization tips」が本当か、今更ながら検証してみます。
環境は
- EeePC 1002HA
- Ubuntu 9.10
- Apache/2.2.12 (Ubuntu)
- PHP Version 5.2.10-2ubuntu6.4
間違いなく使う requie_once() って遅い??
<?php $limit = 10000; $requiredFileName = 'a.php'; class TimeRecorder { private $_holder = array(); public function __construct(array $holderNames) { foreach ($holderNames as $name) { $this->_holeder[$name] = array(); } } public function rec($holderName) { $this->_holeder[$holderName][] = microtime(true); } public function display() { $results = array(); foreach ($this->_holeder as $holderName => $time) { $results[$holderName] = $time[1] - $time[0]; } echo '<pre>'; var_dump($results); echo '</pre>'; } } $holder = new TimeRecorder(array( 'require', 'require_once', 'include', 'include_once' )); // require $holder->rec('require'); for ($i = 0; $i < $limit; $i++) { require $requiredFileName; } $holder->rec('require'); // require_once $holder->rec('require_once'); for ($i = 0; $i < $limit; $i++) { require_once $requiredFileName; } $holder->rec('require_once'); // include $holder->rec('include'); for ($i = 0; $i < $limit; $i++) { include $requiredFileName; } $holder->rec('include'); // include_once $holder->rec('include_once'); for ($i = 0; $i < $limit; $i++) { include_once $requiredFileName; } $holder->rec('include_once'); $holder->display();
結果
array(4) {
["require"]=>
float(3.83405184746)
["require_once"]=>
float(0.385987997055)
["include"]=>
float(11.2274429798)
["include_once"]=>
float(0.466109991074)
}
これも、そんなに気にするほどもない差だな・・・。
よく言われるのが、"条件付き読み込みは include を使う"みたいな。
require 系は読み込みに失敗すると、E_ERROR レベルの致命的なエラー
が発生するから、クラス読み込みとか、ファイルが読み込まれないと処理できない場面なんかで
使うとか。用途をちゃんと分けて使いたいもんです。