`
lgstarzkhl
  • 浏览: 329031 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

提高网站性能之 —— 如何对待JavaScript(转)

阅读更多
在一个页面中,每一个外部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提高网站性能优化的建议(二)

    在javascript关于提高网站性能的几点建议(一)中,从HTTP请求到页面渲染几个方面对提高网站性能提出了几点建议,本文是学习Steve Sounders的另外一本书《高性能网站建设进阶指南》之后,从JavaScript性能的角度进行...

    JavaScript关于提高网站性能的几点建议(一)

    近在学习《高性能网站建设指南》这本书,本文算是一个学习笔记,将学到的东西进行整理一下,方便后面查看。 性能黄金法则(Performance Golden Rule)解释了只有10%~20%的最终用户响应时间花在接受所请求的用户HTML...

    小议Function.apply()之二——利用Apply的参数数组化来提高 JavaScript程序性能

    我们再来聊聊Function.apply() 在提升程序性能方面的技巧。 我们先从 Math.max() 函数说起, Math.max后面可以接任意个参数,最后返回所有参数中的最大值。 比如 alert&#40;Math.max(5,8&#41;) //8alert&#40;Math...

    Professional JavaScript for Web Developers.pdf

    使用面向专业人士的终极javascript指南更新您的ecmascript 2019技能集。 Professional JavaScript for Web ...对于不浪费时间编写基础代码的专业级更新来说,面向web开发人员的专业javascript是提高速度的最终资源。

    通过循环优化 JavaScript 程序

    对于提高 JavaScript 程序的性能这个问题,最简单同时也是很容易被忽视的方法就是学习如何正确编写高性能循环语句。本文将会帮你解决这个问题。 我们将看到 JavaScript 中主要的循环类型,以及如何针对它们进行高效...

    精通Ajax_基础概念_核心技术与典型案例

    本书主要介绍Ajax技术的组成元素,涉及JavaScript、CSS、DOM、XMLHTTP和XML等内容,其中详细介绍了JavaScript客户端语言,它是Ajax技术的核心组成,是提高客户端性能不可缺少的元素。  全书共分为4大部分,前3...

    PHPlw格式化系统——前台的设计与实现(源代码+lw).zip

    我们的项目源码还使用了一些其他的技术和工具,以提高系统的性能和可靠性。我们使用了缓存技术来减少数据库查询和网络请求的次数,以提高系统的响应速度。我们还使用了队列系统来处理并发请求和长时间运行的任务,以...

    电子竞技&music&娱乐风格网站源码-88套合集.zip

    从技术层面来看,这套源码采用了当下流行的前端技术栈,如HTML5、CSS3、JavaScript、jQuery等,保证了网站的兼容性和性能。同时,部分源码还使用了响应式设计,可适应不同设备的屏幕尺寸,为用户提供更好的浏览体验...

    50套-游戏&音乐&娱乐相关风格网站源码.zip

    从技术层面来看,这套源码采用了当下流行的前端技术栈,如HTML5、CSS3、JavaScript、jQuery等,保证了网站的兼容性和性能。同时,部分源码还使用了响应式设计,可适应不同设备的屏幕尺寸,为用户提供更好的浏览体验...

    吐槽一下我所了解的Node.js

    个人觉得 Node.js 在性能方面是有很大的潜力的,因为有很多大的项目在致力于提高 JavaScript 虚拟机的性能——比如各大浏览器;同时 JavaScript 是一个语法简单的语言,也是一个开放标准,不像 Python 和 PHP 一样...

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    vs2008新特性 C#4.0

    项目出于各种各样如性能的类原因没有采用但非常适合小型快速开发减轻了员工作量也提高了代码可读性 ;C#4.0增加了动态语言特性从里面可以看到很多javascript、python这些动态语言影子虽然越来越偏离静态语 言道路但...

    virtual-scroll-mvc:不同javascript mvc框架中虚拟滚动的比较

    关于 受启发 Virtual Scroll MVC 是对实现“虚拟滚动”的 javascript 框架的比较。 虚拟滚动与滚动不同,因为它在用户看来就像带有普通滚动条的普通项目列表,但... 这显着提高了大型项目列表的性能。 查看现场演示

    精通AngularJS part1

    112性能优化——设置期望值、测量、调节、并重复301 113AngularJS应用的性能优化303 优化CPU使用率303 加速$digest循环303 尽可能少进入$digest循环310 限制每个$digest循环的执行轮数312 优化内存占用312 尽...

    SJTU-Anonymous_Forum:【无可奉告】——上海交大匿名论坛

    「无可奉告」上海交大匿名论坛 这是“无可奉告”上海交大匿名论坛的... 完成并优化了数据库, Yiyuan Dong提高了服务器性能。 最衷心的感谢Dong Haichen实施了iOS无可奉告,并为后端优化和Web服务做出了巨大贡献。

    Node.js开发第三方微信公众平台

      Node.js是一个开放源代码、跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于数据密集的...

    glee:Glee——让你再次微笑的 AsyncAPI 框架

    它利用 AsyncAPI 规范来提高您的工作效率: 它确保您的代码和 AsyncAPI 定义是一致的。 不再有过时的文档。 Glee 会自动为您处理。 Glee 让您专注于重要的事情,并为您处理其余的事情。 您只需为您的业务用例编写...

    js-fire-php:使用 PHP、SASS 和 Grunt 创建应用程序的引导程序和工作流程

    (基于 Fireshell 的作品 ) JavaScript 任务运行、构建过程、自动缩小和文件连接,用增强的 HTML5 样板框架包装。 ... 运行—— bower install ...鼓励在视图 (HTML) 中使用单文件 CSS/JS 以提高性能 包括

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    本书宗旨就是让开发人员真正理解asp.net技术,帮助开发人员提高asp.net开发的技术水平。学完本书后您不仅能够掌握控件开发各个方面的技术,而且深晓asp.net的工作原理。对大部分使用asp.net技术开发两年左右的开发...

Global site tag (gtag.js) - Google Analytics