在一个页面中,每一个外部JavaScript 及CSS文件都会导致一个额外的HTTP请求。所以,如何合理的合并JavaScript 文件及CSS文件也是前端工程师应该考虑的。
尤其是JavaScript 文件,在下载它时,并行下载实际上是被禁用的,并且还会阻塞页面的呈现!
关于JavaScript 的下载
在下载JavaScript 脚本文件时,浏览器不会并行启动其它下载,而是让JavaScript 脚本文件单独下载完毕后,再继续其它请求。这将对页面的整体性能是一个很大的问题,解决方案如下:
解决方案1:将JavaScript 脚本内联在页面中,即直接将JavaScript 脚本写在HTML标签中。
优点:速度最快。在大型网站的首页中,可以合理的将JavaScript 脚本的一部分直接内联在HTML标签中。
缺点:JavaScript 脚本不被单独缓存,其它页面不能共享该JavaScript 脚本(不能重用)。
解决方案2:将JavaScript 脚本标签的链接(link)放在HTML文件标签的底部。
要求:脚本中不包含document.write() 方法改写页面。
解决方案3:使用延迟(Defferred) 脚本。即在link标签中添加defer 属性表明JS脚本中不包含document.write() 方法。
缺陷:在Firefox 中使用延迟(Defferred ) 脚本后,JavaScript 脚本还是会阻塞呈现、阻塞并行下载。
而在IE中,效果也不明显。
总结:如果一个脚本可以使用延迟(Defferred ) 脚本技术,那么它一定可以移到页面的底部!
即“解决方案3”完全可以用“解决方案2”替代。
解决方案4:使用加载后下载。即JavaScript 脚本在页面加载完毕后,通过onload 事件动态下载。(CSS也通用 )
优点:既不阻塞HTML页面的呈现,又能实现JavaScript 脚本的重用(脚本将被缓存在浏览器中)。
缺点:产生额外的JavaScript 代码用于实现该功能,增加了程序复杂度。
问题:可能加载两次(内联一次,外部加载一次)。
可以使用IFrame嵌套一个页面并加载JavaScript 脚本来解决。
示例:http://stevesouders.com/hpws/post-onload.php
解决方案5:动态内联。根据cookie做指示器,用代码进行判断,实现将外部JS内联到页面当中。
动态内联是对“加载后下载”的进一步完善。也再次增加了程序复杂度。
虽然JavaScript 脚本推荐放在页面底部,但CSS样式表则应该放在页面的顶部!
关于JavaScript 的精简
精简(Minification)是从代码中移除不必要的字符、注释、空白以减小JavaScript 代码的大小,进而改善JavaScript的下载长度和加载速度。
精简工具:JSMin http://crockford.com/javascript/jsmin
JSMin 用于去除javascript 文件中所有不必要的字符、注释、空白。
cmd 使用方法:C:\Documents and Settings\xugang>jsmin <openWin.js> js_rerurn.js
1. 先指定到 jsmin.exe 文件夹
2. openWin.js为源文件
3. js_rerurn.js为目标文件
精简工具:ShrinkSafe( 原名:Dojo Compressor ) http://dojotoolkit.org/docs/shrinksafe
ShrinkSafe 用于移除javascript 文件中的空白,同时还通过替换的方式缩短了变量名。
cmd 使用方法:java -jar shrinksafe.jar infile.js > outfile.js
shrinksafe.jar是工具名
infile.js为源文件
outfile.js为目标文件
注意:在控制台运行时,要保证shrinksafe.jar和js.jar是在同一个目录,并且输入的JS源文件和输出的JS目标文件也会在同一个目录。(默认在C盘根目录)
一般可以对你的JavaScrip文件同时使用JSMin 和 ShrinkSafe 这两个工具进行精简。
压缩组件
同时,不要忘记通过HTTP的头部声明,压缩脚本、样式表和HTML文档来减少响应时间。
浏览器客户端的请求: Accept-Encoding: gzip, deflate
Web服务器端的响应:Content-Encoding: gzip
gzip是目前流行和理想有效压缩方法,deflate效果略逊且不太流行。
分享到:
相关推荐
《众妙之门——JavaScript与jQuery技术精粹》是一本由Smashing Magazine出版的高端IT图书,它汇聚了全球顶尖网站设计专家的经验与智慧,旨在深入解析JavaScript和jQuery的关键技术,帮助读者提升在网页设计与开发中...
在《前端性能讲解——阿里》这份培训资料中,通过一系列具体的方法和技术介绍了如何对前端性能进行精确度量,这对于提高用户体验、优化网站性能具有重要意义。 #### 二、讲师介绍 讲师阿大(真名:朱华军),自...
这种效果常见于许多网站的地址选择器中,当你选择一个省份时,相应的城市列表会自动更新。这个功能能够提高用户体验,使得用户在填写信息时更加便捷。下面,我们将详细讲解实现这一效果所需的关键JavaScript知识点。...
总的来说,这个压缩包提供了一个自定义、原生的JavaScript焦点图解决方案,适用于那些希望在项目中控制资源加载和提高性能的开发者。学习并理解这个实现可以帮助我们更好地掌握JavaScript与DOM交互、事件处理以及...
《FibJS——JavaScript on Fiber》是一份深入探讨FibJS技术的资料,它揭示了如何将JavaScript语言的优势与Fiber的高性能特性相结合,为开发者提供了全新的编程体验。FibJS是一个基于Chrome V8引擎的JavaScript运行时...
在本《Dreamweaver CS5从新手到高手视频教程下载第13章 锦上添花——用JavaScript点缀网页》中,我们将深入学习如何利用JavaScript为网页增添动态效果和交互性,让网页设计更加生动有趣。JavaScript是一种轻量级的...
在这个场景中,"JSP动态树——javascript" 提供了一个利用JSP和JavaScript实现的交互式树形结构,特别适用于展示层级关系的数据。 1. **JSP基础**: JSP是Java平台的一部分,它允许开发者通过Java编程语言来控制页面...
"web技术深入交流:网站用户体验探索——之网站性能优化"这一主题涵盖了多方面的技术知识,旨在通过优化网站性能来提高用户满意度。 1. **页面加载速度**:页面加载时间直接影响用户对网站的第一印象。优化图片大小...
网页模板中的纯JavaScript制作T恤花纹图案预览特效是一种常见的前端技术应用,它允许用户在购买或定制T恤时预览不同花纹图案的效果。这种特效的实现主要依赖于JavaScript的强大功能,结合HTML和CSS,为用户提供实时...
《高性能网站建设指南——前端工程师技能精粹》是前端开发领域的一本重要著作,它由Steve Souders撰写,旨在提供一套实用的策略和技巧,帮助网站优化性能,提高加载速度和用户体验。这本书不仅受到业界知名专家如Joe...
【服务器端JavaScript——NodeJS】 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它让JavaScript能够在服务器端执行,打破了JavaScript长期以来只能在浏览器中运行的限制。Node.js使用了一个事件驱动、非...
同时学习优化技巧,提高网站性能。 通过这个"网上购物网站——ASP+ACCESS"项目,初级编程人员能够全面地掌握一个完整的Web应用开发流程,从而提升自己的技能水平,并为后续的Web开发工作打下坚实的基础。
本资源“网页模板——javascript制作的图形验证码特效.zip”提供了一个使用JavaScript实现的图形验证码特效示例。下面将详细介绍JavaScript制作图形验证码的核心知识点: 1. **随机生成验证码字符串**: 验证码...
"网页模板——javascript 鼠标拖动商品图片添加到购物车的功能实例"是一个典型的电商网站功能,它利用JavaScript技术实现了用户可以方便地通过鼠标拖拽商品图片直接添加到购物车的操作。这个功能极大地提升了用户的...
在这个“网页模板——javascript(DOM)图片切换效果”项目中,我们可以推测主要包含以下几个关键知识点: 1. **DOM操作**:JavaScript通过DOM API可以获取、修改、添加或删除HTML元素。在图片切换效果中,可能涉及到...
JavaScript列表空间——Collist,是一种基于JavaScript实现的可排序列表控件,专为网页开发者设计,以方便在网页上创建和管理动态数据列表。这个控件具有轻量级、高效和用户友好的特点,适用于各种网页应用,尤其...
《前端开发权威指南——融合html javascript css php》是一本深入探讨前端开发技术的文档,旨在帮助读者全面理解并掌握前端开发的核心要素。本文档将重点围绕HTML、JavaScript、CSS以及PHP这四个关键领域的基础知识...
考虑JavaScript执行效率和页面加载速度,优化JsCalendar的性能是提高网站性能的一个方面。例如,延迟加载、事件委托等技术可以用于减少内存占用和提高响应速度。 总的来说,JsCalendar作为一个JavaScript日历插件,...
- 如果需要处理大量数据,可能需要使用到数据绑定框架,如Vue.js或React.js,以提高性能并简化代码。 2. **按钮控制数字升降**: - 这种效果允许用户通过点击按钮增加或减少页面上的数值,常见于购物车数量调整、...
### 浅谈JavaScript库——jQuery与ExtJs的对比研究 #### 一、引言 随着Web 2.0和RIA(Rich Internet Applications)技术的普及,JavaScript作为一种前端开发的重要工具,逐渐占据了重要的地位。它不再仅仅是用于...