高性能javascript讀書筆記(二.數據訪問)

第二章  數據訪問javascript

讀書筆記:前端

JavaScript 中有四種基本數據訪問位置: java

直接量:直接量僅僅表明本身,而不存儲特定位置。字符串,數字,布爾,對象,數組,函數,正則表達式,具備特殊意義的空值,以及未定義。正則表達式

變量:var關鍵字建立用於存儲數據值。編程

數組項:具備數字索引,存儲一個javascript數組對象。數組

對象成員: 具備字符串索引,存儲一個javascript對象。瀏覽器

總的來講, 直接量和局部變量的訪問速度要快於數組項和對象成員的訪問速度。函數

 

管理做用域性能

每一個javascript函數都被表示爲對象,進一步說,是一個函數實例。優化

函數對象正如其餘對象同樣,擁有你能夠編程訪問的屬性,和一系列不能被程序訪問,僅供javascript引擎使用的內部屬性。其中一個屬性是[scope]做用域。

內部[scope]屬性包含一個函數被建立的做用域中的對象的集合。此集合被稱爲函數的做用域鏈。它決定哪些數據可由函數訪問,此函數做用域鏈中的每一個對象稱爲一個可變對象,每一個可變對象都以「鍵值」的形式存在。當一個函數建立後,他的做用域鏈被填充以對象,這些對象表明建立此函數的數據。

在函數運行過程當中,每遇到一個變量,標識符識別過程要決定從哪裏得到或者存儲數據。

此過程搜索運行期上下文的做用域鏈,查找同名的標識符。從運行函數的激活目標之做用域的前端開始,若是找到了,就使用這個具備指定標識符的變量。 若是沒找到,繼續搜索,知道標識符被找到。 函數運行時每一個標識符都會通過這樣的過程,這種搜索過程會影響性能。

在運行期的上下文的做用域鏈中,一個標識符所處的位置越深,讀寫速度越慢,因此,局部變量的讀寫速度是最快的,全局變量一般是最慢的。

在沒有優化Javascript引擎的瀏覽器中,儘量使用局部變量。

用局部變量存儲本地範圍以外的變量值,若是它在函數中的使用多於一次。

改變做用域鏈

通常來講, 一個運行期上下文的做用域鏈不會改變。可是,有兩種表達式能夠改變上下文做用域鏈。

1.With  

With(document)建立一個默認操做變量

經過將document對象傳遞給with表達式,一個新的可變對象容納了document對象的全部屬性。被插入到了做用域的前端。訪問document屬性很是快,但訪問局部變量的速度變慢了,最好不要使用with。正如前面提到的,只要簡單的將document存儲到局部變量中,就能夠得到性能上的提高。

總結:

javascript中, 數據存儲位置能夠對代碼總體性能產生重要影響。有四種數據訪問類型,直接量,數組項,對象成員, 他們有着不一樣的性能考慮。

直接量和局部變量訪問速度很是快, 數組項和對象成員須要更長時間。

局部變量比域外變量快,由於它位於做用域鏈的第一個對象中。變量在做用域中的位置越深,訪問所需的時間就越長,所有變量老是最慢的,由於他們老是位於做用域鏈的最後一環。

避免使用with表達式,由於它改變了運行期上下文的做用域鏈,並且應當當心對待try-catch表達式的catch子句,由於它具備一樣效果。

嵌套對象會形成重大性能影響,儘可能少用。

一個屬性或方法在原型鏈中的位置越深,訪問它的速度就越慢。

 

提升javascript的性能,將常用的對象成員,數組項,和域外變量存入局部變量中,而後,訪問局部變量的速度就快於那些原始變量。

相關文章
相關標籤/搜索