2013/03/05

[js]最初に呼ばれる処理

今のところ、JavaScriptの処理を埋め込んだHTMLファイルを見ているが、2種類あった。

  • function定義があったりなかったりするが、それ以外にfunctionではない処理がある。
  • 全部function定義で、イベントが発生したときに指定したfunctionが呼び出される。

 

そもそも、JavaScriptって、それ自身では「特定のプラットフォームを動かすための中間言語」みたいなものだと思っている。
中間言語というと変だけど、JavaScript自身は最小限の言語セットしか持っていなくて、JavaScriptで書いたものは「JavaScriptコンパイラ」みたいなものが読み込んで、うまいことプラットフォームが持つAPIを呼び出したり、結果を返したりという間を取り持っている、というものだ。

SeaMonkeyっていうJavaScriptエンジンがある(あった?)けど、それを動かせるようにするときに、そんなことを考えていた。
今回は単に、プラットフォームがHTMLクライアントというだけのことだ。


そんなわけで、JavaScript自身の言語仕様はそんなに複雑ではないんじゃなかろうか、と思っている。
もちろん、言語仕様がそう落ち着いた背景などはいろいろあるのだろうが、JavaScriptはそこまで仕事に関わってこないと思うので、把握はしないことにしよう。

 

話を戻して、JavaScriptで最初に呼ばれる処理についてだ。
今まで見た範囲だと、

  • functionでない処理を最初に呼ぶ
  • 全部functionなら、イベント発生で呼ばれない限りは呼び出されない

なのだと思っている。

JavaScriptは、<script></script>の中に埋め込むか、<script src=”ファイル名”></script>として別ファイルにすることができるようだ。
どっちの場合も、特に書き方は変わらない。
<style>を別ファイルにするのと同じようだ。


では、最初に動かしたい処理がある場合、地の文に書くのと、イベント呼び出し(onLoadらしい)するのと、どちらがよいか?

・・・どっちでもいいんだと思う。
私としては、全部functionにしておいた方が、あとで最初に呼び出したい処理を差し替えるのが楽かな、とは思う。

しかしそれは、JavaScriptのコンパイラがどう解釈していくかによるけど、何となく遅くなる方向になるような気がする。
コンパイラの気分で見ていくと、JavaScriptの部分は上から順に処理していくことになるだろう。
でも、「function」と書いてあったら、「それは後で呼び出されたときに考えればいいや」と思うかもしれない。functionを作るだけ作って、呼び出されないかもしれないし。
読んでいって、イベント処理の部分が出てきて、それでも関数を登録するまでにしておくだろう。「次にイベントが発生したときに呼び出す場所だけ覚えておこう」という考え方だ。
最後まで処理を読んで、「あ、onLoadだ」と思って、そのとき初めて登録したfunctionを呼びに行く。。。

まあ、最近は賢いので、onLoadになりそうなfunctionは先に処理するような最適化がありそうだがね。
それに、ネットの通信速度はそんなに速くないので、ナノ秒単位で処理するコンピュータにとってはどうでもいいことかもしれん。
いや、どうでもいいことであってほしいものだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。