最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實(shí)現(xiàn)JavaScript高性能的數(shù)據(jù)存儲(chǔ)

 更新時(shí)間:2016年12月11日 09:51:12   作者:leslie·Zhao  
本文主要對(duì)JavaScript的數(shù)據(jù)存儲(chǔ),產(chǎn)生性能問題的原因,內(nèi)存泄露的幾種情況等做了簡要分析介紹,需要的朋友可以看下

1.JavaScript中四種基本數(shù)據(jù)存取位置:字面量,本地變量,數(shù)組元素,對(duì)象成員。

一般來說:[字面量,局部變量]運(yùn)行速度>[數(shù)組,對(duì)象成員]

2.內(nèi)部屬性包含了一個(gè)函數(shù)被創(chuàng)建的作用域中對(duì)象的集合。這個(gè)集合被稱為作用域鏈。

3.執(zhí)行函數(shù)->創(chuàng)建執(zhí)行環(huán)境->創(chuàng)建活動(dòng)對(duì)象(即函數(shù)運(yùn)行時(shí)變量對(duì)象)。

所以多次調(diào)用同一個(gè)函數(shù)會(huì)導(dǎo)致創(chuàng)建多個(gè)執(zhí)行環(huán)境。

4.函數(shù)執(zhí)行過程

每遇到一個(gè)變量都會(huì)經(jīng)歷一次標(biāo)識(shí)符解析過程,從哪里獲取或存儲(chǔ)數(shù)據(jù)。該過程搜索執(zhí)行環(huán)境的作用域鏈。正是這種搜索過程影響了性能。

5.標(biāo)識(shí)符解析的性能

全局變量總是存在于執(zhí)行環(huán)境作用域的最末端。局部變量是第一順位解析。

經(jīng)驗(yàn)法則:如果某個(gè)跨作用域的值在函數(shù)中被引用一次以上,那么就把他存儲(chǔ)到局部變量中。

如:

function initUI(){
 var bd=document.body;
 //后面有多次doucument這個(gè)全局對(duì)象的調(diào)用
}
//->優(yōu)化后
function initUI(){
 var doc=document;
  bd=doc.body;
 //把doucument這個(gè)全局對(duì)象的引用存儲(chǔ)到局部變量doc中
 
}

6.改變作用域鏈

一般來說,一個(gè)執(zhí)行環(huán)境的作用域鏈不會(huì)改變的。

<1>with可以臨時(shí)改變作用域鏈

width用來給對(duì)象的所有屬性創(chuàng)建一個(gè)變量

function initUI(){
 with(document){
 var bd=body; 
 }
}

當(dāng)代碼執(zhí)行到with時(shí),執(zhí)行環(huán)境的作用域鏈被臨時(shí)改變了。一個(gè)新的變量對(duì)象唄創(chuàng)建,它包含了參數(shù)指定對(duì)象的所有屬性。這個(gè)對(duì)象唄推入作用域鏈的首位,所以這時(shí)候所有的局部變量處于的哥第二個(gè)作用域鏈對(duì)象中,因此訪問代價(jià)更高了。

<2>try-catch

try語句發(fā)生錯(cuò)誤的時(shí)候,執(zhí)行過程會(huì)自動(dòng)跳轉(zhuǎn)到catch中。然后把異常對(duì)象推入一個(gè)變量對(duì)象并置于作用域的首位。

注意:一旦catch子語句執(zhí)行完畢,作用域鏈就會(huì)返回到之前的狀態(tài)。

7.閉包引發(fā)的性能問題

閉包是JavaScript最強(qiáng)大的特性之一。

由于閉包包含了執(zhí)行了與環(huán)境作用域鏈相同對(duì)象的引用,函數(shù)的活動(dòng)對(duì)象不會(huì)被銷毀,造成更多的內(nèi)存開銷。

關(guān)注的性能點(diǎn):頻繁訪問跨作用域的標(biāo)識(shí)符時(shí),每次訪問都會(huì)帶來性能損失。

Start:19:41:45 2015-11-21 引用自by Aaron:http://www.cnblogs.com/aaronjs/p/3370176.html

8.內(nèi)存泄露

內(nèi)存泄露是指一塊被分配的內(nèi)存既不能使用,又不能回收,直到瀏覽器進(jìn)程結(jié)束。在C++中,因?yàn)槭鞘謩?dòng)管理內(nèi)存,內(nèi)存泄露是經(jīng)常出現(xiàn)的事情。而現(xiàn)在流行的C#和Java等語言采用了自動(dòng)垃圾回收方法管理內(nèi)存,正常使用的情況下幾乎不會(huì)發(fā)生內(nèi)存泄露。瀏覽器中也是采用自動(dòng)垃圾回收方法管理內(nèi)存,但由于瀏覽器垃圾回收方法有bug,會(huì)產(chǎn)生內(nèi)存泄露。

內(nèi)存泄露的幾種情況

  • 循環(huán)引用
  • Javascript閉包
  • DOM插入順序

一個(gè)DOM對(duì)象被一個(gè)Javascript對(duì)象引用,與此同時(shí)又引用同一個(gè)或其它的Javascript對(duì)象,這個(gè)DOM對(duì)象可能會(huì)引發(fā)內(nèi)存泄漏。這個(gè)DOM對(duì)象的引用將不會(huì)在腳本停止的時(shí)候被垃圾回收器回收。要想破壞循環(huán)引用,引用DOM元素的對(duì)象或DOM對(duì)象的引用需要被賦值為null。

具體的就深入討論了,這里的總結(jié)

  • JS的內(nèi)存泄露,無怪乎就是從DOM中remove了元素,但是依然有變量或者對(duì)象引用了該DOM對(duì)象。然后內(nèi)存中無法刪除。使得瀏覽器的內(nèi)存占用居高不下。這種內(nèi)存占用,隨著瀏覽器的刷新,會(huì)自動(dòng)釋放。
  • 而另外一種情況,就是循環(huán)引用,一個(gè)DOM對(duì)象和JS對(duì)象之間互相引用,這樣造成的情況更嚴(yán)重一些,即使刷新,內(nèi)存也不會(huì)減少。這就是嚴(yán)格意義上說的內(nèi)存泄露了。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • layui實(shí)現(xiàn)圖片虛擬路徑上傳,預(yù)覽和刪除的例子

    layui實(shí)現(xiàn)圖片虛擬路徑上傳,預(yù)覽和刪除的例子

    今天小編就為大家分享一篇layui實(shí)現(xiàn)圖片虛擬路徑上傳,預(yù)覽和刪除的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript?原始包裝類型匯總

    JavaScript?原始包裝類型匯總

    這篇文章主要介紹了JavaScript?原始包裝類型匯總,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • JS拉起或下載app的實(shí)現(xiàn)代碼

    JS拉起或下載app的實(shí)現(xiàn)代碼

    最近做項(xiàng)目遇到這樣的需求,通過手機(jī)網(wǎng)頁判斷是否安裝了自己公司app,如果安裝了則拉起app,沒有安裝則跳轉(zhuǎn)到下載頁。怎么實(shí)現(xiàn)呢?下面小編給大家分享js拉起或下載app的實(shí)現(xiàn)代碼,需要的朋友參考下
    2017-02-02
  • js 鼠標(biāo)事件的抓取

    js 鼠標(biāo)事件的抓取

    鼠標(biāo)事件的抓取實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2010-04-04
  • javascript中直接引用Microsoft的COM生成Word

    javascript中直接引用Microsoft的COM生成Word

    直接引用Microsoft的COM是可以生成Word的,下面為大家介紹下實(shí)現(xiàn)的javascript代碼
    2014-01-01
  • JavaScript?微任務(wù)和宏任務(wù)講解

    JavaScript?微任務(wù)和宏任務(wù)講解

    這篇文章主要分享了JavaScript?微任務(wù)和宏任務(wù)講解,在js中,我們一般將所有的任務(wù)都分成兩類,一種是同步任務(wù),另外一種是異步任務(wù)。而在異步任務(wù)中,又有著更加細(xì)致的分類,那就是微任務(wù)和宏任務(wù),下面來一起學(xué)習(xí)js中的微任務(wù)和宏任務(wù)吧
    2021-12-12
  • js文件包含的幾種方式介紹

    js文件包含的幾種方式介紹

    這篇文章主要介紹了js文件包含的幾種方式,在某些情況下還是比較實(shí)用的,下面以示例代碼的方式來呈現(xiàn)
    2014-09-09
  • 關(guān)于微信小程序?qū)崿F(xiàn)云支付那些事兒

    關(guān)于微信小程序?qū)崿F(xiàn)云支付那些事兒

    我們?cè)谧鲂〕绦蛑Ц断嚓P(guān)的開發(fā)時(shí),總會(huì)遇到這些難題,下面這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)云支付那些事兒,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】

    JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】

    這篇文章主要介紹了JavaScript創(chuàng)建對(duì)象方式,結(jié)合實(shí)例形式總結(jié)分析了工廠模式、構(gòu)造函數(shù)模式、原型模式等各種常見的javascript對(duì)象創(chuàng)建方式與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • 手寫TypeScript?時(shí)很多人常犯的幾個(gè)錯(cuò)誤

    手寫TypeScript?時(shí)很多人常犯的幾個(gè)錯(cuò)誤

    這篇文章主要介紹了手寫TypeScript?時(shí)很多人常犯的幾個(gè)錯(cuò)誤,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的抽卡,重要的朋友可以參考一下
    2022-09-09

最新評(píng)論

汝城县| 阜新市| 手游| 明溪县| 黄梅县| 江华| 鹰潭市| 资溪县| 宜宾县| 泸水县| 凤阳县| 贡山| 通辽市| 米林县| 开江县| 喀什市| 龙门县| 海门市| 新巴尔虎左旗| 平凉市| 峨山| 南召县| 延边| 英德市| 额尔古纳市| 和林格尔县| 乌鲁木齐县| 南川市| 涟源市| 开江县| 临洮县| 邵东县| 南涧| 玉龙| 盐城市| 千阳县| 沁阳市| 平乐县| 怀远县| 安平县| 东宁县|