js数据访问的艺术

数据访问js无时不刻所要做的事情,提高对数据的访问效率对一般的小的程序来说,对性能并不会有明显的改善。但是对像淘宝这样项目巨大,访问量巨大的网站来说,一个数据访问效率的提高对性能来说可能产生很大提升。

js中有四种基本的数据访问位置。直接量,变量,数组项,对象。 对直接量和局部变量的访问成本是比较低的,而对数组和对象的访问成本稍大一些,当然不同的浏览器对这四种方式的访问差异也是不一样的,下图对这四种数据类型进行200‘000 次操作所用的时间。

从上图可以看出,对直接量和局部变量的访问成本比另外两种要低很多,所以应该尽量使用直接量或局部变量。

一般来说,js中会将所有的变量保存在一条作用域链上,当需要访问一个数据时,它会从离它最近的作用域找,如果找到就停止,没找到就会一直沿着作用域链找先去,全局变量是位于作用域链的最底部。所以访问全局变量的成本是相当高的,特别是在深层函数中访问全局变量,因此要避免访问全局变量。

说到作用域链,就不得不提起js中可以临时改变上下文的作用域的两个表达式,一个是with,另一个是try catch。

with 表达式为所有对象属性创建一个默认操作变量,在其他语言中,类似的功能通常用来避免书写一些重复的代码。但是这种方式会造成很多问题,不建议使用,而且在Ecmscript5中的严格模式下,with已经不能使用。在JavaScript 中不只是with 表达式人为地改变运行期上下文的作用域链,try-catch 表达式的catch 子句具有相同效果。当try 块发生错误时,程序流程自动转入catch 块,并将异常对象推入作用域链前端的一个可变对象中。但是请注意,只要catch 子句执行完毕,作用域链就会返回到原来的状态。

另外一种对性能可能产生影响的方式就是使用闭包。闭包在js中可以说是个神奇的东西,它会对解决问题提供很好的帮助,但是对性能和内存都有很大影响。所以要慎用闭包。

时间: 2024-09-30 02:12:58

js数据访问的艺术的相关文章

table实现 js数据访问 传递json数据用render_to_response

$(document).ready(function(){ $.ajax({ url:'/query/', dataType:'json', type:'GET', success:function(data){ for(var i=0;i<data.length;i++){ var a='<tr>'+'<td>'+data[i].codename+'</td>'+'<td>'+data[i].name+'</td>'+'<td>

如何在数据访问层上提高js的执行效率

本文讲到的是如何从数据访问层面上提高JS 代码的执行效率.总的来讲有以下几条原则: 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的: 尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价: 闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存: 嵌套的对象成员会明显影响性能,尽量少用: 避免多次访问对象成员或函数中的全局变量,尽量将它们赋值给局部变量以缓存. 这么几句话看似简单,但要深刻理解其中的道理则需涉及到JS的 标识符解析.作用域链.运行期上下文(又称为执

JS 数据类型转换

JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number). 在 判断字符串是否是数字值前,parseInt()和parseFloat()都会仔细分析该字符串.parseInt()方法首先查看位置0处的 字符,判断它是否是个有效

js中访问SqlServer数据库

1 <script language="JavaScript"> 2 // 创建数据库对象 3 var objdbConn = new ActiveXObject("ADODB.Connection"); 4 // DSN字符串 5 var strdsn = "Driver={SQL Server};SERVER=127.0.0.1;UID=sa;PWD=sa;DATABASE=coa"; 6 // 打开数据源 7 objdbConn

高性能JavaScript笔记一(加载和执行、数据访问、DOM编程)

写在前面 好的书,可能你第一遍并不能领会里面的精魂,当再次细细品评的时候,发现领悟的又是一层新的含义 (这段时间,工作上也不会像从前一样做起来毫不费力,开始有了新的挑战,现在的老大让我既佩服又嫉妒,但真的是打心底里仰慕,希望自己有朝一日能过到他那个高度) 既然现在还达不到那个层次,就好好堆砖吧,当砖堆到一定高度也自然会上一个小台阶. 脚本位置 脚本会阻塞页面渲染,直到它们全部下载并执行完成,页面才会继续渲染.页面只有加载并执行完前面一个script外部文件才会去加载下面一个script标签. 在

又一个php与js数据交互的例子

php和js如何通过json互相传递数据相关问题探讨 作者: 字体:[增加 减小] 类型:转载 json是js的一种数据格式,可以直接被js解析,php无法直接读取json数据,但是php提供了json_decode函数来对json数据进行转化,从而可以被php脚本访问,今天,站长就和大家一起来探讨这个问题,感兴趣的你可以参考下哦 当我们在结合php和javascript实现某些功能时,经常会用到json.json是js的一种数据格式,可以直接被js解析.而php无法直接读取json数据,但是p

JavaScript 数据访问(通译自High Performance Javascript 第二章) [转]

JavaScript 数据访问(通译自High Performance Javascript 第二章) 提问者:lilei335260(ID:160310) | 悬赏 0.0 希赛币 | 回答数:12 | 关注度:32 | 提问时间:2014-05-03 JavaScript 数据访问(翻译自High Performance Javascript 第二章) 计算机科学中一个经典的问题是决定如何存储数据,以便进行快速的读取和写入操作. 在代码执行期间,数据如何存储将会关系到它们的检索速度.在Jav

SpringBoot 之数据访问

1. Spring Boot 与 JDBC 默认使用 org.apache.tomcat.jdbc.pool.DataSource 数据源; // application.yml spring: datasource: username: root password: root url: jdbc:mysql:///jpa driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource #

NET Core 实战 Dapper 扩展数据访问

一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relational Mapping,对象关系映射)出现了,我们开始使用 EF.Dapper.NHibernate,亦或是国人的 SqlSugar 代替我们原来的 SqlHelper.cs.通过这些 ORM 工具,我们可以很快速的将数据库中的表与代码中的类进行映射,同时,通过编写 SQL 或是 Lambda 表达