Flutter是Google打造的高性能、跨平臺的UI框架。它能夠給開發者提供簡單、高效的方式來構建和部署跨平臺、高性能移動應用;給用戶提供漂亮、無平臺區分的app體驗。 Flutter是如何作到這一點的呢?它的框架結構是怎麼樣的呢?接下來,我將寫一系列的文章分析Flutter的框架層,結合源碼分析Flutter框架所採用的各類黑科技。本文是這個系列文章的第一篇,主要介紹Flutter框架的總覽。編程
Flutter被設計成一個可擴展,分層的系統。它包含了一系列依賴其下層的獨立庫。其示意圖見下圖.markdown
其中,framework層中的每個組件均是可選的和能夠代替的。從上圖可知,Flutter系統總共能夠分爲三層。上層的框架(Framework),中層的引擎(Engine),以及底層的嵌入層(Embedder)。架構
其中,Framework是咱們這一系列文章主要關注的部分。從下到上,其主要包括:app
市面上有不少對比不一樣跨平臺技術的文章,例如Flutter實戰中的移動開發技術簡介。本文以表格形式簡單介紹一下不一樣跨平臺技術的特色和優劣勢等,而後說明一下flutter性能能媲美原生應用的緣由。 目前市面上主要有H5+原生,JavaScript+原生渲染,自繪UI+原生。三種跨平臺技術,其對比結果以下。框架
技術類型 | UI渲染方式 | 性能 | 開發效率 | 動態化 | 框架表明 |
---|---|---|---|---|---|
H5+原生 | WebView渲染 | 通常 | 高 | 支持 | Cordova、Ionic |
JavaScript+原生渲染 | 原生控件渲染 | 好 | 高 | 支持 | RN、Weex |
自繪UI+原生 | 自帶引擎渲染 | 很是好 | Flutter高, QT低 | 默認不支持 | QT、Flutter |
由圖可見,Flutter最大的優點,是其出色的性能。根據Google官方的宣傳,其性能是能夠媲美原生的。這一點咱們能夠經過如下結構示意圖看出來。源碼分析
原生應用是由其框架直接經過Skia調用GPU進行繪製,可是RN等JavaScript+原生渲染跨平臺技術是須要由其框架先調用原生框架,再經過原生框架調用Skia,最後調用至GPU進行繪製的。所以,其調用步驟上相對於原生多了一層,理論上其繪製性能將比原生差。 可是Flutter則不一樣,因爲其應用也是由Flutter框架直接經過Skia調用GPU進行繪製,所以只要其框架的性能能媲美原生框架的性能,則其繪製性能就能夠媲美原生。不只如此,因爲Skia是Flutter自帶的,其升級很是方便,而Android系統相對而言升級比較緩慢,所以若是Flutter使用了更高性能的Skia庫,其繪製性能甚至可能超過原生。佈局
本文主要介紹了Flutter框架體系,其中重點介紹了Flutter的Framework層結構。以後對比了Flutter和其餘跨平臺技術,並經過它們繪製原理的對比分析,解釋了Flutter性能能夠媲美原生應用的緣由。post
Flutter框架分析(二)-- Widget
Flutter框架分析(三)-- Element
Flutter框架分析(四)-RenderObject
Flutter框架分析(五)-Widget,Element,RenderObject樹
Flutter框架分析(六)-Constraint
Flutter框架分析(七)-relayoutBoundary
Flutter框架分析(八)-Platform Channel
Flutter框架分析- Parent Data
Flutter框架分析 -InheritedWidget性能