Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2011-05-24

Proposal for separating script downloads and execution

16:31

こういうトピックがある。

Yahoo の Nicolas Zakas さんや Google の Steve Souders さんや LABjs の getify さん(Kyle Simpson さん)が熱心に議論してる問題。

スクリプトのダウンロードと実行を分ける、というかダウンロード即実行しないようにして、実行は自分でコントロールできるようにしたいという話。

スクリプトA~Dがあって、BはAに、CはBに、DはCに依存してるとすると、HTML だとこんなふうに書けるんだけど、

<script src=A></script>
<script src=B></script>
<script src=C></script>
<script src=D></script>

今は大抵のブラウザで(たぶん Opera 以外)このスクリプトは並列にダウンロードして、実行は順番にやる。

じゃあもしBはAに依存してDはCに依存してるけど、ABとCDのそれぞれは独立してて、どちらも出来るだけ早く実行されてほしい、というときはうまい方法がない。defer や async を使っても無理。

そこで getiry さんとかは scriptgourp 要素を提案してたりした。↓このあたりにまとまってる。

それから、こういう挙動を LABjs のようなローディングライブラリからコントロールしたい場合も良い方法がない。LABjs は今はローディングと実行を分けるために type=text/html とかでロードしてブラウザのキャッシュに入れて、必要になったときに type=text/javascript でロードしたりというハックをしてるんだけど、これもキャッシュが使われる保証はないし、Firefox 4 のリリースのときに挙動変更でかなり議論になった。


ここまで簡単なあらすじ。自分の意見は、だいぶ揺れたけど、最近になって固まった。

「既に CORS+XHR+eval で実現できるんだから今更新機能を追加する必要なし」

そのために Access-Control-Allow-Origin を付けるのは面倒かもしれないけど、どうせ新規に作られるサイトでしか使われないんだから、そのぐらいの手間は無視できるぐらい。

CORS は実装してないブラウザがある。それはそのブラウザのせいだし Progressive Enhancement でどうにでもなる。新しい機能を今から作っても実装まで待たないといけないのは同じ。


Hixie さんもあまり機能追加には乗り気ではないみたいだね。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20110524
 |