浅谈DOM性能考虑

很多人都会忽视脚本对Web应用整体性能的影响。为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题。
一、尽量减少访问DOM和尽量减少标记
    访问DOM的方式对脚本性能会产生非常大的影响。以下面代码为例:
        if(document.getElementByTAgName("a").length > 0){
            var links = document.getElementByTAgName("a");
            for(var i=0;i<links.length;i++){
                //对每个链接做处理
            }
        }
    搞清楚这段代码做什么,自然明白问题在哪里了。首先,它取得了所有a元素,然后检查他们的个数是不是大于0;
    然后如果大于0,它会再次取得所有a元素,循环遍历这些元素并应用些操作。
    虽然这段代码可以运行,但是它不能保持最优的性能。不管什么时候,只要是查询DOM中的某些元素,浏览器都会搜素整个DOM树,从中查找出可能匹配的元素。
    这段代码居然使用了两次getElementByTAgName方法执行相同的操作,浪费了一次搜索。更好的办法是把第一次搜素的结果保存在一个变量中,然后在循环里重用该结果,比如:
        var links = document.getElementByTAgName("a");
        if(links.length > 0){
            for(var i=0;i<links.length;i++){
                //对每个链接做处理
            }
        }
    这样一来,代码功能没有变,但搜索DOM的次数由两次降低到了一次。
二、合并和放置脚本
    在我们制作的网页文档中,经常会看到有如下写法:
        <script src="script/functionA.js"></script>
        <script src="script/functionB.js"></script>
        <script src="script/functionC.js"></script>
        <script src="script/functionD.js"></script>
    为了提升代码的性能,推荐做法是将这四个javascript脚本合在同一个脚本中。这样就可以减少加载页面时发送的请求数量。
    脚本在标记中的位置对于页面的初次加载时间也有很大影响。传统上我们把脚本放置在<head>区域,这种做法存在一个问题。
    位于<head>块中的脚本会导致浏览器无法并行加载其他文件。
    根据HTTP规范,浏览器每次从同一个域名中最多只能同时下载两个文件。而在下载脚本期间,浏览器不会下载其他文件,及时是来自不同域名的文件,所有其他资源都要等到脚本加载完毕后才能下载。
    所以,放置javascript脚本最好的位置就是在文档末尾,</body>之前。
三、压缩脚本
    所谓压缩脚本,指的是把脚本文件中不必要的字节,如空格分注释等统统删除,从而达到“压缩”文件的目的。(有的精简程序甚至会重写你的部分代码,使用更短的变量名,从而减少整体文件的大小)
    推荐几个代表性的代码压缩工具:
    Douglas Crockford 的 JSMin    http://www.corckford.com/javascript/jsmin.html
    雅虎的YUI Compressor    http://developer.yahoo.com/yui/compressor
    谷歌的Closure Compiler    http://closure-compiler.appspot.com/home

浅谈DOM性能考虑的更多相关文章

  1. 前端性能优化--为什么DOM操作慢? 浅谈DOM的操作以及性能优化问题-重绘重排 为什么要减少DOM操作 为什么要减少操作DOM

    前端性能优化--为什么DOM操作慢?   作为一个前端,不能不考虑性能问题.对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩( ...

  2. 浅谈java性能分析

    浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...

  3. Js之浅谈dom操作

    JavaScript之浅谈dom操作 1.理解dom: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两 ...

  4. 浅谈vue性能优化

    基础优化 所谓的基础优化是任何 web 项目都要做的,并且是问题的根源.HTML,CSS,JS 是第一步要优化的点 分别对应到 .vue 文件内的,<template>,<style ...

  5. 浅谈DOM事件的优化

    在 JavaScript 程序的开发中,经常会用到一些频繁触发的 DOM 事件,如 mousemove.resize,还有不是那么常用的鼠标滚轮事件:mousewheel (在 Firefox 中,滚 ...

  6. 浅谈JavaScript性能

    最近在JavaScript性能方面有所感悟,把我的经验分给大家: 说到JavaScript,就不得不说它的代码的运行速度—— 在我初学JavaScript的时候,只是觉得它是一个很强大的脚本.渐渐的, ...

  7. 浅谈前端性能优化(PC版)

    前端的性能优化是一个很宽泛的概念,最终目的都是为了提升用户体验,改善页面性能.面试的时候经常会遇到问谈谈性能优化的手段,这个我分几大部分来概述,具体细节需要自己再针对性的去搜索,只是提供一个索引(太多 ...

  8. 浅谈Apache性能调优

    做了很多WEB系统性能测试,都知道了解测试环境,服务器硬件配置,web服务器参数配置是我们开始测试前首先要做的事情. 针对并发数量来说,不同数量级的用户并发,需求的服务器和web服务参数肯定是不同的. ...

  9. 浅谈Oracle 性能优化

    基于大型Oracle数据库应用开发已有6个年头了,经历了从最初零数据演变到目前上亿级的数据存储.在这个经历中,遇到各种各样的性能问题及各种性能优化. 在这里主要给大家分享一下数据库性能优化的一些方法和 ...

随机推荐

  1. 闲暇时间开发的个人app

    最近一段时间公司不是很忙,晚上基本没怎么加班.所以自己利用晚上在家的时间开发了一个app(奇趣营),其实自从转android开发以来,就有想过要自己开发一个app.一方面可以提升自己的经验:另一方面可 ...

  2. 关于MYSQL中like 检索汉字问题。

    mysql中like’中国‘查询不出来结果 如果 like‘zg’就看查询出来结果. 查询了半天是由于mysql中编码的原因 解决办法: 进入mysql 输入命令:show variables lik ...

  3. Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

    WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...

  4. ASP.NET MVC 入门8、ModelState与数据验证

    原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/08/1305962.html ViewData有一个ModelState的属性,这是一个类型 ...

  5. 【转帖】ECLIPSE-JEE-LUNA-SR2官方汉化教程

    ECLIPSE-JEE-LUNA-SR2官方汉化教程 工具/原料 Eclipse-jee-luna-SR2 步骤/方法 1.在浏览器输入网址http://www.eclipse.org/babel/d ...

  6. 首次构建android studio gradle 下载缓慢的问题

    1.先使用其他工具下载gradle, https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 2.然后放在C:\Users\A ...

  7. 修饰者模式(装饰者模式,Decoration)

    1. 装饰者模式,动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 2.组合和继承的区别 继承.继承是给一个类添加行为的比较有效的途径.通过使用继承,可以使得子类在拥有 ...

  8. iOS 内存管理机制和循环引用处理方法

    简述 ARC: 自动引用计数, Automatic Reference Counting MRC: Mannul Reference Counting ARC工作原理 1.当每次创建一个新实例时,AR ...

  9. 配置算法(第4版)的Java编译环境

    1. 下载 1.1 JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html选择“Windows x64 180.5 ...

  10. [整理]C#反射(Reflection)详解

    本人理解: 装配件:Assembly(程序集) 晚绑定:后期绑定 MSDN:反射(C# 编程指南) -----------------原文如下-------- 1. 什么是反射2. 命名空间与装配件的 ...