帶你探索手Q小程序全貌

目錄:

一:背景介紹

二:Web體系下構(gòu)建小程序所帶來的頑疾

三:多進程運用

四:離線包技術(shù)

五:視圖層技術(shù)的演進--同層渲染

六:邏輯層技術(shù)的演進—雙線程模型


一:背景介紹

1.1、小程序的定義

??? 無需下載安裝即可使用的應用熔酷,它實現(xiàn)了應用觸手可及的夢想豺裆,用戶掃一掃或者搜索一下即可打開應用臭猜,也體現(xiàn)了用完即走的理念,用戶不用關(guān)心是否安裝太多應用的問題羹应,應用將無處不在量愧,隨時可用帅矗,但又無需安裝卸載。

??? 總結(jié)為:無需下載安裝累颂、觸手可及紊馏、用完即走蒲犬。

1.2原叮、手Q充當?shù)慕巧?/h4>

???? 手Q中可以運行各個第三開發(fā)商提供的小程序,在這個過程中擂送,手Q主要是充當宿主唯欣、容器境氢、載體的角色碰纬,提供給各個不同的小程序運行的環(huán)境嘀趟,手Q小程序功能模塊應該最大限度的保證各個小程序開發(fā)者只需要關(guān)注業(yè)務本身的功能她按,而涉及各個小程序的加載炕柔、更新、性能陵刹、啟動速度等體驗問題衰琐,這是需要手Q宿主重點解決的問題炼蹦。

1.3掐隐、小程序的運行機制

??? 小程序是基于WEB規(guī)范,采用HTML匿刮,CSS和JS等搭建的一套框架熟丸,但本質(zhì)上還是在整個WEB體系之下構(gòu)建的伪节。


二:Web體系下構(gòu)建小程序所帶來的頑疾

??? 在Android系統(tǒng)的開發(fā)中架馋,通常需要系統(tǒng)控件WebView實現(xiàn)前端頁面的加載,那小程序在基于web體系下構(gòu)建可能會產(chǎn)生什么問題,下面就匯總一下:

問題一:頁面加載速度慢

問題二:交互體驗沒有原生界面好

問題三:WebView控件加載小程序界面時屏鳍,占用內(nèi)存大

問題四:小程序的內(nèi)存泄露與小程序的相關(guān)Crash會影響手Q主進程

問題五:加載頁面依賴網(wǎng)絡钓瞭,網(wǎng)絡狀態(tài)差或弱網(wǎng)情況下,容易發(fā)生白屏堤结、卡頓等問題

問題六:加載頁面后鸭丛,無法有效規(guī)范鳞溉、約束和監(jiān)控頁面的行為(管控性和安全性)

? ? ? ?上面的列表匯總了在Web體系下構(gòu)建小程序所帶來的問題,那下面我們就來了解小程序SDK是如何通過技術(shù)手段最大限度的解決和優(yōu)化以上問題的看政。


三:多進程運用

3.1允蚣、手Q主進程對小程序的管理:預加載呆贿、分配榨崩、創(chuàng)建、銷毀翩剪、管控等

概述:由于進程之間的內(nèi)存無法共享彩郊,小程序的生命周期需要在某一個進程中維護前弯,不然無法做到動態(tài)分配進程和棧,而這個進程選擇手Q主進程最為合適秫逝,因此需要創(chuàng)建一個管理器恕出,這個管理器負責以下幾件事:

1、在空閑時預加載進程违帆。

2浙巫、根據(jù)設(shè)置的可開啟的最大小程序數(shù)量,對進程進行新建、銷毀等操作的畴。

3、合理的為接收到的請求分配空閑的進程丧裁。

4护桦、接收外界開啟、關(guān)閉等對小程序的操作煎娇。

5二庵、接收遠程小程序的生命周期回調(diào)并通過某個uuid進行維護。

6缓呛、所有這些管理和維護的操作催享,對小程序接入者都應是透明的,無需關(guān)心具體實現(xiàn)流程强经,僅在需要時開啟小程序即可睡陪。


3.2、進程間的通信


手Q宿主進程與小程序進程間通信圖解:


四:離線包技術(shù)

4.1匿情、離線包技術(shù)的引入

背景:在為什么要使用離線包之前兰迫,我們需要先了解一下加載一個前端頁面的過程:初始化webview

-> 請求頁面 -> 下載數(shù)據(jù) -> 解析HTML -> 請求js/css資源

-> dom渲染 -> 解析js執(zhí)行 -> js請求數(shù)據(jù) -> 解析渲染 -> 下載渲染圖片。


離線包的實現(xiàn)與優(yōu)勢:

解析:離線包是將包括HTML炬称,JavaScript汁果,css等頁面的內(nèi)置靜態(tài)資源打包到一個壓縮包內(nèi),預先下載該離線包到本地, 然后客戶端將數(shù)據(jù)傳遞給頁面玲躯,通過webView加載展示据德,不需要網(wǎng)絡請求,webView只要渲染頁面跷车,執(zhí)行js即可棘利,解決html本身加載需要的時間問題,離線包基本思路通過webview統(tǒng)一攔截url,

將資源映射到本地離線包朽缴。


帶來的優(yōu)勢也是顯而易見的:

提升用戶體驗:

通過離線包的方式把頁面內(nèi)置靜態(tài)資源嵌入到應用中并發(fā)布善玫,當用戶第一次開啟應用的時候, 就無需以網(wǎng)絡環(huán)境下載該資源,而是馬上開始使用密强。

實現(xiàn)動態(tài)更新:

在推出新版本或是緊急發(fā)布的時候, 可以把修改的資源放入離線包, 通過更新配置讓應用自動下載更新茅郎,無需通過應用商店審核, 就讓用戶及時接收更新。


備注:離線包機制或渤,本質(zhì)上是通過空間換時間的技術(shù)實現(xiàn)用戶體驗的優(yōu)化系冗。


官方說明

概述:某些情況下,開發(fā)者需要將小程序劃分成不同的子包薪鹦,在構(gòu)建時打包成不同的分包掌敬,用戶在使用時按需進行加載。

??? 在構(gòu)建小程序分包項目時,構(gòu)建會輸出一個或多個分包涝开。每個使用分包小程序必定含有一個主包循帐。所謂的主包框仔,即放置默認啟動頁面/TabBar頁面舀武,以及一些所有分包都需用到公共資源/JS腳本;而分包則是根據(jù)開發(fā)者的配置進行劃分离斩。

???在小程序啟動時银舱,默認會下載主包并啟動主包內(nèi)頁面,當用戶用戶進入分包內(nèi)某個頁面時跛梗,客戶端會把對應分包下載下來寻馏,下載完成后再進行展示。

目前小程序分包大小有以下限制:

1核偿、整個小程序所有分包大小不超過24M

2诚欠、單個分包/主包大小不能超過2M

圖解:

備注:對小程序進行分包,可以優(yōu)化小程序首次啟動的下載時間漾岳,以及在多團隊共同開發(fā)時可以更好的解耦協(xié)作轰绵。


小程序更新機制

未啟動時更新

??? 客戶端運行時,會定期檢查最近使用的小程序是否有更新尼荆。如果有更新左腔,下次小程序啟動時會同步進行更新,更新到最新版本后再打開小程序捅儒,盡可能保證用戶能夠盡快使用小程序的最新版本液样,總的來說,開發(fā)者在后臺發(fā)布新版本之后巧还,無法立刻影響到所有現(xiàn)網(wǎng)用戶鞭莽,但最差情況下,也在發(fā)布之后24小時之內(nèi)覆蓋絕大多數(shù)用戶麸祷。

啟動時更新

??? 即使啟動前未發(fā)現(xiàn)更新澎怒,小程序每次冷啟動時,都會異步檢查是否有更新版本摇锋。如果發(fā)現(xiàn)有新版本丹拯,將會異步下載新版本的代碼包,但當次啟動仍會使用客戶端本地的舊版本代碼荸恕,即新版本的小程序需要等下一次冷啟動才會應用上乖酬,如果需要馬上應用最新版本,可以使用getUpdateManager相關(guān)API進行處理融求,圖例如下:


五:視圖層技術(shù)的演進--同層渲染

小程序視圖技術(shù)演進圖:

優(yōu)勢互補

???webview渲染的那一層和Native同時存在于一層咬像,優(yōu)勢互補,小程序則主要由成熟的Web技術(shù)渲染,輔之以大量的接口提供豐富的客戶端原生能力县昂,就是通過一定的技術(shù)手段把原生組件直接渲染到WebView層級上肮柜,此時原生組件層已經(jīng)不存在,原生組件此時已被直接掛載到WebView節(jié)點上倒彰,如下圖所示:





六:邏輯層技術(shù)的演進—雙線程模型

小程序邏輯層技術(shù)演進圖:


雙線程模型的引入???

???小程序應該像Web技術(shù)那樣审洞,有一份隨時可更新的資源包放在云端,通過下載到本地待讳,動態(tài)執(zhí)行后即可渲染出界面芒澜。但是,如果用純Web技術(shù)來渲染小程序创淡,在一些有復雜交互的頁面上可能會面臨一些性能問題痴晦,這是因為在Web技術(shù)中,UI渲染跟JavaScript的腳本執(zhí)行都在一個單線程中執(zhí)行琳彩,這就容易導致一些邏輯任務搶占UI渲染的資源誊酌。

??? 最終,小程序采用類似于微信JSSDK這樣的Hybrid技術(shù)露乏,即界面主要由成熟的Web技術(shù)渲染碧浊,輔之以大量的接口提供豐富的客戶端原生能力。同時施无,每個小程序頁面都是用不同的WebView 去渲染辉词,這樣可以提供更好的交互體驗,更貼近原生體驗猾骡,也避免了單個WebView的任務過于繁重瑞躺,小程序的雙線程模型示意圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兴想,隨后出現(xiàn)的幾起案子幢哨,更是在濱河造成了極大的恐慌,老刑警劉巖嫂便,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捞镰,死亡現(xiàn)場離奇詭異,居然都是意外死亡毙替,警方通過查閱死者的電腦和手機岸售,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂画,“玉大人凸丸,你說我怎么就攤上這事「ぴ海” “怎么了屎慢?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵瞭稼,是天一觀的道長。 經(jīng)常有香客問我腻惠,道長环肘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任集灌,我火速辦了婚禮悔雹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绝页。我一直安慰自己荠商,他們只是感情好寂恬,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布续誉。 她就那樣靜靜地躺著,像睡著了一般初肉。 火紅的嫁衣襯著肌膚如雪酷鸦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天牙咏,我揣著相機與錄音臼隔,去河邊找鬼。 笑死妄壶,一個胖子當著我的面吹牛摔握,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丁寄,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼氨淌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伊磺?” 一聲冷哼從身側(cè)響起盛正,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屑埋,沒想到半個月后豪筝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡摘能,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年续崖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片团搞。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡严望,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莺丑,到底是詐尸還是另有隱情著蟹,我是刑警寧澤墩蔓,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站萧豆,受9級特大地震影響奸披,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涮雷,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一阵面、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洪鸭,春花似錦样刷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜓竹,卻和暖如春箕母,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俱济。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工嘶是, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛛碌。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓聂喇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔚携。 傳聞我的和親對象是個殘疾皇子希太,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容