二.数据访问

第二章  数据访问

读书笔记:

JavaScript 中有四种基本数据访问位置:

直接量:直接量仅仅代表自己,而不存储特定位置。字符串,数字,布尔,对象,数组,函数,正则表达式,具有特殊意义的空值,以及未定义。

变量:var关键字创建用于存储数据值。

数组项:具有数字索引,存储一个javascript数组对象。

对象成员: 具有字符串索引,存储一个javascript对象。

总的来说, 直接量和局部变量的访问速度要快于数组项和对象成员的访问速度。

管理作用域

每个javascript函数都被表示为对象,进一步说,是一个函数实例。

函数对象正如其他对象一样,拥有你可以编程访问的属性,和一系列不能被程序访问,仅供javascript引擎使用的内部属性。其中一个属性是[scope]作用域。

内部[scope]属性包含一个函数被创建的作用域中的对象的集合。此集合被称为函数的作用域链。它决定哪些数据可由函数访问,此函数作用域链中的每个对象称为一个可变对象,每个可变对象都以“键值”的形式存在。当一个函数创建后,他的作用域链被填充以对象,这些对象代表创建此函数的数据。

在函数运行过程中,每遇到一个变量,标识符识别过程要决定从哪里获得或者存储数据。

此过程搜索运行期上下文的作用域链,查找同名的标识符。从运行函数的激活目标之作用域的前端开始,如果找到了,就使用这个具有指定标识符的变量。 如果没找到,继续搜索,知道标识符被找到。 函数运行时每个标识符都会经过这样的过程,这种搜索过程会影响性能。

在运行期的上下文的作用域链中,一个标识符所处的位置越深,读写速度越慢,所以,局部变量的读写速度是最快的,全局变量通常是最慢的。

在没有优化Javascript引擎的浏览器中,尽可能使用局部变量。

用局部变量存储本地范围之外的变量值,如果它在函数中的使用多于一次。

改变作用域链

一般来说, 一个运行期上下文的作用域链不会改变。但是,有两种表达式可以改变上下文作用域链。

1.With

With(document)创建一个默认操作变量

通过将document对象传递给with表达式,一个新的可变对象容纳了document对象的所有属性。被插入到了作用域的前端。访问document属性非常快,但访问局部变量的速度变慢了,最好不要使用with。正如前面提到的,只要简单的将document存储到局部变量中,就可以获得性能上的提升。

总结:

在javascript中, 数据存储位置可以对代码整体性能产生重要影响。有四种数据访问类型,直接量,数组项,对象成员, 他们有着不同的性能考虑。

直接量和局部变量访问速度非常快, 数组项和对象成员需要更长时间。

局部变量比域外变量快,因为它位于作用域链的第一个对象中。变量在作用域中的位置越深,访问所需的时间就越长,全部变量总是最慢的,因为他们总是位于作用域链的最后一环。

避免使用with表达式,因为它改变了运行期上下文的作用域链,而且应当小心对待try-catch表达式的catch子句,因为它具有同样效果。

嵌套对象会造成重大性能影响,尽量少用。

一个属性或方法在原型链中的位置越深,访问它的速度就越慢。

 

提高javascript的性能,将经常使用的对象成员,数组项,和域外变量存入局部变量中,然后,访问局部变量的速度就快于那些原始变量。

 

时间: 2024-10-03 00:58:05

二.数据访问的相关文章

Spring.Net学习笔记(二)-数据访问器

Spring对ADO.NET也提供了支持,依赖与程序集Spring.Data.dll IDbProvider IDbProvider定义了数据访问提供器的基础,配置如下 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="spring"> <section na

实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namesp

2017-4-20实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类:  实体类 二.数据访问类 将某个表的数据库操作写成一个一个方法,放入到此类中供外部调用 这是一个数据访问类:  数据访问类 三.字符串攻击,防攻击 字符串攻击: 主要利用获取需用户输入

企业级应用框架(二)三层架构之数据访问层的封装与抽象

接上一篇我们来对数据访问层进行封装与抽象.在上一篇我们知道,要解除BLL对DAL的依赖,我们就必须抽象出DAL层的接口,同时基于DAL的数据访问技术很多,如EF,ADO.NET,LINQ TO SQL,因此,我们的数据访问层必须对这些技术提供相应的支持.所以今天我们要做的事情有两件,第一,定义我们的数据访问层接口:第二,屏蔽各类数据库访问技术的差异,提供统一的数据库访问模型.举个例子,我们只需要修改一下我们的配置文件,就能够把ADO.NET的实现方式,改变成EF的实现方式.好下面搭建我们的三层构

(转)SQLServer_十步优化SQL Server中的数据访问 二

原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第五步:识别低效TSQL,采用最佳实践重构和应用TSQL 由于每个程序员的能力和习惯都不一样,他们编写的TSQL可能风格各异,部分代码可能不是最佳实现,对于水平一般的程序员可能首先想到的是编写TSQL实现需求,至于性能问题日后再说,因此在开发和测试时可能发现不了问题. 也有一些人知道最佳实践,但在编写代码时由于种种原因没有采用最佳实践,等到用户发飙的那天才乖乖地重新埋

PHP-------PDO:数据访问抽象层

PDO:数据访问抽象层 它是用来做数据访问的,和数据库之间连接,执行一些SQL语句 这种方式比之前的,Mysqli的方式功能更大一些 用一张图来说明: 人为写了一条SQL语句,是通过Mysqli的对象(封装好的类),通过Mysql驱动,然后在操作Mysql数据库.这是以前的方式. 如果这条SQL语句,想访问另外一个数据库,不是Mysql了,想用一下Oracle Call数据库或者SQL Server数据库,根据逻辑,应该还要有一个类是专门操作Oracle Call 数据库的类 同一张图来表示:

TP数据访问

重点学习了: 1,ThinkPHP查询数据 2.ThinkPHP添加数据 LianXiController.class.php 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 class LianXiController extends Controller 5 { 6 //添加数据 7 function tj() 8 { 9 10 /* 11 //方法1:(数组) 12 //添加的数组必须为关联数组,key必须为字段

十步优化SQL Server中的数据访问(转载)

原文地址:http://tech.it168.com/a2009/1125/814/000000814758.shtml 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因. 经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表

使用Ninject+Moq在单元测试中抽象数据访问层

一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑 二.步骤如下 2.1 定义数据访问接口和实现 public interface IDBAccess { List<string> GetList(string request); } public class DBAccessImp : IDBAccess { public List<string> Ge