JavaScriptがウェブを遅くする--今できる緩和策を考える

文:Alex Iskold 翻訳校正:吉井美有2007年09月04日 08時00分
  • このエントリーをはてなブックマークに追加
img

 JavaScriptの1行が、今日のブログ技術に多くのパワーを与えている。ウィジェット、共有ツール、訪問者の追跡、広告。多くの場合、ブロガーは新しい技術を自分のブログに導入するのに、JavaScriptを1行加えるだけでいい。問題は、それらの1行のJavaScriptが多数組み合わされたときに起こる。

 物理学には、非線形性と呼ばれる有名な現象がある。多くの異なることが相互作用すると、結果を予測するのが難しくなるのだ。ソフトウェアの場合も違いはない。多くのコンポーネントを組み合わせると、何が起こるか予測できなくなる。これは、各コンポーネントはスタンドアロンのように振る舞うが、それらは決まった区画内のスペースと閲覧者の注意を争う関係にあるからだ。そして、この争いはすべての人を傷つける。読者、ブロガー、サービス。誰もが不満を抱くことになる。

 この記事では、多くのJavaScriptの1行がどうしてページをハングさせるのか、それに対してどうすればいいのかについて述べていく。

ブロガー:疑うことを知らない被害者

 ウィジェットは今流行の、ページに含まれる小さなコンテンツだ。ブロガーは自分の個性や好みのコンテンツをブログに並べてみせるのが大好きだ。これが、ブロガーがdel.icio.usやFlickr、Twitter、AddThis、Sphereといった新しいウィジェットを競ってインストールする理由だ。これらのウィジェットは便利で需要も多い。

img

 HTMLとブログプラットフォームに親しんでいれば、ウィジェットのインストールは比較的簡単だ。ブロガーはウィジェットのHTMLを、それを配置したい場所にペーストすればいいだけだ。コードをHTMLドキュメントの先頭に挿入しなければならない場合もあるが、これは難しくはない。少し技術的な理解があればそれを自分でやることもできるし、Widgetboxのようなプラットフォームを使って自動的にインストールすることもできる。

 これは十分簡単で、ブロガーはより多くのウィジェットをブログにインストールしている。そして、それが物事をおかしくさせ、ブログのロード時間を長くしてしまう可能性のある原因だ。

すべてのウィジェットが同じように実装されているわけではない

 現在主流のウィジェットの実装技術は、Adobe FlashとJavaScriptの2つだ。Flashウィジェットには、重いこと、サイズを変えられないこと、DOMを操作できないことなど、それ自体の問題がある。しかし、問題を起こすのは普通FlashウィジェットではなくJavaScriptウィジェットの方だ。

img

 皮肉なことだが、JavaScriptは最低限の双方向性と、HTMLドキュメントのクライアント側での素早い操作を狙った軽快な言語として構想され、設計された。しかし、その技術が辿ってきたねじれた道のりのために、JavaScriptはウェブのプログラミング言語に進化した。Ajaxからウィジェットまで、JavaScriptは多くの最先端プロジェクトで使われている。しかし、実際には、JavaScriptも問題を抱えている。以下ではそれらについて見ていこう。

ブラウザはJavaScriptをどう処理するか

 経験を積んだ技術者にとって最もショッキングな事実は、JavaScriptがシングルスレッド型の言語だということかもしれない。これは、JavaScriptが物事を同時にではなく順番に処理するということだ(Ajaxの呼び出しは例外である)。JavaScriptの断片がロードされ、あるいは評価されているとき、他のすべての処理はその終了を待たなくてはならない。

 これは、遅いJavaScriptが1つあれば、ブログ全体の読み込みが遅くなってしまう場合があるということだ。ブログ界のあらゆるところでこれが起こっている。では、どうすれば解決できるのか。

JavaScriptウィジェットをより良く、より速くできるか

 残念ながら、この問題に対する特効薬はない。これは、1つのトリックや技術だけでこの問題を解決することはできないということだ。企業が他のウィジェットと一緒に使われたされた際の影響を和らげるために使える技術の組み合わせはある。ただし、多くのウィジェットが組み合わせられれば、最終的には問題は起こる。業界によるこの問題への対処が行われるまでは、JavaScriptの提供者は次のようなことを考慮するべきだ。

  • このエントリーをはてなブックマークに追加