- ベストアンサー
JavaScriptのパフォーマンスについて
JavaScriptのパフォーマンスについて質問です。 いくつもの関数の間で、変数を利用する際、 関数の引数にして受け渡すことが一番パフォーマンスが良いと思います。 ただ、もしそれができない場合、 ・グローバル変数にして、複数の関数で利用することと、 ・HTMLのINPUT(type="hidden")などに置いておいて、DOM操作で取得すること どちらの方が、クライントのパフォーマンスが良いのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一般的な話としては、 DOMアクセスは非常に高コストな処理なので可能な限り避けるべきです。 (パフォーマンス最適化を考えるならDOMアクセス数削減は真っ先に候補に挙げてもいいくらい。) グローバル変数へのアクセスは、ローカル変数へのアクセスと比べると スコープチェーンをたどる必要がある分確かに遅いですが、 DOMアクセスのコストに比べれば差は小さいです。 あとは、パフォーマンスについて何かをするときは、 本当に効果があるか(プロファイラなどで)実際に確認するようにしてください。 机上だけでは見当違いのことをしている可能性もあります。
その他の回答 (2)
- pringlez
- ベストアンサー率36% (598/1630)
・その2択しか存在しない ・ほんの少しでも速いほうを選べ という条件であればグローバル変数です。 ただ、現実を踏まえるべきです。 両差の違いはごくわずかです。数万回、数百万回繰り返すくらいでないと 差を検知することすらできないと思います。 数十回や数百回単位しか繰り返さない処理では そんなことを意識しても無駄です。 理論的な速度差にこだわるより、現実に差が出るかどうかを踏まえ、 差がないのであれば、むしろ気をつけるべきなのは 人間が読みやすい・理解しやすいコードであるかどうかであり、 その点を意識するほうがはるかに大切なことです。
お礼
ご解答ありがとうございます。 わずかなパフォーマンスの向上よりも、可読性を意識する方が大切なんですね。
- tracer
- ベストアンサー率41% (255/621)
2択ならグローバル変数の方が速いと思いますが、なぜ2択に絞ってしまうのかがわかりません。また「もしそれができない場合」となる状況も想像できません。クロージャとか使えないってことでしょうか? もしくは、グローバル変数とは言葉のあやで、参照後に消去されるローカル変数の対義語として使用しているだけなのでしょうか?
お礼
ご解答ありがとうございます。 クロージャーについての知識が足りないので、先ほどの2択しか思いつきませんでした。 またグローバル変数というのは、ローカル変数の対義語として、使用しています。 クロージャーについて、勉強してみます。
お礼
早々のご解答ありがとうございます。 やはり、DOM操作はまず避けるべき対象なんですね。 それと、効果があるのか実際に試して確認することの大切さもご指摘いただきありがとうございました。