File tree Expand file tree Collapse file tree 1 file changed +69
-0
lines changed Expand file tree Collapse file tree 1 file changed +69
-0
lines changed Original file line number Diff line number Diff line change @@ -608,7 +608,76 @@ CDN是指“文件分发网络”(Content Delivery Network)。这是一项
608
608
- 微软托管了jQuery和自家的Ajax库
609
609
- 雅虎在自己的CDN上托管了YUI库
610
610
611
+ ## 加载策略
611
612
613
+ 怎样在页面上引入脚本,这第一眼看起来是一个简单的问题——使用\< script\> 元素,然后要么写内联的JavaScript代码或者是在src属性中指定一个独立的文件:
612
614
615
+ // option 1
616
+ <script>
617
+ console.log("hello world"); </script>
618
+ // option 2
619
+ <script src="external.js"></script>
613
620
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>
614
683
You can’t perform that action at this time.
0 commit comments