私はphpでjavascriptファイルを読んでいて、v8jsを使ってそれらを実行しています。なぜ機能の再定義が最初のものを呼び出すより速いのですか?
簡体例:
$javascriptCode = file_get_contents($filename);
$funcName = 'func'.md5($filename);
$v8js->executeString("
function {$funcName}() {
{$javascriptCode}
}");
$v8js->executeString("var testVariable = {$funcName}();");
〜50のコール= 200msの
パフォーマンスを向上させるために、私は、関数がすでに定義されている場合のみ、関数名をコールする後続の呼び出しを削減:
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 calls = 900ms
何らかの理由で、これは関数定義(最初のコード部分)を再実行するよりも時間がかかります。
私は最初のコード例を使用して200ms以内に実行されたjavascriptファイルと関数をいくつも持っています。すでに定義されている関数名のキャッシングを追加し、それらを再定義しなくても、まったく同じコードのランタイムは約900msでした。関数名は依然としてとしてのphp-配列を除いて、配列に保存されていた...
if (!isset($this->cache[$filename]) || true) {
:行方不明の再定義が、私は場合を変更し、パフォーマンス低下のための唯一の理由であることを確認するには
考えられる問題。
大きなパフォーマンスの低下はどこから発生しますか、これをさらにどのようにデバッグすることができますか?