<高性能javascript>阅读笔记一 ---关于脚本放的位置以及加载方式

刚开始进行代码优化的时候,最弄不懂的就是脚本应该放在哪里,应该用什么样的方式加载。
1:将脚本放在底部
     HTML4规范中指出<script>标签可以放在HTML文档的<head>或者<body>中

<!DOCTYPE html>
<html>
<head lang="en"><pre name="code" class="html"><!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>
    <script type="text/javascript" src="file1.js" ></script>
    <script type="text/javascript" src="file2.js" ></script>
    <script type="text/javascript" src="file3.js" ></script>
    <script type="text/javascript" src="file4.js" ></script>
    <script rel="stylesheet" type="text/css" href="style.css" ></script>
    <script type="text/javascript">
        });
    </script>
</head>
<body>
 <p>hello world</p>
</body>
</html>

       但是这样子就存在一个很严重的问题,在<head>中加载了四个Javascript文件。由于脚本会阻塞渲染,直到它们全部下载并执行完之后,页面渲染才会继续,因此,页面的性能问题会很明显。把脚本放在顶部会产生明显的延迟,通常表现为显示空白页面,用户无法浏览内容,将文档放在页面顶部会产生明显的延迟,也无法与页面进行交互,这个对于web开发来说,严重影响了用户体验。由于脚本会阻塞页面其他资源的的下载,因此推荐奖所有的<script>标签尽可能的放在<body>标签的地步,以尽量减少对整个页面下载的影响。 
<pre name="code" class="html"><!DOCTYPE html>
<html>
<head lang="en">
<!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>

    <link rel="stylesheet" type="text/css" href="style.css" >
    <script type="text/javascript">
        });
    </script>
</head>
<body>
 <p>hello world</p>
 <script type="text/javascript" src="file1.js" ></script>
 <script type="text/javascript" src="file2.js" ></script>
 <script type="text/javascript" src="file3.js" ></script>
 <script type="text/javascript" src="file4.js" ></script>  
</body>
</html>


 2:减少页面包含的<script>标签的数量   用一个javascript标签加载多个文件 
<!DOCTYPE html>
<html>
<head lang="en">
<!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>

    <link rel="stylesheet" type="text/css" href="style.css" >
    <script type="text/javascript">
        });
    </script>
</head>
<body>
 <p>hello world</p>
 <script type="text/javascript" src="file1.js & file2.js & file3.js & file4.js" ></script> 
</body>
</html>

3:使用延迟脚本 defer
 带defer属性的标签可以放在文档中的任何位置。对应的JavaScript文件将在页面解析到<script>标签时开始下载,但是并不会执行,知道Dom加载完成(onload事件被处罚前)。
<pre name="code" class="html"><!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>
    <script defer>
        alert("defer");
    </script>
    <script >
        alert("simple");
    </script>
    <script type="text/javascript">
        window.onload = function(){
            alert("load");
        };
    </script>
</head>
<body>
 <p>hello world</p>
</body>
</html>
但这个只有在ie4+和FireFox3.5+的浏览器才支持,因此这个不是一个理想的跨浏览器解决方案。
在支持defer的浏览器中执行顺式:simple、load、defer。在不支持defer的浏览器下面执行顺式为:defer、simple、load。
4:动态脚本加载
 动态脚本加载时最通用的无阻塞加载解决方案,实现方式有多中,后续会进行详细说明。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值