js 数据存储和DOM编程


Posted in Javascript onFebruary 09, 2017

数据存储

·在javascript中,数据存储的位置会对代码整体性能产生重大的影响。

·数据存储共有4种方式:字面量、变量、数组、对象成员。

·要理解变量的访问速度,就要理解作用域。由于局部变量处于作用域的起始位置,因此访问速度比访问跨域作用域变量(即除起始位置之外的外层作用域变量)更快。即变量处在作用域的位置越深,访问速度越慢。这也就说明,访问全局变量的速度是最慢的。 总的来说,字面量和局部变量的访问速度快于数组和对象成员的访问速度。 

因此,常见的一些提高数据访问速度的方法有:

①避免使用with、try-catch中的catch语句,因为它会改变执行环境的作用域链。

②尽量少用嵌套对象、避免对象嵌套过深。

③可以把常需要访问的对象成员、数组项、跨域变量保存在局部变量中。

DOM编程

我们知道用javascript操作DOM会影响性能,这是为什呢。这个问题是“天生”的。

因为DOM是一个独立于语言的,用于操作XML和HTML文档的程序接口,而客户端脚本编程大多数时候是和底层文档打交道。所以推荐的做法就是尽可能少操作DOM。

有这么一些小技巧:

①如果需要多次访问某个DOM节点,使用局部变量存储它的引用。

②小心处理HTML集合,因为它实时联系着底层文档。

例如:

var divs= document.getElementsByTagName('div');
for(var i = 0;i < divs.length; i++){
 document.body.appendChild(document.creatElement('div'))
}

这是一个死循环,原因就是divs.length每次迭代都会增加,它反映的是底层文档的当前状态。

因此,我们在需要遍历某个HTML集合的时候,可以先把长度缓存起来再使用。而如果是要经常操作的集合,可以把整个集合拷贝到一个数组中。

③使用一些速度更快的API

例如:

childNodes -> children
childElementCount -> childNodes.length
firstElementChild -> firstChild
lastElementChild -> last Child
getElementByTagName ->querySelectorAll

④注意重绘和重排

1.由于每次重排都会产生计算消耗,大多数浏览器通过队列化修改并批量执行来优化重排过程。

而获取布局信息的操作会导致队列刷新,如下方法:

offsetTop,offsetLeft,offsetWidth,offsetHeight、
scrollTop,scrollLeft,scrollWidth,scrollHeight、
clientTop,clientLeft,clientWidth,clientHeight、
getComputedStyle

因为这些属性或方法需要返回最新的布局信息,因此浏览器不得不执行渲染列队中的“待处理变化”并触发重排以返回正确的值。

2.最小化重绘和重排,合并多次对DOM和样式的修改,如

var el = document.getElementById('mydiv');
el.style.margin = '5px';
el.style.padding = '2px';
el.style.borderLeft= '5px';

以上,修改了三个样式,每个都会影响元素的几何结构,最糟糕的情况下会导致三次重排(大部分现代浏览器为此做了优化,只会触发一次)

可以被优化为:

var el = document.getElementById('mydiv');
el.style.cssText = 'margin = '5px';padding = '2px';borderLeft= '5px';

3.需要对DOM元素进行一系列操作时,可以通过以下步骤:

1)使元素脱离文档流

2)对其应用多重改变

3)把元素带回文档中

具体方法有

     ·隐藏元素、应用修改、重新显示

     ·使用文档片段,在别的地方构建一个子树,再把它拷贝回文档

     ·将原始元素拷贝到一个脱离文档的节点,修改后再替换原始元素

⑤动画中使用绝对定位,使用拖放代理。

⑥使用事件委托来减少事件处理器的数量。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 学习笔记(七)字符串的连接
Dec 31 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
Dec 31 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
js获取字符串字节数方法小结
Jun 09 Javascript
Windows系统下Node.js的简单入门教程
Jun 23 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
基于JS实现PHP的sprintf函数实例
Nov 14 Javascript
纯JS焦点图特效实例(可一个页面多用)
Dec 07 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 Javascript
超全面的javascript中变量命名规则
Feb 09 #Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 #Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 #Javascript
js 原型对象和原型链理解
Feb 09 #Javascript
AngularJs表单校验功能实例代码
Feb 09 #Javascript
javascript 显示全局变量与隐式全局变量的区别
Feb 09 #Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 #Javascript
You might like
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
JS中多种方式创建对象详解
2016/03/22 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
Python算术运算符实例详解
2017/05/31 Python
Python实现的矩阵类实例
2017/08/22 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python实现dijkstra最短路由算法
2019/01/17 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
一套Delphi的笔试题二
2013/05/11 面试题
成人毕业生自我鉴定
2013/10/18 职场文书
工商管理系学生的自我评价分享
2013/11/29 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
后进生转化工作制度
2014/01/17 职场文书
学校对教师的评语
2014/04/28 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
学校标语口号大全
2015/12/26 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
Python Socket编程详解
2021/04/25 Python