回答編集履歴
2
追記した内容の意図が解りにくかったので説明を変更・コメントで指摘いただいた内容を反映
answer
CHANGED
@@ -31,14 +31,16 @@
|
|
31
31
|
---
|
32
32
|
|
33
33
|
[追記]
|
34
|
+
> 逆にBodyタグ最後でJSファイルを読み込むことによるデメリットってあるんでしょうか?
|
34
35
|
HTMLのレンダリングが完了する前に何かjsを動かしておきたいというような事があれば、bodyの閉じタグ前より先にスクリプトタグを書いておかなければ意図したとおり動作しないかと思います。
|
35
36
|
|
36
37
|
下の例では`writeImage.js`のある位置にもともとあったかのようにimgタグが追加されます。
|
38
|
+
HTMLがレンダリングされてから画像1の前にjavascriptで画像を追加すると一瞬表示がガタッとなってしまうかもしれません。これが嫌だ!というような場合はHTMLのレンダリングをブロックさせてでもスクリプトを実行させるメリットは有るかもしれません。
|
37
39
|
```html
|
38
40
|
<body>
|
39
41
|
<script src="writeImage.js"></script>
|
40
42
|
<div>
|
41
|
-
<img src="http://dic.nicovideo.jp/oekaki/663056.png">
|
43
|
+
<img alt="画像1" src="http://dic.nicovideo.jp/oekaki/663056.png">
|
42
44
|
</div>
|
43
45
|
</body>
|
44
46
|
```
|
@@ -50,5 +52,14 @@
|
|
50
52
|
img.src = url;
|
51
53
|
d.getElementsByTagName('body').item(0).appendChild(img);
|
52
54
|
```
|
55
|
+
メリットとは別の先に書いていた`async`との違いも試してみるとこが出来ます。
|
53
|
-
|
56
|
+
`<script src="writeImage.js" async></script>`としてみてください。
|
54
|
-
必ずしも追加される画像が
|
57
|
+
`async`はHTMLのレンダリングをブロックしませんので、必ずしも追加される画像が画像1の上に表示される訳ではなくなる事が確かめられると思います。
|
58
|
+
|
59
|
+
|
60
|
+
最近のTwitterとかはてなとかの埋め込みscriptタグはasync付きのものが多いですが、
|
61
|
+
コメントでご指摘頂いております通り、`async`の方法は下記に注意する必要があります。
|
62
|
+
> “async”(非同期)はIE 8/9, Android 2.2/2.3.といった、いくつかの前の型のブラウザに対応していません。
|
63
|
+
|
64
|
+
[参考]
|
65
|
+
[JavaScriptの読み込みにおける非同期スクリプト注入の悪影響](http://postd.cc/script-injected-async-scripts-considered-harmful/)
|
1
サンプル追加
answer
CHANGED
@@ -26,4 +26,29 @@
|
|
26
26
|
ですので、使用するjQueryなどのライブラリも1つのファイルにまとめる。もしくは、他のjavascriptファイルに依存しないファイルであれば`async`属性を使えばhead内に記述しても、レンダリングをブロックしてしまうということはありません。
|
27
27
|
|
28
28
|
[参考]
|
29
|
-
[async属性で簡単!非同期でjsを読み込みレンダリングを速くしよう](http://www.aiship.jp/knowhow/archives/20559)
|
29
|
+
[async属性で簡単!非同期でjsを読み込みレンダリングを速くしよう](http://www.aiship.jp/knowhow/archives/20559)
|
30
|
+
|
31
|
+
---
|
32
|
+
|
33
|
+
[追記]
|
34
|
+
HTMLのレンダリングが完了する前に何かjsを動かしておきたいというような事があれば、bodyの閉じタグ前より先にスクリプトタグを書いておかなければ意図したとおり動作しないかと思います。
|
35
|
+
|
36
|
+
下の例では`writeImage.js`のある位置にもともとあったかのようにimgタグが追加されます。
|
37
|
+
```html
|
38
|
+
<body>
|
39
|
+
<script src="writeImage.js"></script>
|
40
|
+
<div>
|
41
|
+
<img src="http://dic.nicovideo.jp/oekaki/663056.png">
|
42
|
+
</div>
|
43
|
+
</body>
|
44
|
+
```
|
45
|
+
```javascript
|
46
|
+
// writeImage.js
|
47
|
+
var d = document;
|
48
|
+
var url = 'http://cdn-ak.b.st-hatena.com/entryimage/236933222-origin-1419307828.jpg';
|
49
|
+
var img = d.createElement('img');
|
50
|
+
img.src = url;
|
51
|
+
d.getElementsByTagName('body').item(0).appendChild(img);
|
52
|
+
```
|
53
|
+
逆に`<script src="writeImage.js" async></script>`としてみてください。
|
54
|
+
必ずしも追加される画像が先の表示されるわけではなくなるとお思います。
|