`

JavaScript优化细节

    博客分类:
  • js
阅读更多

作为一名网站开发WEB前端工程师,对自己开发的网站项目应该尽可能地对其性能进行优化,现在互联网上搜索到的网站性能优化多是翻译转载自 Yahoo14条或34条。Yahoo的优化建议关注在大的方面,下面,W3C Group为大家呈现WEB前端开发高性能优化部分之Java Script的优化细节!

一、避免出现脚本失控

不论什么脚本,在任何时间、任何浏览器上执行,都不应该超过100毫秒。如果实际执行的时间长于这个底限,一定要将进程分解成若干更小的代码段。

脚本失控基本上有以下四个方面的原因:

1. 在循环中执行了太多的操作

解决这个问题 的诀窍就是用下面这两个问题来评估每个循环:


  • 这个循环必须要同步执行么?
  • 循环里面的数据,必须要按顺序执行么?


如果1和2都可以否定,那么建议使用setTimeout方式将循环体切分成小块进行异步处理

将循环中的定义变量及初始化操作放到循环外。参见:http://www.w3cgroup.com/article.asp?id=111

2. 臃肿的函数体

在JavaScript中,我们应该尽可能的用局部变量来代替全局变量!

理解JavaScript作用域链。参见:http://www.jslab.org.cn/?tag=ScopeChainAndClosure

理解原型链。参见:http://www.jslab.org.cn/?tag=prototypeChain

3. 过多的递归

使用迭代方式替代递归,采用memoization技术优化递归

斐波那契数列的递归算法优化,参见:http://www.jslab.org.cn/?tag=Memoization

4. 过多的DOM调用

在Web开发中,JavaScript的一个很重要的作用就是对DOM进行操作。可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行回流(reflow)操作。而执行了过多的回流操作,你就会发现自己的网站变得越来越慢了。我们应该尽可能的减少DOM操作。

回流操作主要会发生在几种情况下:


  • 改变窗体大小
  • 更改字体
  • 添加移除stylesheet块
  • 内容改变哪怕是输入框输入文字
  • CSS虚类被触发如 :hover
  • 更改元素的className
  • 当对DOM节点执行新增或者删除操作或内容更改时。
  • 动态设置一个style样式时(比如element.style.width="10px")。
  • 当获取一个必须经过计算的尺寸值时,比如访问offsetWidth、clientHeight或者其他需要经过计算的CSS值(在兼容DOM的浏览器中,可以通过getComputedStyle函数获取;在IE中,可以通过currentStyle属性获取)。


解决问题的关键,就是限制通过DOM操作所引发回流的次数:

1.在对当前DOM进行操作之前,尽可能多的做一些准备工作,保证N次创建,1次写入。

2.在对DOM操作之前,把要操作的元素,先从当前DOM结构中删除:


  • 通过removeChild()或者replaceChild()实现真正意义上的删除。
  • 设置该元素的display样式为“none”。


修改操作完成后,将上面这个过程反转过来,建议使用第2种方式。

3.CSS部分

另外一个经常引起回流操作的情况是通过style属性对元素的外观进行修改,如element.style.backgroundColor = "blue";

每次修改元素的style属性,都肯定会触发回流操作,要解决这个问题可以:


  • 使用更改className的方式替换style.xxx=xxx的方式。
  • 使用style.cssText = '';一次写入样式。
  • 避免设置过多的行内样式
  • 添加的结构外元素尽量设置它们的位置为fixed或absolute
  • 避免使用表格来布局
  • 避免在CSS中使用JavaScript expressions(IE only)


4.将获取的DOM数据缓存起来。这种方法,对获取那些会触发回流操作的属性(比如offsetWidth等)尤为重要。

5.当对HTMLCollection对象进行操作时,应该将访问的次数尽可能的降至最低,最简单的,你可以将length属性缓存在一个本地变量中,这样就能大幅度的提高循环的效率。

二、避免大字符串字面量对象操作,如 字符串.lenth,尽量转换为new String(字符串)后再进行操作

三、在做字符查找替换等操作时善用正则表达式
快速掌握ECMAScript正则表达式。参见:http://www.w3cgroup.com/article.asp?id=202

四、减少语句,利用运算符优先级实现if else表达式,使用三元表达式,使用连续表达式(看情况,将损失程序可读性)

利用运算符优先级实现if else表达式参见:http://www.w3cgroup.com/article.asp?id=131

五、将CSS,JS文件合并到一个文件(非BT爱好者还是不要玩了^_^)
参见:http://www.w3cgroup.com/article.asp?id=29

六、避免Javascript事件绑定出现内存泄漏
"These memory leaks often occur as a result of circular references between JavaScript objects and objects within IE’s DOM (document object model)." Microsoft GPDE Team Blog

参见:http://www.w3cgroup.com/article.asp?id=207

七、使用WEB Workers技术(支持html5的浏览器)
Web Workers为JavaScript提供了一种能在后台进程中运行的方法,Web Workers进程能够在不影响用户界面的情况下处理任务。

参见:http://www.w3cgroup.com/article.asp?id=242

八、Y!14条(14 Rules for Faster-Loading Web Sites)


  • Rule 1 - Make Fewer HTTP Requests
  • Rule 2 - Use a Content Delivery Network (Server端)
  • Rule 3 - Add an Expires Header (Server端)
  • Rule 4 - Gzip Components (Server端)
  • Rule 5 - Put Stylesheets at the Top
  • Rule 6 - Put Scripts at the Bottom
  • Rule 7 - Avoid CSS Expressions
  • Rule 8 - Make JavaScript and CSS External
  • Rule 9 - Reduce DNS Lookups (Server端)
  • Rule 10 - Minify JavaScript
  • Rule 11 - Avoid Redirects (Server端)
  • Rule 12 - Remove Duplicate Scripts
  • Rule 13 - Configure ETags (Server端)
  • Rule 14 - Make AJAX Cacheable
  • Rule 15 - Use Iframes Wisely


参见:http://www.w3cgroup.com/article.asp?id=97

九、微软 早期的DHTML优化建议


  • 使用数组push替代字符串累加
分享到:
评论

相关推荐

    JavaScript优化细节.rar

    JavaScript优化细节

    JavaScript和jQuery实战手册-麦克法兰.pdf

    第2版结合JavaScript和jQuery最新技术,对全书内容进行了更新和优化,使之在技术上更先进,也更易于学习。本书的最大特色就是内容系统且全面:从JavaScript的基本概念,到Web最流行的JavaScript库——jQuery,再到...

    JavaScript性能优化之小知识总结

    JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文给大家介绍javascript性能优化之小知识总结,需要的朋友可以参考下

    SEO优化中的网站结构优化.docx

    网站结构优化是 SEO 优化的重要部分,我们需要遵循用户习惯,采用树型结构,少使用 Flash 和 Javascript 等,网站布局最好使用 DIV+CSS,搜索引擎比较喜欢。同时,我们还需要关注网站的易用性和亲和力,让用户能够...

    JavaScript-度假酒店服务动态响应式网页模板-适配移动端-HTML源码

    它不仅优化了用户交互体验,还确保了跨设备的兼容性,无论在桌面、平板还是智能手机上均能完美展现。 此模板搭载了轻量级的JavaScript动效,增强了页面的互动性和动感,同时通过Ajax技术实现了快速的页面加载和数据...

    web性能优化之javascript性能调优

    本文详细介绍Web 开发中关于性能方面需要注意的一些小细节,从 JavaScript 本身着手,介绍了 JavaScript 中需要避免的一些函数的使用和编程规则,比如 eval 的弊端,function scope chain 以及 String 的用法等等

    快速排序(Quicksort)的Javascript实现

    * 递归函数的实现需要注意堆栈溢出的问题,可以使用尾递归优化来避免这种问题。 快速排序算法的时间复杂度平均为O(n log n),最坏情况下为O(n^2)。该算法的空间复杂度为O(log n),因为需要使用递归栈来存放子集。 ...

    利用javascript解决图片缩放及其优化的代码

    说起IE6,真是让我们这些做前端的人又恨又无奈,许多属性都不支持。可不少用户还在用它,我们也不能无视。为了兼容,我只好跟同事请教了一下,然后针对IE6用js缩放来显示图片并进行了一些细节上的优化

    前端性能优化

    当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象、类、字符串、数字和方法都需要分配和保留内存。语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节。 许多功能无需考虑内存管理即可实现,但却忽略...

    JavaScript知识点总结之如何提高性能

    JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货。 先给大家巩固下javascript基本语法: ...

    javascript中的对象和数组的应用技巧

    javascript已经用了有三年多了,但是对一些细节的东西还是一知半解,比如对象和数组,一直都在用一些最基本的操作。这是我学习的一个坏习惯–懒,很多东西都是了解而已,看到稍微复杂点的逻辑就没有耐心。就像学asp...

    搜索引擎优化高级编程(PHP版)

    1.2.4 构建细节将会决定成败 1.3 准备软件环境 1.3.1 安装XAMPP 1.3.2 准备工作文件夹 1.3.3 准备数据库 1.4 小结 第2章 SEO基础知识 2.1 SEO概述 2.1.1 链接价值 2.1.2 Google PageRank 2.1.3 可用性和可达性 2.2 ...

    基于Python与多技术栈的Mogui自动化部署系统源码

    项目概述:Mogui自动化部署系统是一款基于Python语言开发的多技术栈集成发布系统。该系统融合了前端技术如JavaScript、CSS、Vue以及后端Python编程...该系统致力于简化魔鬼细节,优化部署流程,提升开发到生产的效率。

    firebug-2.0.16-是firefox下的一个扩展,能够调试所有网站语言

    Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。例如 Yahoo! 的网页速度优化建议工具 YSlow。 [1] Firebug也是一个除错工具。用户可以利用它除错、编辑、...

    FPSEngine:2D javascript FPS wip

    预期游戏的细节: 视野受限的 2D FPS 待办事项: 限制视线,跟随十字准线发射弹性激光为视线限制设计游戏玩法(移动、瞄准阶段、后坐力......) 地图加载器来自 png 多边形的地图制作器(python) 服务器-客户端死斗...

    todo-app-classic:使用经典 Javascript 架构的单页 Web 应用程序

    我的目标是创建一组基本的代码,我可以利用这些代码更好地理解许多围绕在 Javascript 中构建单页 Web 应用程序的新概念和细节。 这些概念包括响应式设计、移动优化(触摸事件)、模块化 (AMD)、编译到本机设备 ...

    swiftlib_[removed]这是一个用于优化简并密码子库的动态规划求解器

    swiftlib_javascript 该存储库包含用于优化简并密码子库的动态编程算法的 JavaScript 实现。 访问 更多细节。

    RuleEngine:用JavaScript编写的规则引擎。 支持对各种数据类型和操作的逻辑条件进行分组评估

    规则引擎的优化版本,名为:engine.js 名为规则引擎的缓慢但易读的版本,可以轻松扩展此版本:engine_read.js 运作细节: 引擎分为两个部分: 1.条件分组:这样,您可以将多个条件组合在一起进行逻辑评估。 ...

    javascript实现商品图片放大镜

    优化原因 现在的电商商城项目解决的主要是购买商品的问题,那么购买商品主要要看清楚商品表面外形的主要特征和细节,如果图片处理过小,或者细节过于模糊,就需要做一个商品高清图片放大局部的功能。 技术关键点 1....

Global site tag (gtag.js) - Google Analytics