回答編集履歴
2
文章がおかしいのを訂正
answer
CHANGED
@@ -57,7 +57,7 @@
|
|
57
57
|
time: 0.012ms
|
58
58
|
time: 0.006ms
|
59
59
|
|
60
|
-
正確な理由はわかりませんが、直感的にはv8のコンパイラーがコードを最適化しているためではないかと思えました。例えば上のコードでslice_testやslice_test2関数はsliceの計算結果をどこでも使っていません。v8エンジンのオプティマイザー(っていうんでしょうか)が関数単位に最適化を施すとするなら
|
60
|
+
正確な理由はわかりませんが、直感的にはv8のコンパイラーがコードを最適化しているためではないかと思えました。~~例えば上のコードでslice_testやslice_test2関数はsliceの計算結果をどこでも使っていません。v8エンジンのオプティマイザー(っていうんでしょうか)が関数単位に最適化を施すとするなら~~(消し忘れの文章が残ってたので削除)
|
61
61
|
|
62
62
|
- コンパイルはいつ行われるのだろう?
|
63
63
|
V8エンジンではコードを読み込んだ時点でコンパイルされるんでしょうか?それとも関数が最初に実行されたときでしょうか?なんとなく後者であるような気がしますが、そうだとするとslice_testやslice_test2関数が初めて実行された時点でコンパイルされるためコンパイル時間がかかっているのではないかと思えます。
|
1
追記
answer
CHANGED
@@ -65,6 +65,8 @@
|
|
65
65
|
- コンパイルした後に最適化しているかも知れない
|
66
66
|
slice_testやslice_test2ではsliceを計算してはいますが結果を使ってません。よって最初のコンパイル時点あるいは最適化の時点でslice自体まったく呼び出さないような最適化が行われるかも知れません。
|
67
67
|
|
68
|
+
追記:実際にslice_testの方だけ結果を用いるようにしてみたところ測定結果にほとんど違いがみられませんでした。sliceを呼び出さない最適化をしているのか、本ケースの程度ではsliceが早すぎて違いが見えないのかどちらかわかりませんでした。
|
69
|
+
|
68
70
|
---
|
69
71
|
以上は単なる想像です。v8エンジンの動作について情報は以下の記事を参考にしました。
|
70
72
|
|