回答編集履歴
2
追加部分の誤字を修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
特にスマホユーザーは多くのケースで回線速度やマシンスペックが低速になってしまいます。
|
14
14
|
|
15
|
-
パフォーマンスを重視する為に</body>直前に設置する事が基本です。
|
15
|
+
パフォーマンスを重視する為に`</body>`直前に設置する事が基本です。
|
16
16
|
|
17
17
|
|
18
18
|
|
@@ -130,7 +130,7 @@
|
|
130
130
|
|
131
131
|
この属性が付与されたscriptタグはDOMの読み込みを停止することなく裏で読み込み続けてくれます。
|
132
132
|
|
133
|
-
(
|
133
|
+
(デメリットもあります。詳しくはコメント欄へ)
|
134
134
|
|
135
135
|
|
136
136
|
|
@@ -144,6 +144,6 @@
|
|
144
144
|
|
145
145
|
とりあえずは</body>の直前が好ましいと覚えておくと良いでしょう。
|
146
146
|
|
147
|
-
ただし、フロントエンド技術者としての技術力が
|
147
|
+
ただし、フロントエンド技術者としての技術力が十分にあればhead内に設置してあっても構いません。
|
148
148
|
|
149
149
|
色々調べてみたり試してみてください。
|
1
校正+おまけ追加
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
何
|
1
|
+
何を重視したいかで決まります。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -8,11 +8,15 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
|
11
|
+
インターネット上には回線速度やマシンスペックが速い人も遅い人も居ます。
|
12
|
+
|
13
|
+
特にスマホユーザーは多くのケースで回線速度やマシンスペックが低速になってしまいます。
|
12
14
|
|
13
15
|
パフォーマンスを重視する為に</body>直前に設置する事が基本です。
|
14
16
|
|
17
|
+
|
18
|
+
|
15
|
-
|
19
|
+
対するheadに設置する主張は、CSSやメタ情報等と同じ位置にあり統一感が取れていることですね。
|
16
20
|
|
17
21
|
|
18
22
|
|
@@ -22,15 +26,13 @@
|
|
22
26
|
|
23
27
|
何故構造と速度で分けたか?
|
24
28
|
|
29
|
+
|
30
|
+
|
25
31
|
理由としては、JavaScriptはダウンロードから実行完了まで描画が停止します。
|
26
32
|
|
27
33
|
その為Googleの検索エンジンでは「head要素内にJavaScriptは入れないでください」とアナウンスしています。
|
28
34
|
|
29
35
|
アナリティクス等のコードも「</body>タグの直前に挿入してください」という一文があり徹底しています。
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
headに書いたほうが統一感があるのはそのまんまなので割愛します。
|
34
36
|
|
35
37
|
|
36
38
|
|
@@ -42,11 +44,19 @@
|
|
42
44
|
|
43
45
|
|
44
46
|
|
47
|
+
その通り!
|
48
|
+
|
49
|
+
|
50
|
+
|
45
|
-
|
51
|
+
DOMツリー構造が読み込まれる前なので、先に書いても期待通りの動作はされません。
|
46
52
|
|
47
53
|
しかしJavaScriptはイベント駆動で動作しており、ブラウザが発行する様々なイベントをトリガーに関数を実行することが可能です。
|
48
54
|
|
55
|
+
|
56
|
+
|
49
57
|
その中には「DOMツリー構造をブラウザが全て読み終わった」というイベントも用意されています。
|
58
|
+
|
59
|
+
下記のような記述のスクリプトを見たことはありませんか?
|
50
60
|
|
51
61
|
|
52
62
|
|
@@ -89,3 +99,51 @@
|
|
89
99
|
|
90
100
|
|
91
101
|
これならばhead要素内にJSを設置してもDOMツリー構造を解析するまで処理が遅延されます。
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
---
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
【追記】おまけ: 速度を犠牲にせず、headに設置できないか?
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
結論から言えば可能です。
|
114
|
+
|
115
|
+
例えばあまりの速さで大騒ぎになってる[dev.to](http://dev.to)というサイトでは、
|
116
|
+
|
117
|
+
headタグ内に全てのscriptタグが設置されています。
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
Googleの[PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/)では
|
122
|
+
|
123
|
+
head要素内に設置したscriptタグは減点扱いになりますが、dev.toは減点されてません。
|
124
|
+
|
125
|
+
なぜ?Googleにお金払ったから?
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
HTML5で実装されたasyncという属性を利用しています。
|
130
|
+
|
131
|
+
この属性が付与されたscriptタグはDOMの読み込みを停止することなく裏で読み込み続けてくれます。
|
132
|
+
|
133
|
+
(ただし、依存ライブラリ等がどの順番で読み込まれるかも制御できなくなります、詳しくはコメント欄へ)
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
他にも最近ではSPA(シングルページアプリケーション)という
|
138
|
+
|
139
|
+
JavaScriptで画面全ての面倒を見るWebアプリが増えています。
|
140
|
+
|
141
|
+
その場合ODMツリーを先に描画しようがしまいがあまり関係なくなってしまいますね。
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
とりあえずは</body>の直前が好ましいと覚えておくと良いでしょう。
|
146
|
+
|
147
|
+
ただし、フロントエンド技術者としての技術力が爺文にあればhead内に設置してあっても構いません。
|
148
|
+
|
149
|
+
色々調べてみたり試してみてください。
|