精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

微信小程序基礎架構淺析

開發 開發工具
微信小程序,簡稱小程序,英文 mini program。是一種不需要下載安裝即可在微信中使用的應用,用戶掃描小程序碼或搜索小程序即可打開,觸手可及,用完即走,不用關心是否安裝太多應用的問題。

[[404955]]

 微信小程序,簡稱小程序,英文 mini program。是一種不需要下載安裝即可在微信中使用的應用,用戶掃描小程序碼或搜索小程序即可打開,觸手可及,用完即走,不用關心是否安裝太多應用的問題。

小程序技術演進

內部開放微信原生能力

使用 WeixinJSBridge 預覽圖片

此類 API 最初是提供給騰訊內部一些業務使用,很多外部開發者發現了之后,依葫蘆畫瓢地使用了,逐漸成為微信中網頁開發的事實標準。

JS-SDK 發布

2015 年初,微信發布了一整套網頁開發工具包,稱之為 JS-SDK,開放了拍攝、錄音、語音識別、二維碼、地圖、支付、分享、卡券等幾十個 API。讓所有開發者都可以使用到微信的原生能力。

使用 JS-SDK 調用圖片預覽組件

JS-SDK 解決了移動網頁使用微信能力不足的問題,通過暴露微信的接口使得 Web 開發者能夠擁有更多的能力,然而在更多的能力之外,JS-SDK 的模式并沒有解決使用移動網頁遇到的體驗不良的問題。

JS-SDK 的不足

用戶在訪問網頁的時候,在瀏覽器開始顯示之前都會有一個白屏的過程,在移動端,受限于設備性能和網絡速度,白屏會更加明顯。除了白屏,影響 Web 體驗的問題還有缺少操作的反饋,主要表現在兩個方面:頁面切換的生硬和點擊的遲滯感。

加載白屏,切換不流暢

此外一些開發者會使用 JS-SDK 做一些,比如假紅包,偽造的官方活動等。并利用 JS-SDK 的分享能力變相的去裂變分享到各個群或者朋友圈,由于 JS-SDK 是根據域名來賦予 api 權限的,運營人員封了一個域名后,他們立馬用別的域名又繼續做壞,要知道注冊一個新的域名的成本是很低的。

那么小程序是通過怎樣的設計來改進 JS-SDK 的體驗和管控上的不足?

小程序雙線程架構

具體實現上小程序采用了類 web + 離線包的形式。開發上與 web 類似,門檻較低,開發效率較高。離線下載和頁面預渲染功能增強了用戶體驗,提升了加載速度,解決了 JS-SDK 加載白屏的問題 1。小程序提供了云端更新離線包的功能,可動態更新頁面,相對于 app 的更新和發布更為靈活。此外,小程序在離線包的基礎上對切換動畫進行優化,降低了切換頁面導致的遲滯感,緩解了切換不流暢的問題 2。

小程序web+離線包模式

小程序在架構方面最大的特點是采用了雙線程的開發模式,隔離了 JS 邏輯和 UI 渲染。小程序的渲染層和邏輯層分別由 2 個線程管理:渲染層的界面使用了 WebView 進行渲染,邏輯層采用 JsCore 線程運行 JS 腳本。

邏輯層:創建一個單獨的線程去執行 JavaScript,在這個環境下執行的都是有關小程序業務邏輯的代碼;

渲染層:界面渲染相關的任務全都在 WebView 線程里執行,通過邏輯層代碼去控制渲染哪些界面。一個小程序存在多個界面,所以渲染層存在多個 WebView 線程;

通信:這兩個線程的通信會經由微信客戶端(下文中也會采用 Native 來代指微信客戶端)做中轉,邏輯層發送網絡請求也經由 Native 轉發,小程序的通信模型下圖所示。

小程序雙線程架構

JS 邏輯層運行在 JSCore 中,并沒有一個完整瀏覽器對象,因而缺少相關的 DOM API 和 BOM API,無法操作頁面元素,能達到管控的目的,但也限制了開發者的權限:

  • 不允許開發者把頁面跳轉到其他在線網頁
  • 不允許開發者直接訪問 DOM
  • 不允許開發者隨意使用 window 上的某些未知的可能有危險的 API

這樣的邏輯層與 UI 層的隔離,加上小程序的審核和舉報機制,使得微信加強對小程序的管控,解決了問題 3。但這也使得開發者無法靈活的進行頁面渲染。

小程序頁面渲染

上面已經說了邏輯層無法操作 DOM 變更,那小程序是如何進行頁面的渲染呢?小程序基于數據驅動的架構模式,基于 Virtual Dom(React 引入,真實 DOM 的一種 JS 描述方式)的概念,業務側只需要改變數據即可引起界面變化。其中渲染層提供了帶有數據綁定語法的 WXML,邏輯層提供了setData 等等 API,開發者需要進行界面變化時,只需要通過在邏輯層執行 setData 把變化的數據通過 Native 層傳遞到渲染層,小程序會進行 Dom Diff(DOM 結構對比并進行最小化變更的算法)等流程,最后把正確的結果更新在 Dom 樹上。

小程序Virtual DOM渲染

完整的通信流程大致如下:

  1. 邏輯層調用宿主環境的 setData 方法。
  2. 邏輯層將待傳輸數據轉換成字符串,并拼接到特定的 JS 腳本,最后將數據傳輸到渲染層。
  3. 渲染層接收到后,WebView JS 線程會對腳本進行編譯,得到待更新數據后進入渲染隊列,等待 WebView 線程空閑時進行頁面渲染。
  4. WebView 線程開始執行渲染時,待更新數據會合并到視圖層保留的原始 data 數據,并將新數據套用在 WXML 片段中得到新的虛擬節點樹。經過新虛擬節點樹與當前節點樹的 diff 對比,將差異部分更新到 UI 視圖。同時將新的節點樹替換舊節點樹,用于下一次重渲染。

小程序方案與 React Native 對比

那么小程序與現有的混合開發技術類型的異同點在哪?尤其是與 React Native 的區別,小程序技術架構為什么沒有使用 React Native?

混合開發技術類型

現有的混合開發類型,基于 UI 渲染的分類來看,主要有兩類:

  1. 基于 WebView UI 的基礎方案。市面上主流,例如微信 JS-SDK,通過 JSBridge 完成 H5 和 Native 的雙向通訊,從而賦予 H5 一定的原生能力。
  2. 基于 Native UI 的方案,例如 React-Native、Weex、Flutter 等。在賦予 H5 原生 API 能力的基礎上,進一步通過 JSBridge 將 JS 解析成虛擬 DOM 傳遞到 Native,并使用原生渲染。

小程序也屬于類型 1,本次我們主要以類型 2 中的 React Native 作為對比分析。

React Native 技術架構

框架

React Native 框架主要有三層:

  • JS 層:該層提供了各種供開發者使用的組件以及一些工具庫(事件分發等)。
  • C++層:主要處理 java/OC 與 JS 的通信(JSBridge)以及執行 JavaScript(JS 腳本引擎)。
  • Native 層(Object C/Java 層):主要包括 UI 渲染器、網絡通信等工具庫。根據不同操作系統有不同的實現。

UI 渲染

React Native 基于 react 框架(Virtual Dom)來進行 UI 渲染,具體的流程大致如下:

  1. 首先 JS 層通過 JSX 編寫的 Virtual Dom 來構建 Component
  2. Native 層將其轉成真實 DOM 插入到原生 App 的頁面中。
  3. 當有變更,通過 diff 算法生成差異對象
  4. 最終由 Native 層將差異對象應用到原生 App 的頁面元素上。

通信

React Native 基于 JSCore 實現 js 與 java/oc 交互,具體流程大致如下:

  1. 把 JSX 代碼解析成 javaScript 代碼
  2. 讀取 JS 文件,并利用利用 JS 腳本引擎執行
  3. 返回一個數組,數組中會描述 OC/Java 對象,描述對象屬性和所需要執行的方法,這樣就能讓這個對象設置屬性,并且調用方法。

Reactive Native架構

React Native 優缺點

優勢

  • 原生渲染,性能更好,用戶體驗較好;
  • React 生態較好,對前端開發友好;
  • hybrid 技術跨平臺開發,成本及難度低于原生;
  • 可熱更新,能夠方便迭代。

劣勢

  • 支持的樣式是 CSS 的子集,會滿足不了 Web 開發者日漸增長的需求;
  • 現有能力下還存在的一些不穩定問題,比如性能、Bug 等;
  • 把渲染工作全都交由客戶端原生渲染,會有更接近原生的體驗,但實際上一些簡單的界面元素使用 Web 技術渲染完全能勝任;
  • React Native 之前爆出了一個開源協議問題(Facebook BSD+Patents ,大致內容是使用基于 Facebook BSD+Patents 協議的開源項目的開發者,未來要是因為專利問題與 Facebook 產生糾紛,那么 Facebook 將有權停止你使用該開源項目),這對于之后也是存在隱患的。

小程序不選擇 React Native 原因

據小程序開發人員告知的原因如下:

  • React Native 只支持 CSS 的子集,作為一個開放的生態,需要告知開發者哪些 CSS 屬性能用,哪些不能用,這樣的開發體驗較差;(對應上面的劣勢 1)
  • React Native 本身存在一些問題,這些依賴 RN 的修復,同時這樣就變成太過依賴客戶端發版本去解決開發者那邊的 Bug,修復周期太長。(對應上面的劣勢 2)
  • React Native 前陣子還搞出了一個開源協議問題,來說也是存在隱患的。(對應上面的劣勢 4)

小程序與 React Native 相同點

  • 都具有 hybrid 技術的優點:接近原生的體驗,跨平臺開發
  • 使用 Web 相關技術框架來編寫業務代碼,React Native 為 React 框架,小程序為小程序開發框架。
  • 各自實現了跨語言通訊方案完成 Native(Java/Objective-c/…)端與 JavaScript(小程序中為渲染層和邏輯層)的通訊

小程序與 React Native 不同點

小程序使用瀏覽器內核 WebView 來渲染界面(小部分原生組件由客戶端參與渲染),界面主要由成熟的 Web 技術渲染,輔之大量的接口提供豐富的客戶端原生能力,而 React Native 是客戶端原生渲染。理論上 React Native 相對于 WebView 的性能更好,但小程序的類 web 開發對開發來說入門相對簡單,像是一種開發效率與性能的雙刃劍。

小程序開發注意事項

基于上面的架構分析,我們在開發中需要注意是:

  1. 避免使用操作操作 DOM 的 npm 包。由于邏輯層和渲染層隔離,邏輯層無法操作 DOM/BOM API,所以需要使用 DOM/BOM API 相關的 npm 包和庫中不可使用。
  2. 避免頻繁調用setData。由于setData中的數據不僅需要通過 Native 層傳遞到渲染層,通過 DOM diff 算法等渲染成最終頁面,所以需要盡量減少setData的使用以避免性能問題。
  3. 避免setData傳遞大量的新數據。數據的傳輸會經歷跨線程傳輸和腳本編譯的過程,當數據量過大,會增加腳本編譯的執行時間,占用 WebView JS 線程,從而影響到最終的渲染性能。

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-06-09 10:40:00

微信小程序架構分析

2017-06-09 12:58:20

微信小程序架構分析

2017-06-09 10:06:54

微信小程序架構分析

2017-05-08 15:03:07

微信小程序開發實戰

2016-11-04 10:47:27

微信小程序

2016-10-20 21:02:12

微信小程序javascript

2017-01-09 10:01:49

微信小程序

2016-09-28 18:10:59

微信程序MINA

2016-11-04 10:31:49

微信程序指南

2016-11-22 11:23:52

微信小程序騰訊微信

2016-09-27 15:40:58

微信程序前端

2016-11-04 10:49:48

微信小程序

2016-09-27 16:38:24

JavaScript微信Web

2016-11-19 18:06:44

微信小程序張小龍

2017-06-27 10:53:32

2016-09-27 20:36:23

微信HttpWeb

2018-07-26 15:16:50

小程序iPhone X甜酸

2017-02-06 13:32:12

微信小程序思想

2013-07-25 09:49:03

微信宕機IT基礎架構

2016-11-04 09:55:16

微信小程序
點贊
收藏

51CTO技術棧公眾號

亚洲一区精品视频| 国产福利精品视频| 中文字幕a在线观看| 忘忧草在线影院两性视频| 91天堂素人约啪| 国产精品日韩av| 久久久久久久久97| 九热爱视频精品视频| 欧美精选一区二区| 日韩精品一区在线视频| 国产福利在线观看| 国产a级毛片一区| 国产精品成人免费电影| 国内偷拍精品视频| 神马影视一区二区| 精品国产乱码久久久久久夜甘婷婷| 18禁免费无码无遮挡不卡网站| 在线观看完整版免费| 成人爽a毛片一区二区免费| 国产精品18久久久久久麻辣| 久久精品国产av一区二区三区| 精品国产一区二区三区四区 | 国产91久久精品一区二区| 欧美老人xxxx18| 91精品91久久久中77777老牛 | 欧美日韩国产成人在线观看| av网站免费在线看| 久久悠悠精品综合网| 欧美丰满一区二区免费视频| 国产熟女高潮视频| 激情网站在线| 亚洲欧美国产三级| 日韩一二三区不卡在线视频| 天堂网在线资源| 国产乱理伦片在线观看夜一区 | 国产男人搡女人免费视频| 在线观看视频日韩| 九九视频这里只有精品 | 日韩欧美一区免费| 亚洲欧美日韩高清| 亚洲熟女一区二区| 91精品国产自产精品男人的天堂| 8v天堂国产在线一区二区| 熟妇人妻无乱码中文字幕真矢织江| 久草在线新免费首页资源站| 尤物av一区二区| 久久av喷吹av高潮av| h网站在线免费观看| 久久久精品免费免费| 黄色91av| 亚洲欧美综合一区二区| 国产成人丝袜美腿| av一区二区三区在线观看| 国产高潮在线观看| 国产酒店精品激情| 亚洲在线观看视频| 99精品在线看| 国产乱码精品1区2区3区| 91欧美激情另类亚洲| 国产伦精品一区二区三区免.费| 奇米综合一区二区三区精品视频| 国产www精品| 国产黄色免费视频| 日日夜夜免费精品| 国产精品久久久久久久久久尿| 无码人妻丰满熟妇区五十路| 日韩av一区二区三区四区| 国产成人精品优优av| 亚洲av无码精品一区二区| 久久精品人人做人人爽电影蜜月| 日本中文字幕成人| 在线播放一级片| 国内欧美视频一区二区| 999热视频| 亚洲欧美一区二区三| 国产午夜精品美女毛片视频| 亚洲黄色一区二区三区| 在线免费av导航| 亚洲sss视频在线视频| 97视频在线免费播放| 成人福利片在线| 日韩欧美123| 中文字幕在线观看的网站| 精品欧美久久| 欧美成人午夜影院| 日韩在线视频免费播放| 久久狠狠婷婷| 亚洲专区在线视频| 午夜影院在线视频| 国产精品美女视频| 精品丰满人妻无套内射| 日韩在线免费| 日韩一级二级三级精品视频| 欧美熟妇精品黑人巨大一二三区| 日韩免费在线| 高清欧美性猛交| 久久久久久av无码免费看大片| 国产一区二区三区四区在线观看| 国产专区一区二区| 成年网站在线| 午夜精品福利在线| 午夜免费福利在线| baoyu135国产精品免费| 国产一区二区三区在线| 久草成人在线视频| 免费欧美日韩国产三级电影| julia一区二区中文久久94| 日本一级在线观看| 一区二区三区影院| 色播五月综合网| 欧美精品中文| 久久久精品中文字幕| √资源天堂中文在线| 国产一区二区h| 日韩精品国内| 三级中文字幕在线观看| 亚洲视频免费播放| 欧美黄色a视频| 精品91自产拍在线观看一区| 日韩福利在线视频| 黑人一区二区| 成人免费网站在线| 免费毛片在线| 亚洲国产精品人人做人人爽| 538任你躁在线精品免费| 日韩高清影视在线观看| 精品自在线视频| 在线中文字幕网站| 国产视频一区在线播放| 水蜜桃色314在线观看| 国产精品一区二区美女视频免费看| 亚洲老司机av| 天堂网av手机版| 成人性生交大合| 色哺乳xxxxhd奶水米仓惠香| 中文.日本.精品| 亚洲女人初尝黑人巨大| 日韩免费视频网站| 国产不卡视频一区二区三区| 香蕉精品视频在线| 国产精品4hu.www| 国产一区二区三区在线视频 | 亚洲精品日日夜夜| 欧美wwwwwww| 日本不卡免费一区| 国产精品美女无圣光视频| 国产系列电影在线播放网址| 色综合中文字幕国产| 欧美丰满少妇人妻精品| 国产日韩高清一区二区三区在线| 国产精品久久国产三级国电话系列| 国产乱色在线观看| 欧美一区2区视频在线观看| 日韩精品一区二区亚洲av性色| 麻豆精品一二三| 一本一道久久a久久精品综合| 国产69精品久久久久9999人| 中文字幕亚洲天堂| 国产又粗又大又黄| 亚洲蜜臀av乱码久久精品蜜桃| 午夜视频在线网站| 久久久久久美女精品| 444亚洲人体| 变态调教一区二区三区| 亚洲国产精品一区二区久| 日本熟女一区二区| 成a人片亚洲日本久久| 免费成人午夜视频| 久久不见久久见免费视频7| 国产福利视频一区二区| 日本欧美在线视频免费观看| 欧美日韩精品是欧美日韩精品| 久久精品在线观看视频| 国产一区二区三区在线观看免费视频| 小泽玛利亚av在线| 国产精品极品| 日韩av手机在线| 免费网站黄在线观看| 日韩一区二区电影| 依依成人综合网| 中文字幕av不卡| 99精品视频国产| 亚洲激情精品| 色就是色欧美| 日韩激情欧美| 97超碰国产精品女人人人爽| 大胆av不用播放器在线播放| 欧美一区二区三区免费在线看 | 蜜桃视频在线入口www| 欧美三级视频在线| 欧美日韩人妻精品一区二区三区| av在线不卡网| jizz18女人| 亚洲人妖在线| 亚洲最新在线| 懂色av一区二区| 国产精品久久色| 国产乱妇乱子在线播视频播放网站| 精品视频在线导航| 国产精品乱码一区二区| 岛国精品视频在线播放| 日韩激情小视频| 不卡影院免费观看| 在线观看岛国av| 国产精品日韩精品欧美精品| 在线成人性视频| 天天躁日日躁成人字幕aⅴ| 成人看片人aa| 都市激情亚洲一区| 欧美黄色成人网| 一区二区高清不卡| 国产丝袜一区二区| 亚洲av无码乱码国产精品| 欧美亚洲国产怡红院影院| 国产精品16p| 17c精品麻豆一区二区免费| 人妻精品久久久久中文字幕| 国产激情视频一区二区在线观看 | 亚洲国产精品电影在线观看| 一区二区三区精| 色老汉av一区二区三区| 久久综合色综合| 亚洲男人的天堂在线观看| 最新中文字幕av| 91免费观看视频| 亚洲av无码专区在线播放中文| 美女www一区二区| 国产一区二区视频免费在线观看| 伊人久久成人| 中文精品无码中文字幕无码专区| 欧美韩日高清| 亚洲国产激情一区二区三区| 亚洲最大在线| 国产麻豆乱码精品一区二区三区 | 特级毛片在线| 久久手机精品视频| 日本中文字幕在线播放| 国产亚洲精品成人av久久ww| 欧洲视频在线免费观看| 亚洲精品电影网| 天堂成人在线视频| 亚洲国产精品人人爽夜夜爽| 东京干手机福利视频| 91精品国产一区二区三区| 在线免费观看一级片| 欧美日韩一区二区不卡| 在线观看av大片| 欧美久久久久免费| 国产喷水吹潮视频www| 3d成人h动漫网站入口| 91成年人视频| 51精品秘密在线观看| 国产精品呻吟久久| 欧美一二三区在线观看| 99re只有精品| 精品少妇一区二区三区在线播放| 亚洲AV无码成人片在线观看| 精品久久久久久久久久久院品网| 成人毛片在线精品国产| 亚洲大胆美女视频| 五月婷婷综合久久| 日韩精品欧美激情| 国产永久免费高清在线观看| 中文欧美日本在线资源| av男人的天堂在线| 久久久精品久久久| 黄网在线免费看| 日本一区二区三区四区视频| 九九热这里有精品| 91精品视频在线播放| 亚洲超碰在线观看| 精品欧美一区二区三区久久久 | 成人毛片视频在线观看| 日韩片在线观看| 国产精品天天摸av网| www.4hu95.com四虎| 亚洲欧美另类久久久精品2019| 国产一级淫片免费| 欧美性69xxxx肥| 中文字幕日韩第一页| 日韩三级电影网址| 视频午夜在线| 久久夜精品香蕉| 久久影院午夜精品| 成人av在线天堂| 国产精东传媒成人av电影| 欧美人xxxxx| 五月激情久久久| 欧美日韩成人免费视频| 美美哒免费高清在线观看视频一区二区| 伊人精品视频在线观看| 91色.com| 欧洲猛交xxxx乱大交3| 欧美天天综合色影久久精品| 91欧美日韩麻豆精品| 日韩国产高清视频在线| 黄色网页在线免费看| 欧美亚洲国产日本| 电影一区中文字幕| 欧美日韩一区二区视频在线观看| 欧美高清不卡| 一区二区三区国产免费| 成人高清免费观看| 来吧亚洲综合网| 欧美性黄网官网| 精品区在线观看| 中文字幕亚洲综合久久| 韩国精品一区| 国产美女精彩久久| 日韩电影不卡一区| 国产精品无码电影在线观看| 男人操女人的视频在线观看欧美| 在线精品一区二区三区| 亚洲日本欧美天堂| 伊人网中文字幕| 日韩精品在线视频| 日本h片在线| 91精品啪aⅴ在线观看国产| 欧美久久精品一级c片| 国产91xxx| 国产成人在线电影| 亚洲 欧美 变态 另类 综合| 欧美系列在线观看| 可以在线观看的av| 69影院欧美专区视频| 中文一区二区三区四区| 中文字幕一区二区三区精彩视频| 久久中文字幕一区二区三区| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 午夜精品一区二区三区国产| 无码精品国产一区二区三区免费| 99久久精品国产麻豆演员表| 国产一级视频在线播放| 欧美sm极限捆绑bd| 日本无删减在线| 97人人模人人爽人人少妇| 亚洲九九视频| 日韩av片免费观看| 国产精品剧情在线亚洲| 中文字幕日日夜夜| 中文字幕日韩欧美在线视频| 欧洲精品一区二区三区| 欧美一区二区三区四区夜夜大片| 亚洲色诱最新| 成人免费av片| 欧美特级www| 国产片在线观看| 国产精品视频精品| 日本女优一区| 777一区二区| 亚洲乱码国产乱码精品精的特点| 99re只有精品| 欧美富婆性猛交| 加勒比色综合久久久久久久久 | 182在线观看视频| 欧美剧在线免费观看网站| 黄色国产网站在线播放| 91在线观看免费高清完整版在线观看| 欧美激情另类| 在线观看免费视频污| 夜夜嗨av一区二区三区网页| 国内爆初菊对白视频| 午夜精品久久久久久久99热| 色婷婷精品视频| 一区二区三区入口| 亚洲女爱视频在线| 刘亦菲久久免费一区二区| 2021久久精品国产99国产精品| 亚洲第一福利专区| 国产福利影院在线观看| 亚洲欧美日本韩国| 黄色美女一级片| 国产精品成人播放| 欧美成人首页| 熟女丰满老熟女熟妇| 日本精品一区二区三区高清| 免费av不卡| 国产一区二区三区四区五区在线| 免播放器亚洲| 三级黄色录像视频| 日韩av在线精品| 国产精品传媒麻豆hd| 男人天堂新网址| 国产亚洲精久久久久久| www.国产麻豆| 欧美又大又粗又长| 99久久视频| 久久偷拍免费视频| 欧美猛男超大videosgay| 成人在线黄色电影| 亚洲欧美国产不卡| 成人avav影音| 91亚洲视频在线观看| 91精品国产高清久久久久久| 成人3d精品动漫精品一二三| 激情小说欧美色图| 在线观看日韩电影| av在线理伦电影| 色综合久久久久久久久五月| 国产suv精品一区二区三区|