Skip to content

Commit b87ce14

Browse files
committed
加载策略之 script元素的位置 翻译完毕
1 parent 9747e29 commit b87ce14

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

chapter8.markdown

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,76 @@ CDN是指“文件分发网络”(Content Delivery Network)。这是一项
608608
- 微软托管了jQuery和自家的Ajax库
609609
- 雅虎在自己的CDN上托管了YUI库
610610

611+
## 加载策略
611612

613+
怎样在页面上引入脚本,这第一眼看起来是一个简单的问题——使用\<script\>元素,然后要么写内联的JavaScript代码或者是在src属性中指定一个独立的文件:
612614

615+
// option 1
616+
<script>
617+
console.log("hello world"); </script>
618+
// option 2
619+
<script src="external.js"></script>
613620

621+
但是,当你的目标是要构建一个高性能的web应用的时候,有些模式和考虑点还是应该知道的。
622+
623+
作为题外话,来看一些比较常见的开发者会用在<script>元素上的属性:
624+
625+
- language="JavaScript"
626+
627+
还有一些不同大小写形式的“JavaScript”,有的时候还会带上一个版本号。language属性不应该被使用,因为默认的语言就是JavaScript。版本号也不像想象中工作得那么好,这应该是一个设计上的错误。
628+
- type="text/javascript"
629+
630+
这个属性是HTML4和XHTML1标准所要求的,但它不应该存在,因为浏览器会假设它就是JavaScript。HTML5不再要求这个属性。除非是要强制通过难,否则没有任何使用type的理由。
631+
- defer
632+
633+
(或者是HTML5中更好的async)是一种指定浏览器在下载外部脚本时不阻塞页面其它部分的方法,但还没有被广泛支持。关于阻塞的更多内容会在后面提及。
634+
635+
### \<script\>元素的位置
636+
637+
script元素会阻塞页面的下载。浏览器会同时下载好几个组件(文件),但遇到一个外部脚本的时候,会停止其它的下载,直到脚本文件被下载、解析、执行完毕。这会严重影响页面的加载时间,尤其是当这样的事件在页面加载时发生多次的时候。
638+
639+
为了尽量减小阻塞带来的影响,你可以将script元素放到页面的尾部,在\</body\>之前,这样就没有可以被脚本阻塞的元素了。此时,页面中的其它组件(文件)已经被下载完毕并呈现给用户了。
640+
641+
最坏的“反模式”是在文档的头部使用独立的文件:
642+
643+
<!doctype html>
644+
<html>
645+
<head>
646+
<title>My App</title>
647+
<!-- ANTIPATTERN -->
648+
<script src="jquery.js"></script>
649+
<script src="jquery.quickselect.js"></script>
650+
<script src="jquery.lightbox.js"></script>
651+
<script src="myapp.js"></script>
652+
</head>
653+
<body>
654+
...
655+
</body>
656+
</html>
657+
658+
一个更好的选择是将所有的文件合并起来:
659+
660+
<!doctype html>
661+
<html>
662+
<head>
663+
<title>My App</title>
664+
<script src="all_20100426.js"></script>
665+
</head>
666+
<body>
667+
...
668+
</body>
669+
</html>
670+
671+
最好的选择是将合并后的脚本放到页面的尾部:
672+
673+
<!doctype html>
674+
<html>
675+
<head>
676+
<title>My App</title>
677+
</head>
678+
<body>
679+
...
680+
<script src="all_20100426.js"></script>
681+
</body>
682+
</html>
614683

0 commit comments

Comments
 (0)