`

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的基本性能指标至关重要。这包括代码加载速度、解析时间、执行效率以及内存占用等。在这些方面进行优化能有效提升页面的加载速度和响应能力...

    web常用的优化细节

    8. **JavaScript优化**:将脚本放在页面底部,避免阻塞DOM解析,使用异步加载或 defer 属性来控制脚本执行时机。 9. **Web安全**:防止SQL注入、XSS攻击和文件上传漏洞。对于SQL注入,应使用预编译语句或参数化查询...

    JavaScript优化方法.doc

    本文将着重分析 JavaScript 的优化细节。 一、避免出现脚本失控 脚本失控基本上有以下四个方面的原因: 1. 在循环中执行了太多的操作 解决这个问题的诀窍就是用下面这两个问题来评估每个循环:◆这个循环必须要...

    java和JavaScript开发细节

    JavaScript作为前端开发的重要语言之一,其使用细节同样值得关注: 1. **jQuery绑定事件:** 使用jQuery绑定事件时,要注意避免绑定过多的事件处理器,这可能会导致页面性能下降。同时,在处理事件解绑时也要小心,...

    JavaScript学习指南 高清 PDF

    10. **性能优化**:包括减少DOM操作、利用缓存、避免阻塞主线程、优化定时器等技巧,有助于提升JavaScript应用的性能。 11. **框架与库**:JavaScript社区有许多流行的框架和库,如React、Vue、Angular等,它们提供...

    现代JavaScript教程

    总的来说,"现代JavaScript教程"会涵盖以上这些关键主题,并可能深入到更多细节,如错误处理、性能优化、TypeScript等。通过系统学习和实践,开发者可以提升JavaScript技能,从而在Web开发领域取得成功。

    JS优化_淘宝网.pdf

    标题“JS优化_淘宝网.pdf”和描述“JS优化_淘宝网...但从上述的点可以看出,淘宝网在进行JavaScript优化时可能会考虑上述多方面的技术和方法。通过综合运用这些技术手段,可以极大程度上提升网站的加载速度和用户体验。

    Javascript 一些需要注意的细节(必看篇)

    正确使用等值运算符、避免滥用“eval”、规范代码编写风格、合理放置脚本、优化for循环内部逻辑、减少全局变量的使用以及高效构建字符串,这些都是编写高质量JavaScript代码应该关注的要点。遵循这些最佳实践,可以...

    javascript实现前端成语点击验证优化.docx

    通过上述JavaScript和CSS代码,我们实现了前端成语点击验证功能的优化,不仅增强了用户体验,还提高了系统的安全性和稳定性。对于实际项目来说,还可以在此基础上进行更多的创新和改进,以满足不同场景的需求。希望...

    Javascript 完全手册(PDF)

    11. **性能优化**:讲解如何编写高性能的JavaScript代码,包括内存管理、事件循环、异步编程的最佳实践等。 12. **调试技巧**:学习使用浏览器内置的开发者工具进行代码调试,理解断点、日志打印、性能分析等功能。...

    Chrome V8引擎中的JavaScript数组实现分析与性能优化.pdf

    Chrome V8引擎中的JavaScript数组实现分析与性能优化 在本文中,我们将对Chrome V8引擎中的JavaScript数组实现进行深入分析,并探讨如何通过优化JavaScript数组的使用方式来提高程序效率。在实际应用中,JavaScript...

    Javascript完全自学宝典

    - V8引擎内部实现细节。 4. **你可能不知道的10个JavaScript小技巧** - **核心知识点**: - 不常用但实用的功能(如Array.from、Object.assign等)。 - 提高代码可读性的编码习惯。 - 编写简洁高效的函数式...

    Javascript忍者的秘密

    《JavaScript忍者的秘密》这篇博文主要探讨了JavaScript编程中的高级技巧和不为人知的细节,旨在帮助开发者提升在JavaScript领域的专业技能。通过学习这些“秘密”,开发者可以更好地理解和利用JavaScript的强大功能...

    JavaScript初学者应注意的七个细节小结

    标题中提到的知识点是"JavaScript初学者应注意的七个细节小结",这里说明了JavaScript初学者在学习这门语言时需要注意的一些关键细节,这些细节对于提高代码质量、优化代码结构、加深对JavaScript特性的理解至关重要...

    javascript 中英文资料 汇总

    这本书可能涵盖了JavaScript的高级话题,如面向对象编程、AJAX(异步JavaScript和XML)、DOM操作以及性能优化等,适合有一定基础的学习者深入学习。 "[John Wiley & Sons] JavaScript.Examples.Bible [2007].pdf...

    【合集】优化和提高javascript的运行速度

    总而言之,优化和提高JavaScript的运行速度涉及到很多层面,从源码的编写、工具的使用,到具体的代码实现细节。对于开发者而言,需要对这些知识点有全面的了解和掌握,才能在实际开发中做出高效、优化的JavaScript...

    高性能JavaScript.pdf

    - **高效的数据读写策略**:如何优化JavaScript中的数据访问方式以提高应用性能。 - **数据结构选择**:根据应用场景选择合适的数据结构来提升数据访问效率。 **技术细节:** - 数据访问的性能直接影响到应用的整体...

    JavaScript入门学习资料包

    接下来,"JavaScript使用手册"可能包含了JavaScript的语法细节和常见API的使用方法,例如Date对象、Math对象、字符串和数组的方法,以及如何使用正则表达式进行模式匹配。此手册可能还涵盖了一些高级特性,如闭包、...

Global site tag (gtag.js) - Google Analytics