`
yangzb
  • 浏览: 3503002 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WEB前端开发高性能优化之JavaScript优化细节

阅读更多

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

一、避免出现脚本失控

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

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

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

解决这个问题的诀窍就是用下面这两个问题来评估每个循环:
1. 这个循环必须要同步执行么?
2. 循环里面的数据,必须要按顺序执行么?

如果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结构中删除:
1. 通过removeChild()或者replaceChild()实现真正意义上的删除。
2. 设置该元素的display样式为“none”。
修改操作完成后,将上面这个过程反转过来,建议使用第2种方式。

3.CSS部分
另外一个经常引起回流操作的情况是通过style属性对元素的外观进行修改,如element.style.backgroundColor = “blue”;
每次修改元素的style属性,都肯定会触发回流操作,要解决这个问题可以:
1.使用更改className的方式替换style.xxx=xxx的方式。
2.使用style.cssText = ”;一次写入样式。
3. 避免设置过多的行内样式
4. 添加的结构外元素尽量设置它们的位置为fixed或absolute
5. 避免使用表格来布局
6. 避免在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替代字符串累加

 

分享到:
评论

相关推荐

    Web 前端性能优化思路与学习方法

    Web前端性能优化是提升网页用户体验和确保网站成功的关键因素之一。性能优化涉及多个方面,包括但不限于代码优化、资源加载策略、服务器配置等。本篇内容将深入探讨Web前端性能优化的思路与学习方法,结合WebQQ、QQ...

    web前端-Web前端性能优化的研究与应用.pdf

    在这些应用中,Web 站点的性能要求非常高,因此需要进行 Web 前端性能优化。 知识点九: Web 前端性能优化的研究现状 Web 前端性能优化的研究现状还远远不够,特别是在国内的情况下。大多数站点并不关注 Web 前台的...

    Web前端开发中级样题一理+实.zip

    【标题】"Web前端开发中级样题一理+实.zip" 涵盖了Web前端开发的理论与实践,这是一份针对1+x Web前端开发技能等级考试的中期练习题目集合。1+x标准旨在衡量和提升学员在Web前端领域的专业技能,确保他们具备企业级...

    web前端开发技术储久良第三版答案

    《Web前端开发技术储久良第三版答案》涵盖了前端开发领域的关键知识点,主要针对储久良教授编著的教材第三版中的习题和实验提供了详尽的解答。这本书旨在帮助学习者深入理解Web前端开发的核心概念和技术,通过解决...

    前端 - 郭碧青《Web 前端性能优化思路与学习方法》.pdf

    郭碧青是腾讯公司的一位资深前端工程师,他在Web前端性能优化方面有着丰富的实践经验,并且对于性能优化的工作充满热情。郭碧青在行业内的知名度很高,虽然行事低调,但是经常受邀在各种大型会议和技术活动中分享...

    1+X WEB前端开发高级教案.pdf

    前端开发中,命名规范对于代码的可读性和可维护性至关重要。前端结构组织与文件命名规范要求同一项目中的代码组织结构清晰,同类型文件归类到相同的文件夹中,文件命名规则须统一并且要有意义。HTML命名规范要求HTML...

    基于Web前端开发技术特点及优化分析.pdf

    同时,Web前端开发技术的创新和迭代速度具有一定的代表意义,在快速发展的互联网技术体系中,需要在高速宽带技术的背景之下,通过不断涌现的高性能浏览器,运用更加高水平的前端开发技术,才能够承载得了不断丰富的...

    让你页面速度飞起来 Web前端性能优化(视频教程+ppt)

    ### Web前端性能优化知识点 #### 一、构建优化 **1.1 文件压缩与合并** - **文件压缩**:利用工具如UglifyJS...总之,Web前端性能优化是一个系统性的工程,需要开发人员具备全面的知识体系和实践经验才能有效实施。

    Web前端开发修炼之道

    总之,《Web前端开发修炼之道》是一本全面且深入的前端开发指南,旨在帮助开发者提升代码质量,实现高性能、易维护的Web应用。通过学习和实践书中的知识点,开发者可以不断提升自己的专业素养,成为一名真正的前端...

    Web前端开发技术与优化研究.pdf

    【Web前端开发技术】 Web前端开发技术主要包括HTML、CSS、Java等关键技术,这些技术共同构建了现代网页的呈现和交互。HTML(HyperText Markup Language)是网页内容的基础,用于描述网页结构,它不是编程语言,而是...

    Web前端开发技术以及优化方向分析.pdf

    ### Web前端开发技术及其优化方向分析 #### 一、Web前端开发技术体系及相关工作 1. **技术体系介绍**: - **HTML**: 被称为超文本标记语言,是构成网页的基础,用于定义网页的结构和内容。HTML 通过一系列的标签...

    编写高质量代码--Web前端开发修炼之道

    在Web前端开发中,高质量的代码意味着代码具有良好的可读性、可维护性、可扩展性和高性能。以下是一些可能在文档中涉及的关键知识点: 1. **代码结构与组织**:良好的代码结构可以使项目更易于理解和修改。这可能...

    《移动Web前端高效开发实战》书籍源码

    《移动Web前端高效开发实战》是一本专注于提升移动端Web应用开发效率的专业书籍,其源码提供了丰富的实践案例和代码示例,旨在帮助开发者掌握在移动设备上构建高性能、响应式和用户友好的Web应用的技巧。书中涉及的...

    《移动WEB前端高级开发实践》PDF

    《移动WEB前端高级开发实践》这本书是针对移动Web前端开发者的一本高级教程,旨在深入探讨在移动设备上构建高效、响应式和优化的Web应用的关键技术与实践。书中的内容涵盖了移动Web前端开发的各个方面,从基础概念到...

    编写高质量代码--Web前端开发修炼之道(完整版).rar

    书中《Web前端开发修炼之道》部分可能详细讨论了模块化开发、代码复用、错误处理、性能优化等实践策略。这些原则将帮助你写出可读性强、可扩展的代码,同时减少bug的出现,提高团队协作效率。 总之,这个压缩包提供...

    基于web前端的性能优化框架模型计算机研究.docx

    Google在Web前端性能优化方面也做出了许多贡献,包括Page Speed分析工具、Closure Compiler压缩工具、V8 JavaScript引擎的高性能执行、AngularJS框架以及后来的AngularJS2.0在性能上的改进,还有推动HTTP2协议的发展...

    JavaScript前端开发程序设计教程(微课版)-PPT课件.zip

    JavaScript作为Web开发中的重要语言,是前端开发的核心技术之一,尤其在构建动态、交互式的网页应用中发挥着关键作用。本教程《JavaScript前端开发程序设计教程(微课版)》旨在帮助初学者和有一定基础的开发者深入...

    移动互联Web前端开发项目1、2_spokencem_web前端_

    在移动互联Web前端开发项目1和2中,我们聚焦于为移动电子商务构建高效、响应式且用户友好的界面。Web前端开发是构建互联网应用程序的重要组成部分,它涉及到网站的视觉呈现、交互性和用户体验。在这个领域,...

Global site tag (gtag.js) - Google Analytics