よくある問題の1つは、すべてのJavaScriptを一度に実行したいにもかかわらず、実際にはそれができないということだ。スクリプトが読み込み中にページを修正する必要がないのなら、スクリプトの実行は読み込み終了後まで延期されるべきだ。こうすれば、ページのコンテンツがまず表示される。残念ながら、すべてのブラウザがこの処理延期の指示を守るわけではない。
ページの読み込み中に実行されるものは、すべて読み込みを遅らせる。実行されるコードは少ないほどよい。これと似た問題は、何かを探してページ全体を処理することだ。これは最もやってはならないことで、「Unresponsive Script(スクリプトが応答していない)」のポップアップを引き起こす。一般に、実行に何秒か以上の時間がかかるJavaScript(典型的には5秒以上)は、すべて問題を引き起こす。長い実行時間を、タイムアウトを使って分割するのが(手間はかかるが)正しい。
最近の多くのスクリプトは、例えばwww.mycoolwidget.comというような同じURLを使っている。ウィジェットが広く使われるようになると、同じサーバで同時に処理しなくてはならないリクエストの量は非常に大きくなる。よりよいアプローチは、server1.mycoolwidget.comとserver2.mycoolwidget.comというように、異なるURLを配ることだ。こうしておくことで、これらのURLが今は同じドメイン名を指しているとしても、将来トラフィックを分割する選択をとれるようになる。
JavaScriptは問題が起こりやすいため、おそらく最悪なのは、車輪の再発明だ。Javaとは違って、標準ライブラリは存在しないが、prototypeのように実質的に標準になったようなものはある。ライブラリは、システムの落とし穴を知っていて理解の深い、経験を積んだ人たちによって書かれているため、そのコードを再利用することはよい考えだ。
エンドユーザーのサイトでは他のJavaScriptも実行されるということを意識する。これが最も重要なことだ。「自分はより大きなシステムの一部だ」ということを意識することで、開発者は他のウィジェットに対する不利益を最小化でき、全体的なユーザー体験もスムーズにすることができる。
JavaScriptのよい市民となることを奨励することはできるが、開発者にできることには限界がある。開発しているウィジェットがどこでどう使われるかは知りようがない。他にどんなものがインストールされるのかという情報がなければ、スクリプトを調整するのは難しい。ブロガーやブログ読者に対する影響を最小化することもできない。ではどうしたらよいのか。
Javaコミュニティを見てみれば、この問題は実際に何度も解決されている。アプレット、サーブレット、怖ろしげに聞こえるEnterprise Java Beansも、概念的にはウィジェットとの違いはない。大きな違いは、これらがすべてコンテナで管理されていることだ。
コンテナは、配信インフラや通信インターフェースをホストする環境だ。コンテナは読み込みや領域解放、コールバック、クリック、メッセージやその他の、エンジニアが大好きで、技術が苦手な人が聞きたくないようなことを処理する。簡単に言えば、JavaScriptにもコンテナが必要なのだ。コンテナはコンポーネントの無秩序に秩序をもたらす。
ウィジェットとJavaScriptツールは非常にクールで非常に便利だが、現在はそれらをうまく動かすためのよいインフラはない。現在、ブログの読み込みの遅れの始めの兆候がすでに現れており、今後さらに多くのウィジェットとJavaScriptの断片がブログ界に普及するにつれて、事態は悪くなる一方だろう。ブロガーにこの複雑さや相互依存性、ウィジェットによって引き起こされる問題を理解することを求めるのは、筋が通らない。
われわれには、それらのウィジェットを提供する、自動化された標準的な方法が必要だ。業界でこれまでに既に行われてきたことを考慮することができれば理想的だ。Javaコミュニティは大きな成功を収めており、その経験を活用することは、ウィジェットを使う新興企業にとって大きな価値があるだろう。
いつものように、読者の意見を聞かせてほしい。もし読者がウィジェット開発者なら、環境に優しく素早いコードを書くためにどういう方法を取っているかをぜひ聞かせてほしい。
CNET Japanの記事を毎朝メールでまとめ読み(無料)
先端分野に挑み続けるセックが語る
チャレンジする企業風土と人材のつくり方
すべての業務を革新する
NPUを搭載したレノボAIパソコンの実力
地味ながら負荷の高い議事録作成作業に衝撃
使って納得「自動議事録作成マシン」の実力