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 相关文章推荐
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
基于JavaScript实现瀑布流布局
Aug 15 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
Aug 28 jQuery
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
在antd中setFieldsValue和defaultVal的用法
Oct 29 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
2006/12/13 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
js实现简易计算器功能
2019/10/18 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python3.7添加dlib模块的方法
2020/07/01 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
高二化学教学反思
2014/01/30 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
自荐信的格式
2014/03/10 职场文书
职业规划实施方案
2014/06/10 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2015年教师节活动总结
2015/03/20 职场文书
美丽人生观后感
2015/06/03 职场文书
公司的力量观后感
2015/06/05 职场文书