1、最小化的Dom访问,在一次Dom访问做尽可能多的操作;

2、使用局部变量存放指向反复访问的元素节点的Dom引用,原则上js代码中不应该重复获取同一个元素节点,除非它在运行过程中发生改变;

3、对元素集合(Html集合)小心处理,因为每次查询都会对底层的文档进行重新查询,在迭代处理中更好的的处理方式是缓存集合的length属性到一个局部变量中,当需要在迭代中使用元素集合,可以将该集合拷贝到数组中;

4、如果使用场景允许使用速度更快的API;

5、注意重绘和重排版,尽量降低重排版的次数,如果js代码中设计对大量的元素节点的几何操作建议创建一个文档片段(frame),对文档片段进行操作然后附加到原始的操作节点(最优解重排次数为1),批量修改风格,离线操作DOM树缓存并减少对布局信息的访问;

6、在js动画代码中为了避免动画节点集合属性改变引起整个页面的重新排版和渲染,建议对动画代码使用绝对坐标、拖放代理;

7、因为为元素绑定事件处理函数是一件极为消耗性能的事,而通常所有绑定事件处理函数的元素节点只有少部分触发,因此使用事件托管技术仅为触发最小化事件句柄是推荐的处理方式;

8、合理使用事件委托技术,利用事件冒泡,为层级尽可能高的元素添加事件处理程序,就可以管理子元素下同一类型的所有事件,而不必给每一个元素都绑定事件处理程序,占用的内存和访问dom节点的次数更少,可以大大提升性能。

javascript性能优化之Dom编程性能调优总结的更多相关文章

  1. Linux性能优化之磁盘I/O调优

    I/O指标已介绍,那么如何查看系统的这些指标呢? 一.根据工具查性能 二.根据性能找工具 三.磁盘I/O观察实例 iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的 使用率 . I ...

  2. spark性能优化-JVM虚拟机垃圾回收调优

    1 2 3 4

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

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

  4. Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优

    文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...

  5. 前端性能优化--为什么DOM操作慢?

    作为一个前端,不能不考虑性能问题.对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩(css.js.图片皆可压缩) 样式表放头部 ...

  6. 【Java/Android性能优化1】Android性能调优

    本文参考:http://www.trinea.cn/android/android-performance-demo/ 本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.La ...

  7. 前端性能优化工具--DOM Monster

    当我们开发web应用的时候,性能是一个永远不能回避的问题.其实对于DOM的性能调试也是一个不可或缺的过程.使用DOM monster你只需要添加到你的”书签中“,在任何需要调试的页面点击这个书签,它就 ...

  8. Android性能优化之UI渲染性能优化

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要记录一些工作中常用的UI渲染性能优化及调试方法,理解这些方法对于我们编写高质量代码也是有一些帮助的,主要内容包括介绍CPU,GPU的职 ...

  9. 如何利用 JuiceFS 的性能工具做文件系统分析和调优

    JuiceFS 是一款面向云原生环境设计的高性能 POSIX 文件系统,在 AGPL v3.0 开源协议下发布.作为一个云上的分布式文件系统,任何存入 JuiceFS 的数据都会按照一定规则拆分成数据 ...

随机推荐

  1. Luffy之虚拟环境.项目搭建,目录日志等配置信息

    1. 项目开发前 1.1 虚拟环境virtualenv 如果在一台电脑上, 想开发多个不同的项目, 需要用到同一个包的不同版本, 如果使用上面的命令, 在同一个目录下安装或者更新, 新版本会覆盖以前的 ...

  2. python- Socket & Mysql 重要知识点

    socket :           解决粘包 并发编程          生产者消费者模型          进程池和线程池          回调函数          GIL全局解释器锁(理论) ...

  3. 53. Maximum Subarray最大子序和

    网址:https://leetcode.com/problems/maximum-subarray/submissions/ 很简单的动态规划 我们可以把 dp[i] 表示为index为 i 的位置上 ...

  4. 大量的QT控件及示例发放

    QT属性控件项目https://github.com/lexxmark/QtnProperty 比特币交易软件https://github.com/JulyIGHOR/QtBitcoinTrader ...

  5. MySQL变量变更小记

    MySQL会随版本的更新,在新版本中淘汰一些variable和引入一些新的variable.在配置variable后不起作用或安全扫描取不到variable值产生告警时,可能正是variable变更的 ...

  6. for循环跳转语句(break、continue)

    跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句.接下来分别进行详细地讲解. 1. break语句 在switch条件语句和循环语句中都可以使 ...

  7. thinkphp 3.2 加载第三方库 第三方命名空间库

    tp 自动加载的介绍: http://document.thinkphp.cn/manual_3_2.html#autoload 第三方库不规范库 不适用命名空间的库 可以使用import函数导入,其 ...

  8. js之单例

    所谓单例,指的是只有一个实例的对象. js通过对象字面量的方式来创建单例对象. var sig = { name:value, method:function(){ } }

  9. Latex常用数学符号(转)

    http://blog.sina.com.cn/s/blog_642075770100u0np.html Latex常用数学符号(转) 1.指数和下标可以用^和_后加相应字符来实现.比如: 2.平方根 ...

  10. QuickStart系列:docker部署之MongoDB

    MongoDB[1]  是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB[2]  是一个介于关系数据库和非关系数据库之间的产品, ...