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 相关文章推荐
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
JS打字效果的动态菜单代码分享
Aug 21 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
Mar 09 Javascript
JavaScript实现审核流程状态的动态显示进度条
Mar 15 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 Javascript
微信小程序表单验证功能完整实例
Dec 01 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 Javascript
vue移动端的左右滑动事件详解
Jun 17 Javascript
Javascript如何实现扩充基本类型
Aug 26 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
服务器web工具 php环境下
2010/12/29 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
php微信开发之图片回复功能
2018/06/14 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python中遍历文件的3个方法
2014/09/02 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
办理护照介绍信
2014/01/16 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
商务日语专业自荐信
2014/04/17 职场文书
绿色出行口号
2014/06/18 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
导游词之湖北武当山
2019/09/23 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL