2
我正在閱讀php中的javascript文件並使用v8js執行它們。爲什麼函數重定義比調用第一個更快?
簡化的例子:
$javascriptCode = file_get_contents($filename);
$funcName = 'func'.md5($filename);
$v8js->executeString("
function {$funcName}() {
{$javascriptCode}
}");
$v8js->executeString("var testVariable = {$funcName}();");
〜50個呼叫= 200毫秒
爲了提高性能我減少後續調用僅當函數已經定義調用函數名:
if (!isset($this->cache[$filename])) {
$javascriptCode = file_get_contents($filename);
$funcName = 'func'.md5($filename);
$v8js->executeString("
function {$funcName}() {
{$javascriptCode}
}");
$this->cache[$filename] = $funcName;
}
else {
$funcName = $this->cache[$filename];
}
$v8js->executeString("var testVariable = {$funcName}();");
〜50個電話= 900ms
由於某些原因,這比重新運行函數定義(第一個代碼部分)要慢。
我有幾十個JavaScript文件和函數,我打電話,所有在200毫秒內使用第一個代碼示例運行。爲已定義的函數名添加緩存並不再重新定義它們之後,完全相同代碼的運行時間大約爲900毫秒。
要驗證缺少重新定義對於業績虧損的唯一原因,我改變了,如果:
if (!isset($this->cache[$filename]) || true) {
...具有該功能的名稱仍然被保存到數組中,不包括PHP-陣列一個可能的問題。
大的性能損失來自哪裏,或者如何進一步調試?