作者什么來頭
渠宏偉,騰訊前端開發(fā)高級工程師程储。
小程序特點
類Web章鲤,不是HTML5
即用即走,隨手可得
擁有離線能力
基于微信跨平臺
媲美原生操作體驗
為什么那么快
Page Frame
Native預先加載一個WebView
當打開指定頁面時帚呼,無需加載額外資源直接渲染
返回顯示歷史View
退出小程序,View狀態(tài)不銷毀
小程序入口
掃碼進入
搜索(模糊)
發(fā)現>小程序
小程序發(fā)送到桌面(Android)
小程序架構
交互通過系統(tǒng)層的JSBridge進行眷蜈,當用戶進行操作觸發(fā)了事件沈自,通過JSBridge通知邏輯層枯途,邏輯層執(zhí)行對應邏輯并把數據通過JSBridge傳遞給視圖層,視圖層執(zhí)行相應的操作酪夷。
小程序初始化時晚岭,先從微信的CDN下載小程序的完整的包,然后在微信內部進行解包初始化辅甥。
小程序視圖層
WXML(WeiXin Markup Language)
支持數據綁定
支持邏輯算術燎竖、運算
支持模板构回、引用
支持添加事件
WXML先被編譯成JS文件疏咐,引入數據后會初始完成虛擬DOM,最終把虛擬DOM構建成DOM樹借跪,在WebView中渲染酌壕。
WXSS(WeiXin Style Sheets)
支持大部分CSS特性
添加尺寸單位rpx卵牍,可根據屏幕寬度自適應
使用@import語句可以導入外聯(lián)樣式表
不支持多層選擇器,避免被組件內結構破壞
WXSS被編譯成JS運行辛掠。常用選擇器、組件回挽,略過欠气。
小程序的組件基于Web Component標準,使用Polymer框架實現Web Component队塘。Polymer框架是Google提出的宜鸯,但在使用過程中發(fā)現其性能較低淋袖,所以微信自研了一套。
Native組件層在WebView層之上焰情。
小程序邏輯層
邏輯層講數據進行處理后發(fā)送給視圖層剥懒,同時接受視圖層的事件反饋。
App()小程序的入口验游;Page()頁面的入口
提供豐富的API保檐,如微信用戶數據,掃一掃垒在,支付等微信特有能力
每個頁面有獨立的作用域扔亥,并提供模塊化能力
數據綁定,事件分發(fā)推盛,生命周期管理谦铃,路由管理
運行環(huán)境:iOS-JSCore、Android-X5 JS解析器瘪菌、DevTool-nwjs Chrome內核
邏輯層生命周期
用戶從微信打開一個小程序的執(zhí)行過程:
Native執(zhí)行一個拉起的操作师妙,告訴App Service層
App Service層執(zhí)行拉起,同時通知View層進行初始化
接下來要打開頁面怔檩,通過路由通知App Service層
App Service層創(chuàng)建一個Page蓄诽,然后通知Web層初始化仑氛,同時通知View層渲染并發(fā)送初始化數據
App Service層的Page會進行onLoad、onShow事件的執(zhí)行锯岖,渲染完成onReady
當用戶進行操作時出吹,就出發(fā)一次用戶事件,用戶事件會通知到App
Service層并在此層執(zhí)行赃额,然后通知View層進行局部渲染叫确,這樣就完成了一次交互芍锦。
New View是在Web View初始化完成之后建立的娄琉,用于等待用戶執(zhí)行下一個界面時使用,減少Web View創(chuàng)建的花銷孽水,用戶不需要等待了女气。App Service層的New Page也是同理。
小程序可以借鑒的優(yōu)點
提前新建Web View缘滥,準備新頁面渲染
View層和邏輯層分離,通過數據驅動赃阀,不直接操作DOM
使用Virtual DOM擎颖,進行局部更新
全部使用https,確保傳輸過程中安全
前端組件化開發(fā)
加入rpx單位肖抱,隔離設備尺寸异旧,方便開發(fā)
小程序存在的問題
小程序仍然使用WebView渲染吮蛹,并非原生渲染
需要獨立開發(fā),不能再非微信環(huán)境運行
開發(fā)者不可以擴展新組件
服務端口返回的頭無法執(zhí)行术荤,如Set-Cookie
以來瀏覽器環(huán)境的js庫不能使用每篷,因為是JSCore執(zhí)行的,沒有window子库、document對象
WXSS中無法使用本地(圖片矗晃、字體等)
WXSS轉化成js而不是css,為了兼容rpx
WXSS不支持級聯(lián)選擇器
小程序無法打開頁面张症,無法拉起APP
脫離微信的“小程序”:PWA漸進式應用
優(yōu)點:
漸進增強:支持的新特性的瀏覽器獲得更好的體驗俗他,不支持的保持原來的體驗
離線訪問:通過Service Workers可以再離線或者網速差的環(huán)境下工作
類原生應用:使用app shell model做到原生應用般的體驗
可安裝:允許用戶保留對他們有用的應用在主屏幕上,不需要通過應用商店
容易分享:通過URL可以輕松分享應用
持續(xù)更新:受益于service worker的更新進行地沮,應用能夠始終保持更新
安全:可通過https來提供服務來防止網絡窺探,保證內容不被篡改
可搜索:得益于W3C manifests元數據和service worker的等級周伦,讓搜索引擎能夠找到wen應用
再次訪問:通過消息推送等特性讓用戶再次訪問變得容易