现在哪里还找得到不引入JavaScript脚本文件的Web应用?使用脚本文件的好处多多,其中最重要的可能就是提供缓存能力了。使用脚本文件之后再加上缓存,可以大大降低数据传输量,提高页面打开的速度。不过脚本文件的引入也不是简单得不值一提,我们完全有能力来优化它。
小心传统的脚本引入方式带来的性能问题
现在的Web应用所需的脚本越来越多,一张页面下载几百K的脚本也不再是难以想象的事情了,这就直接导致页面需要更长的时间来加载脚本。不过传统的脚本引入方式(使用<script />)会造成什么问题?再查看这点之前,我们先写一个HttpHandler来模拟一个需要较长时间才能加载的脚本。这很简单,我们只要创建一个Http Handler来做到这一点,如下:
Scripts.ashx
public class Scripts : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/x-javascript";
System.Threading.Thread.Sleep(1500);
context.Response.Write("//");
}
public bool IsReusable {
get {
return false;
}
}
}
我使用Thread.Sleep函数使线程休眠1.5秒,然后输出一个注释符。这样就保证了页面加载该文件需要比较长的时间,也可以将脚本的执行时间降到最低。
然后我们就写个最简单的页面,来测试一下加载这些文件的结果:
Title
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" id="aaa">
<title>Untitled Page</title>
<script type="text/javascript" language="javascript" src="Scripts.ashx?a"></script>
<script type="text/javascript" language="javascript" src="Scripts.ashx?b"></script>
<script type="text/javascript" language="javascript" src="Scripts.ashx?c"></script>
<script type="text/javascript" language="javascript" src="Scripts.ashx?d"></script>
<script type="text/javascript" language="javascript" src="Scripts.ashx?e"></script>
</head>
<body>
...
</body>
</html>
在IE里打开页面,看看这些脚本加载的情况。请注意,您可以使用IE Dev Toolbar来禁用Cache(图5)。
图5:IE中传统方式加载脚本的情况