【发布时间】:2012-01-27 15:18:37
【问题描述】:
我正在阅读 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 次调用 = 900 毫秒
由于某些原因,这比重新运行函数定义(第一个代码部分)要慢。
我有几十个我正在调用的 javascript 文件和函数,使用第一个代码示例,所有这些文件和函数都在 200 毫秒内运行。在为已定义的函数名称添加缓存并且不再重新定义它们之后,完全相同的代码的运行时间约为 900 毫秒。
为了验证缺少的重新定义是性能损失的唯一原因,我更改了 if:
if ( !isset($this->cache[$filename]) || true ) {
... 函数名仍然保存到数组中,排除 php-array 作为可能的问题。
巨大的性能损失来自哪里,或者我该如何进一步调试?
【问题讨论】:
标签: php javascript performance v8