高性能js之数据访问性能
js中si中基本数据访问:
直接量, 变量, 数组项, 对象成员
性能问题:
首先要理解作用域链的基本概念,例如,当一个函数被创建时,就会产生一个激活对象(AO对象),AO对象中存储了该函数中所有的属性和值。当然对应的全局对象也会存在一个作用域,新创建的作用域位于全局对象作用域的顶部,形成类似链子一样的作用域链,当访问函数中某个属性时,从作用域链的顶部开始查找是否有该属性,若有则直接用之,若没有,则继续作用域链的下一个对象,直到找到为止,若在作用域链中不存在该属性,则返回undefined。
还有一个是原型链,原型链就是一个构造函数的祖先,构造函数创建的实例对象有自己的独特属性,还共同拥有者从原型继承而来的公共属性。而原型也是一个对象,原型的原型就Object(),这就形成一个原型链,访问对象的某个属性时,先看构造函数是否有该属性,若有则用之,若没有,则看构造函数的原型是否有该属性,然后原型的原型,知道最后的Object(),若都没有,则返回undefined
1.访问直接量和变量比访问数组项和对象属性速度要快,所有尽量少的访问数组和对象(注意:这不是说不让访问,而是对同一个数组项或对象属性不要重复访问,可以将第一次访问结果存储到局部变量中fang,下次直接访问局部变量)
2.作用域链和原型链,访问的属性位于作用域链或原型链层次越深,访问之所需时间就越多,即速度就越慢,同理,将第一次访问结果存储到局部变量中,下次直接访问局部变量即可。
3.with可以更改作用域链顶部对象,导致其他对象作用域降低一级,所以with能不用就别用。
4.try{}catch(e){...},在catch中也会改变作用域链,将异常对象作为作用域链的顶部,导致其他作用域的变量访问变慢(注意:只要catch子句执行完毕,作用域链就会返回之前状态),但catch在很多地方还是很有用的,所以可以将异常对象作为参数参数处理函数,这样只有一条语句,没有局部访问,作用域链被改就不会影响代码性能。
5.闭包:当在一个函数内形成闭包,导致两个问题,首先,闭包中包含该函数的应用导致该函数无法被销毁,结果就是内存泄漏.此为内存问题。然后,闭包被执行时,闭包作用域称为作用域链第一作用域,每次闭包访问该函数内的属性时就会产生一些性能损失。
6.对象成员嵌套:对象成员中还可以包含成员,例如:window.location.href , 这种访问,每多一个点间隔,访问层次就越深,所需事件就越多,速度就越慢,所以最好将第一次访问结果存储到一个局部变量中,下次访问直接访问局部变量即可。消除了重复访问同一属性的性能问题。数组类似。
基本目的:
尽量以最快的速度访问到数据;
解决基本原理 :
用局部变量存储第一次访问结果,下次访问直接访问局部变量,提高访问速度性能。
高性能js之数据访问性能的更多相关文章
- Javascript高性能编程-提高数据访问速度
hasOwnProperty()仅检索实例不检索原型,in即检索实例,又检索原型 成员嵌套越深,访问速度越慢,只在必要的情况下使用对象成员. 如果在同一个函数中你要多次读 ...
- 数据访问层DAL(数据库访问抽象类DataProvider)
晒晒数据访问层DAL,看看你的项目数据访问层使用的是什么形式,数据访问性能比较 采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对 ...
- (转)SQLServer_十步优化SQL Server中的数据访问一
原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第一步:应用正确的索引 我之所以先从索引谈起是因为采用正确的索引会使生 ...
- 高性能Javascript--高效的数据访问
接上一篇,希望能写一个高性能Javascript专题. 第一篇:高性能Javascript--脚本的无阻塞加载策略. 参考摘录<高性能Javascript>. 经典计算机科学的一个问题是, ...
- 分享自己的超轻量级高性能ORM数据访问框架Deft
Deft 简介 Deft是一个超轻量级高性能O/R mapping数据访问框架,简单易用,几分钟即可上手. Deft包含如下但不限于此的特点: 1.按照Transact-SQL的语法语义风格来设计,只 ...
- 高性能JavaScript笔记一(加载和执行、数据访问、DOM编程)
写在前面 好的书,可能你第一遍并不能领会里面的精魂,当再次细细品评的时候,发现领悟的又是一层新的含义 (这段时间,工作上也不会像从前一样做起来毫不费力,开始有了新的挑战,现在的老大让我既佩服又嫉妒,但 ...
- 超轻量级高性能ORM数据访问组件Deft,比dapper快20%以上
超轻量级高性能ORM数据访问组件Deft,比dapper快20%以上 阅读目录 Deft简介 Deft 核心类介绍 Deft 3分钟即可上手使用 其他可选的配置参数 性能测试 Demo代码下载 回到顶 ...
- 如何在数据访问层上提高js的执行效率
本文讲到的是如何从数据访问层面上提高JS 代码的执行效率.总的来讲有以下几条原则: 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的: 尽可能地少用with 语句,因为它会增加with 语句以 ...
- js数据访问的艺术
数据访问js无时不刻所要做的事情,提高对数据的访问效率对一般的小的程序来说,对性能并不会有明显的改善.但是对像淘宝这样项目巨大,访问量巨大的网站来说,一个数据访问效率的提高对性能来说可能产生很大提升. ...
随机推荐
- 修改pip源为国内网站
import os,sys,platformini="""[global]index-url = https://pypi.doubanio.com/simple/[in ...
- jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因
jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因 今天利用了jquery.validate.js来验证表单,发现在火狐.谷歌浏览器当中都可以进行验证,但是在IE系列浏 ...
- ASP.NET常见命名空间及其功能描述
命名空间 | 功能描述 System | 包含CLR的基本类型和基类,定义了常用的值类型和引用类型,事件.接口.属性和异常处理等 System.Text | 包含用于文本处理的类,实现了不同编码方 ...
- TCP是如何保证包的顺序传输
转自:http://blog.csdn.net/ggxxkkll/article/details/7894112 大家都知道,TCP提供了最可靠的数据传输,它给发送的每个数据包做顺序化(这看起来非常烦 ...
- java.String中的方法
(String) str.trim() 该方法返回一个复制该字符串的开头和结尾的白色空格去掉,或字符串,如果它没有头或尾空白. (Boolean) str.contains(str1) 判断 str ...
- Linux下安装jdk8的方法
一.yum安装 只需要一条命令就可以安装jdk: yum install java--openjdk* -y 执行过这条命令无需配置,直接可以使用. 二.下载tar包安装 下载jdk8 登录网址:ht ...
- Keepalived + MySQLfailover + GTIDs 高可用
架构图 10.1.1.207 mysql master + keepalived 10.1.1.206 mysql slave ( backup master ) + ke ...
- 下载并导出数据到execl中
下载poi-3.6-20091214.jar.下载地址例如以下: http://download.csdn.net/detail/evangel_z/3895051 1.jsp <button ...
- 【安装.net framework4.0】之安装失败,“安装时发生严重错误”
在网上查了很多资料都说改什么文件名和注册表什么的,根本没用,后来查到一篇文章,提供了下面的解决办法: 地址:<Microsoft .NET Framework 4.0安装时发生严重错误 无法安装 ...
- erlang 爬虫——爬取网页图片
说起爬虫,大家第一印象就是想到了python来做爬虫.其实,服务端语言好些都可以来实现这个东东. 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌 ...