[1] [[HTML]] の[[レンダリング]]の開始のタイミングと挙動をちょっと調べてみました。 [TIME[2010-11-13T05:09:51.200Z]]
;; 、
* Firefox 3.6
- [2] [[HTML]] であることが確定した時点で(?)[[アドレスバー]]が切り替わります。
-- [[HTTP応答]]の[[本体]]の受信開始時点ではまだ切り替わりません。
-- [CODE(HTML)@en[[[]]]] を受信したら切り替わりました。
- [3] [CODE(HTMLe)@en[[[title]]]] [[要素]]を受信した時点で[[タイトルバー]]が切り替わります。
- [4] [CODE(HTMLe)@en[[[body]]]] [[開始タグ]]を受信した時点で[[画布]]が切り替わります。
-- [CODE(HTMLe)@en[[[html]]]] や [CODE(HTMLe)@en[[[head]]]] に[[スタイル・シート]]で指定があったとしても、ここまでは[[レンダリング]]がはじまりません。
* Opera 9.52
- [5] [[HTTP応答]]の[[頭部]]を受信し終えた時点で[[アドレスバー]]、[[タイトルバー]]、[[画布]]が切り替わります。
- [6] [CODE(HTMLe)@en[[[body]]]] [[開始タグ]]を受信した時点で[[レンダリング]]がはじまります。
-- [7] [CODE(HTMLe)@en[[[html]]]] や [CODE(HTMLe)@en[[[head]]]] に[[スタイル・シート]]で指定があったとしても、ここまでは[[画布]]がまっさらになるだけで、本当の[[レンダリング]]ははじまりません。
* Chrome
- [8] [CODE(HTMLe)@en[[[html]]]] [[開始タグ]]を受信した時点で[[アドレスバー]]、[[タイトルバー]]、[[画布]]が切り替わります。
- [9] その後はインクリメンタルに[[レンダリング]]されていきます。
* WinIE8
- [10] [CODE(HTMLe)@en[[[body]]]] [[開始タグ]]を受信した時点で[[アドレスバー]]、[[タイトルバー]]、[[画布]]が切り替わります。
- [11] (リンクによるページ遷移ではなく) [[再読込]]の場合、再読込ボタンを押した時点で旧レンダリングへの[[イベント]]がスクリプトにわたらなくなります。 [CODE(HTMLe)@en[[[html]]]] [[開始タグ]]を受信した時点で新レンダリングで[[イベント]]を[[スクリプト]]が受け取れるようになります。 (再読込ボタンから [CODE(HTMLe)@en[[[html]]]] [[開始タグ]]までの間は観測する手段がない。)
* [CODE(HTMLe)@en[[[head]]]] 要素注入
[12] [[Chrome]] と [[WinIE]] では、[[HTML]] [[構文解析器]]によって [CODE(HTMLe)@en[[[head]]]] [[要素]]が
[[DOM]] に挿入されるより''前に''[[スクリプト]]によって [CODE(HTMLe)@en[[[head]]]]
[[要素]]を挿入することが可能です。
[PRE(HTML example code)[
]PRE]
[13] しかし、[[HTML]] [[構文解析器]]は必ず自動的に新しい [CODE(HTMLe)@en[[[head]]]] [[要素]]を挿入します。
>>12 による [CODE(HTMLe)@en[[[head]]]] [[要素]]が[[構文解析器]]に影響を与えることはありません。
(ですから、 [CODE(HTMLe)@en[[[head]]]] [[要素]]が2つになります。)