* script 要素 defer 属性 (HTML, XHTML 1)
[1] [[HTML]] の [CODE(HTMLe)[[[script]]]] 要素の
[DFN[[CODE(HTMLa)[defer]] 属性]]は、
そのスクリプトが文書内容を生成しないことを示します。
[2] 仕様書:
- [[HTML 4]]
--
[[#comment]]
** 属性値
[3] この属性は[[真偽値属性]]です。指定すれば真、
省略すれば偽です。
[[#comment]]
** UA による利用
[4] この属性が指定されていると、そのスクリプトが文書の内容を生成しないことを意味します。
[[JavaScript]] の [CODE(JS)[[[document]].[[write]]]] が文書内容生成に該当します。
UA はこの属性が指定されていれば、構文解析とレンダリングを続行できます。
[SRC[HTML 4 18.2.1]]
仕様書は当たり前だと思って書いていないのでしょうが、
文書を読み込みながら構文解析しながらスクリプトを実行しつつレンダリングするという処理モデルが念頭にあるのだと思われます。
レンダリングする文書の内容は普通は鯖から送られてきたものですが、
[CODE(HTMLe)[script]] 要素によって動的に生成されるかもしれません。
ですから、 [CODE(HTMLe)[script]] 要素まで読取り・構文解析・レンダリングが到達したら、
そのスクリプトを実行して結果を反映して続きの構文解析・レンダリングを行わなければなりません。
しかし、スクリプトの内容が関数の定義や[[事象取扱器]]の登録なら、
その時点で行う必要はありません。そこで [CODE(HTMLa)[defer]]
と指定しておけば、 UA は文書全体をレンダリングしてから実行することができます。
[[#comment]]
** 不思議解釈
[19] ''JavaScript質問スレ''
> 703 名前: Name_Not_Found 投稿日: 03/01/31 21:13 ID:???
[PRE[
defer
【誤答例】
スクリプトに文書の表示を生成する要素を含まないことを宣言します。
この要素内のスクリプトが、文書の内容となるものを一切生成しない
(例えば、"document.write" などを使用していない)ことを表わします。
【正答例】
ブロック内にインラインスクリプトがなく、関数だけを含んでいることを示す。
スクリプトが必要になるまでその解析を延期することにより、
ドキュメントのロード時間が短くなり、結果的にパフォーマンスが良くなる
]PRE]
> 704 名前: Name_Not_Found 投稿日: 03/01/31 22:08 ID:???
[PRE[
>>703
http://www.w3.org/TR/1999/REC-html401-19991224/interact/scripts.html#adef-defer
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/defer.asp
http://www.microsoft.com/japan/developer/library/jpisdk/dhtml/references/html/SCRIPT.htm
つまり誤答例の HTML4 Spec. はウ゛ァカ仕様で
「関数だけを含む」と書いてないMSDN本家も厨房マニュアルで
正答例のMSDN日本語版スハ゛ラシイ!ってことでよろしいか?
]PRE]
[[#comment]]
** メモ
[[#comment]]
* メモ
[20]
[CITE[ishinao.net/mylog - deferとWScript.Shell.Runの第3引数]]
([[名無しさん]])