Welcome to Galaxy Software Services Corporation !
徵才專區
Vital CRM 國際認證
GSS部落格
叡揚資訊
關於叡揚
新聞與活動
產品與服務
叡揚e論壇
投資人關係
ESG專區
EN
中
簡
日
搜尋
關於叡揚
叡揚簡介
創辦人的話
叡揚大事紀
得獎肯定
合作夥伴
營業據點
聯絡我們
新聞與活動
新聞中心
資安電子報
影音專區
成功案例
行銷活動
產品與服務
企業e化應用軟體
S.P.E.E.D. 公文線上簽核管理系統
Radar 睿達人力資源管理系統
iota C.ai 對話服務平台
Tracko 多源智慧追蹤平台
B.E.S.T. 銀行信用風險資訊解決方案
BoDms 董事會提案暨會務管理系統
Vitals ESP 企業知識協作平台
Vitals HCA 評鑑協同管理系統
Vitals HAS 醫療數據分析系統
Vitals KPIM 指標管理系統
Openfind 網擎訊息安全解決方案
資訊安全
資訊安全全系列產品
行動應用程式安全專區
Checkmarx 源碼安全檢測
Digital.ai APP & Web 防護
Digital.ai APP & Web 相容性功能驗測
Illumio 零信任網路微分段
Orca Security 雲端原生應用程式防護平台
Azul 安全高效 Java JDK
Mend.io Open Source 檢測
HCL 網頁應用程式弱點掃描軟體
Quokka APP 黑箱檢測
Secure Code Warrior 安全開發培訓平台
資安檢測服務
資安學程
資安白皮書
資安電子報
企業數位化智慧維運
企業數位化智慧維運
Axway API 管理平台
Axway ST 集中檔案傳輸管理
AVC 應用程式弱點整合平台
BMC Control-M 批次管理解決方案
BMC Helix Discovery & AISM 探索打造企業IT智慧管理平台
Dynatrace AI智慧維運與效能管理
DMP 數據治理平台
Rocket® Data Intelligence 數據血緣平台
Akamai API Security 安全平台
Servicenow ITSM一站式IT服務管理平台
TIBCO 智能化資料平台
RPA 機器人流程自動化
Automation Anywhere 業務流程自動化RPA平台
UiPath 機器人流程自動化平台
Woodpecker XVR 次世代資安可視性解決方案
資源中心
雲端與大數據服務
Vital NetZero 零碳雲
Vital CMP 驗證管理
Vital CRM 客戶關係管理
Vital BizForm 雲端智慧表單
Vital Knowledge 協同知識管理
Vital Finance 財務會計管理
Vital OD 雲端公文管理
Vital HCM 雲端人力資源管理
大數據分析解決方案
運帷服務
資訊系統維運與開發服務
QuEye CIA 軟體變更衝擊分析器
AI 解決方案
AI 解決方案介紹
AI 財務報表辨識系統
AI 智慧公文解決方案
AI 知識管理智能生成
政府共同供應契約
ESG解決方案
叡揚e論壇
叡揚e論壇
叡揚真心話
投資人關係
股東專區
重大訊息
主要股東
股東會
歷年股利
股利政策
法人說明會
聯繫窗口
公開資訊觀測站
公司治理
營運團隊
公司治理
董事會
功能性委員會
誠信經營
風險管理
智慧財產管理計畫
利害關係人與溝通
公司重要內規
ESG專區
財務資訊
每月營收資訊
財務報告
ESG專區
EN
中
簡
日
搜尋
徵才專區
Vital CRM 國際認證
GSS部落格
選單
首頁
分類
標籤
選擇分類
園丁來閒聊
工具平台
專案管理
資料庫
經驗分享
測試
設計
效能調校
程式語言
|_
.NET MVC
|_
.NET
|_
Java
|_
C#
|_
Python
|_
TypeScript
|_
VB.NET
園丁
資訊安全
開發工法
作業系統
前端
搜尋
訂閱文章
取消訂閱文章
設置
登入
帳號
密碼
記住我
登入
忘記帳號
重置密碼
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
5 分鐘閱讀時間
(936 個字)
字體大小:
+
–
訂閱
取消訂閱
Angular # 11 - 深入淺出 Angular [3]
程式語言
前端
2021/07/01, 週四
1669 點擊
0 評論
Angular 的渲染流程
Bootstrap - 當
頁面載入
時,馬上就會啟動 Bootstrap 的流程:
Bootstrap 究竟是怎麼達成的呢?Angular CLI 在這個部份主要是透過
WebPack
Webpack 主要會將所有的 javascript 打包並在 index.html 的最下方引用
接著是開始載入 App Module
App Module 中列出的相依都會被解析、Bootstrap
這其中又以
BrowserModule
會優先被載入
再來會載入第一個 Component, 也就是
AppComponent
此時所有已經需要呈現的的子 Component 也會被載入
model 的綁定與事件監聽也是在這個時候建立的
這個步驟執行完之後,User 就可以開始跟 Angular App 互動了
隨著 User 的互動會觸發不同的生命週期
不需要的 Component 會被
移除
需要的 Component 會被載入並渲染(e.g. Routing 後要載入新的 Component)
Compiler 的種類
Angular 用到的 compiler 主要分為兩種
JiT
(Just-in-Time)
指的是
編譯
會在瀏覽器載入所有的 assets
後
才開始
有時候會造成一些時間差,讓元件的最終面貌要花一點時間載入
此外,JiT 還要花時間載入編譯器
AoT
(Ahead-of-Time)
與 JiT 不同,是先把內容都編譯過,才送去給瀏覽器
也正因為如此,User 可以馬上看到內容,不用等
此外,AoT 還可以針對效能上作很多的優化(Optimization)
開發時期主要都會用 JiT,因為可以馬上看到結果
部署時期主要會用 AoT(以後會詳談,有很多東西可以調整)
相依注入
(Dependency Injection)
相依注入其實是一種 Pattern,將所有的實例管理在一個 registry,需要的時候再拿,而在 Angular 當中有兩個要素扮演著 DI 中的重要角色
injector
我們很少會
直接
用到 injector,它的職責是註冊及請求 service
透過建構子注入的時候,背後偷偷做事的就是 injector
providers
當 injector 請求某個 service 時,實際建立 instance 的就是 provider
它會透過某個 factory function 來產生並回傳實例
NgModule 的
providers
陣列中有列到的 Service 都可以被建立並注入
Service 不見得一定要加在 app.module.ts 的 Provider 陣列中,也可以針對某個單一 Component,或是整個 Component Tree(之後會再詳談)
除了先前範例中的注入之外,也許你會看到另一種使用方式:
constructor(private @Inject(HttpClient) http) {}
透過
Inject
這個 Decorator 來注入 HttpClient
我個人是比較偏向原本的寫法
異動偵測
(Change Detection)
簡單來說,Change Detection 就是讓
資料
與渲染出的 view
同步
的一個機制
異動永遠是從 model 開始,接著影響到 view
Angular 會從父 Component 開始一路檢查 子 Component 是否需因異動而同步,這個方向是由上往下的
單一方向
,以確保父子之間的關聯都正確被同步了
看似很耗效能,但 Angular 可以在
幾毫秒
內完成,為了達到這樣的效能,Angular 產了一個 change detector,管理著各個 Component 的資料,及每次異動間的差異
Change Detection 有兩種模式被觸發
預設是走
traverse mode
,就是從 root 開始檢查是不是有異動
另一種是
OnPush mode
,可以針對
特定
父 Component 傳入子 Component 的 @Input 作處理,只要自己的父 Component 沒異動就跳過
實際上,異動會發生在各種
事件
(e.g. click, mousemove,...),收到 HTTP response,或是 timer/interval 的 callback
總而言之,就是
任何非同步
的事發生時,就是 Change Detection 啟動的時機,因為
同步
的事都在 Angular 正常的渲染過程中處理完了
Change Detection 是一個很重要的機制,你可以想像成汽車發動後,等待的就是打檔,踩油門、煞車…等。發動前的都是已經同步處理的,發動後的都是一個個的事件決定如何影響各個 Component
小結
Angular 不少複雜的機制在這邊被淺談了
大部份的東西即使不了解細部也可以寫出好的 Angular App
如果真的想了解,後面的篇章也會針對某些議題作深入探討
你覺得這篇文章怎麽樣?
開心
(
0
)
喜愛
(
0
)
驚奇
(
0
)
悲傷
(
0
)
生氣
(
0
)
標籤:
2021部落格鐵人賽
Angular #12 - 深入淺出 Angular [4]
Angular # 10 - 深入淺出 Angular [2]
相關文章
Spring Framework 使用 Jasypt 加密 config 檔案
Java
React Context
前端
PWA - 簡介與使用情境
前端
PWA - Service Worker Register
前端
Angular #4 - Services 與 Components[1]
前端
Angular # 10 - 深入淺出 Angular [2]
前端
評論
尚無評論
已經注冊了?
這裡登入
Guest
2025/04/25, 週五
Captcha 圖像
提交您的評論