站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        淺析Angular中的Change Detection機(jī)制

        淺析Angular中的Change Detection機(jī)制

        前端(vue)入門(mén)到精通課程,老師在線(xiàn)輔導(dǎo):聯(lián)系老師
        Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

        什么是 Change Detection ?

        在應(yīng)用的開(kāi)發(fā)過(guò)程中,state 代表需要顯示在應(yīng)用上的數(shù)據(jù)。當(dāng) state 發(fā)生變化時(shí),往往需要一種機(jī)制來(lái)檢測(cè)變化的 state 并隨之更新對(duì)應(yīng)的界面。這個(gè)機(jī)制就叫做 Change Detection 機(jī)制。【相關(guān)教程推薦:《angular教程》】

        在 WEB 開(kāi)發(fā)中,更新應(yīng)用界面其實(shí)就是對(duì) DOM 樹(shù)進(jìn)行修改。由于 DOM 操作是昂貴的,所以一個(gè)效率低下的 Change Detection 會(huì)讓?xiě)?yīng)用的性能變得很差。因此,框架在實(shí)現(xiàn) Change Detection 機(jī)制上的高效與否,很大程度上決定了其性能的好壞。

        Change Detection 是如何實(shí)現(xiàn)的

        Angular 可以檢測(cè)組件數(shù)據(jù)何時(shí)更改,然后自動(dòng)重新渲染視圖以反映該更改。但是在像點(diǎn)擊按鈕這樣的低級(jí)事件之后,它怎么能做到這一點(diǎn)呢?

        通過(guò) Zone , Angular 能夠?qū)崿F(xiàn)自動(dòng)的觸發(fā) Change Detection 機(jī)制

        Zone 是什么呢?簡(jiǎn)而言之,Zone 是一個(gè)執(zhí)行上下文(execution context),可以理解為一個(gè)執(zhí)行環(huán)境。與常見(jiàn)的瀏覽器執(zhí)行環(huán)境不同,在這個(gè)環(huán)節(jié)中執(zhí)行的所有異步任務(wù)都被稱(chēng)為 Task ,Zone 為這些 Task 提供了一堆的鉤子(hook),使得開(kāi)發(fā)者可以很輕松的「監(jiān)控」環(huán)境中所有的異步任務(wù)。

        題外話(huà):由于 Angular 極力的推崇使用可觀察對(duì)象(Observable),如果完全的基于 Observable 來(lái)開(kāi)發(fā)應(yīng)用,可以代替 Zone 來(lái)實(shí)現(xiàn)追蹤調(diào)用棧的功能,且性能還比使用 Zone 會(huì)稍好一些。

          // Angular 在 v5.0.0-beta.8 起可以通過(guò)配置不使用 Zone    import { platformBrowser } from '@angular/platform-browser';   platformBrowser().bootstrapModuleFactory(AppModuleNgFactory, { ngZone: 'noop' });
        登錄后復(fù)制

        覆蓋瀏覽器默認(rèn)機(jī)制

        Angular 在啟動(dòng)時(shí)會(huì)重寫(xiě)瀏覽器 low-level API,例如addEventListener,它是用于注冊(cè)所有瀏覽器事件的瀏覽器函數(shù),包括點(diǎn)擊處理。Angular 將替換addEventListener為與此等效的新版本:

        // this is the new version of addEventListener                                     function addEventListener(eventName, callback) {      // call the real addEventListener                     callRealAddEventListener(eventName, function() {          //first call the original callback                       callback(...);         // and then run Angular-specific functionality         var changed = angular.runChangeDetection();         if (changed) {             angular.reRenderUIPart();         }     }); }
        登錄后復(fù)制

        新的addEventListener為任何事件處理程序添加了

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 欧美日韩精品| 麻豆国内精品久久久久久 | 无码人妻精品一区二区三区久久久| 久久免费精品视频| 欧洲精品99毛片免费高清观看| 国产精品小视频免费无限app| 精品一区二区久久| 国产精品特级毛片一区二区三区| 夜夜爽一区二区三区精品| 精品国产一区二区22| 亚洲综合精品香蕉久久网97| 18国产精品白浆在线观看免费| 日产精品久久久久久久| 亚洲欧洲精品成人久久曰影片| 精品久人妻去按摩店被黑人按中出 | 无码国产亚洲日韩国精品视频一区二区三区 | 97精品国产手机| 精品国产三级a∨在线| 亚洲2022国产成人精品无码区 | 久久亚洲国产精品五月天婷| 国产一区二区三精品久久久无广告| 亚洲精品天天影视综合网| 精品国产自在在线在线观看| 国产精品专区第二| 华人亚洲欧美精品国产| 国产精品素人搭讪在线播放| 97久久精品国产精品青草| 国产成人精品优优av| 国产成人精品无码免费看| 国产精品午睡沙发系列| 国精品午夜福利视频不卡| 精品乱码一区二区三区四区| 精品久久久久中文字幕日本| 久久精品天天中文字幕人妻| 亚洲AV永久无码精品成人| 自拍中文精品无码| 亚洲国产精品无码专区影院| 中文字幕精品一区二区三区视频| 中文字幕日本精品一区二区三区| 亚洲AV无码久久精品蜜桃| 青青草原精品99久久精品66|