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 相关文章推荐
jquery关于图形报表的运用实现代码
Jan 06 Javascript
js实现无缝循环滚动
Jun 23 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
js编写的treeview使用方法
Nov 11 Javascript
详解angular ui-grid之过滤器设置
Jun 07 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
javascript 判断用户有没有操作页面
Oct 17 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 Javascript
微信小程序实现单选选项卡切换效果
Jun 19 Javascript
jQuery中each和js中forEach的区别分析
Feb 27 jQuery
Vue实现固定定位图标滑动隐藏效果
May 30 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
php中文字母数字验证码实现代码
2008/04/25 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
js实现简单页面全屏
2019/09/17 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
Python tkinter常用操作代码实例
2020/01/03 Python
windows支持哪个版本的python
2020/07/03 Python
python爬取代理ip的示例
2020/12/18 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
购房意向书范本
2014/04/01 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
经费申请报告范文
2015/05/18 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
看看如何用Python绘制小米新版天价logo
2021/04/20 Python