JavaScriptの定数宣言は高速化につながるか?
2007.10.30 / javascript
JavaScriptでFirefoxがconst(定数宣言)をサポートしていることをフと思い出しました。で、定数宣言って速度向上とかにつながるのかな?思ってついカッとなってベンチマークとるコードをかいてみました。こんな感じ。
<html> <head><title>const test</title></head> <body> <script> window.load = monitor(); function monitor(){ var A = "TestA"; const B = "TestB"; var Klass = { C : "TestC" }; // 1st test var start = new Date(); for(var i=0; i<10000000; i++){ var b = A; } var end = new Date(); console.log("A:" + (end-start)); // 2nd test var start = new Date(); for(var i=0; i<10000000; i++){ var b = B; } var end = new Date(); console.log("B:" + (end-start)); // 3rd test var start = new Date(); for(var i=0; i<10000000; i++){ var b = Klass.C; } var end = new Date(); console.log("C:" + (end-start)); } </script> </body></html>
1000万回ループで回してグローバル変数、定数宣言した変数、static変数にアクセスして、そのアクセス時間を比較。結果はこんな感じでした。
測定結果
Test | msec |
A(グローバル変数) | 2333 |
B(定数) | 2323 |
C(クラス変数) | 2935 |
結局
グローバルに宣言した場合、普通の変数も定数もアクセス時間に違いはほとんど無いようで。1000万回アクセスして10msec程度しか違わないので、普通にコード書く分には無視できそうです。あと、変数をオブジェクトに収めたほうが遅くなってるのは理由がよく分かってません。。実行時アクティベーションオブジェクトの初期化とかそんな話までなっちゃってるのかな?(このあたり気になった)
と、いうわけで結論としては、constは変数をreadonlyにするだけ、ということになるのかな。詳しい方いらしたら教えてください!