文档中心 >Google PageSpeed

优化样式表和脚本的排列

概览

正确排序外部样式表、外部和内联脚本能够更好的并行下载和加快浏览器的渲染时间。

详细

因为JavaScript代码可以改变网页的内容和布局,所以浏览器会延迟渲染脚本标签之后的内容,直到该脚本被下载、解析和执行。然而,更重要的是往返时间,许多浏览器阻止文档中引用的在脚本后面的资源的下载,直到这些脚本下载并执行。另一方面,如果其他文件已经在下载的过程中,当一个JS文件被引用时,JS文件的会与它们并行下载。

建议

把外部脚本放在外部样式表之后

因为样式表和脚本是按照它们在文档中出现的先后顺序执行,如果JS代码对CSS文件没有依赖性,可以将CSS文件移到JS文件之前。如果JS代码依赖于包含在外部文件中的CSS - 例如,你用于写入文档的输出的JS代码需要样式表 - 这是不可能的。

例如,HTML开始是这样的

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>example</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="script/script.js" type="text/javascript"></script>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<!-- content -- -->
</body>
</html>

重新排列后,变成这样

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>example</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script src="script/script.js" type="text/javascript"></script>
</head>
<body>
<!-- content -- -->
</body>
</html>

把内嵌脚本移到其他资源之后

把内嵌脚本移到其他所有其他资源之后,可以防止阻塞其他资源的下载,而且还能够逐步呈现。然而,如果这些“其他资源”是内嵌脚本依赖的外部JS文件,这也许是不可能的。在这种情况下,最好将内嵌脚本移到CSS文件之前。

例如,HTML开始是这样的

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>example</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
<!--
    function a() {
        //--jscode--
    }  
//-->
</script>
<script src="script/script.js" type="text/javascript"></script>
</head>
<body>
<!-- content -- -->
</body>
</html>

重新排列后,变成这样

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>example</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script src="script/script.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
    function a() {
        //--jscode--
    }  
//-->
</script>
</head>
<body>
<!-- content -- -->
</body>
</html>