Kbone 簡介
1妨猩、導(dǎo)語
小程序作為一種新興地鏈接用戶與服務(wù)的方式潜叛,相信大家都或多或少接觸過秽褒。對于開發(fā)者來說,它是一種類似 Web 但又不同于 Web 的開發(fā)模式威兜,它提供了一套自定義的 API 和文件組織方式销斟,這無疑帶給開發(fā)者一定的學(xué)習(xí)成本和維護(hù)成本,所以我們也在嘗試能否提供一個方案來抹平這個差異椒舵÷煊唬——引自Kbone作者june在云加社區(qū)微信群中的分享
隨著小程序的發(fā)展,Web 端和小程序同構(gòu)的呼聲也越來越大笔宿,為此微信官方提供了 Kbone 這一套方案犁钟。旨在讓開發(fā)者可以用最熟悉的方式來完成一個多端 APP 的開發(fā),降低開發(fā)門檻泼橘。
Kbone——微信小程序同構(gòu)方案新思路涝动。
微信小程序的底層模型和 Web 端不同,我們想直接把 Web 端的代碼挪到小程序環(huán)境內(nèi)執(zhí)行是不可能的炬灭。kbone 的誕生就是為了解決這個問題戚揭,它實現(xiàn)了一個適配器珍策,在適配層里模擬出了瀏覽器環(huán)境,讓 Web 端的代碼可以不做什么改動便可運行在小程序里。
2佛吓、Kbone的優(yōu)勢
因為 kbone 是通過提供適配器的方式來實現(xiàn)同構(gòu),所以它的優(yōu)勢很明顯:
- 大部分流行的前端框架都能夠在 kbone 上運行像街,比如 Vue筹裕、React、Preact 等椎木。
- 支持更為完整的前端框架特性违柏,因為 kbone 不會對框架底層進(jìn)行刪改(比如 Vue 中的 v-html 指令笨腥、Vue-router 插件)。
- 提供了常用的 dom/bom 接口勇垛,讓用戶代碼無需做太大改動便可從 Web 端遷移到小程序端脖母。
- 在小程序端運行時,仍然可以使用小程序本身的特性(比如像 live-player 內(nèi)置組件闲孤、分包功能)谆级。
- 提供了一些 Dom 擴(kuò)展接口,讓一些無法完美兼容到小程序端的接口也有替代使用方案(比如 getComputedStyle 接口)讼积。
3肥照、Kbone 誕生背景
首先我們先進(jìn)入背景部分的介紹。之所以會有 Kbone 這個方案出現(xiàn)勤众,源自于一個需求:微信開放社區(qū)當(dāng)時只有 Web 端舆绎,為了讓信息可以更方便地傳播、分享和使用们颜,希望實現(xiàn)社區(qū)小程序版吕朵,交互體驗盡量貼近于 Web 端。
微信開放社區(qū)鏈接: https://developers.weixin.qq.com/community/develop/mixflow
此次同構(gòu)到小程序端需要考慮幾個因素:多端代碼復(fù)用窥突、盡可能支持已有的特性和性能要有保證努溃。其實最主要的就是要在盡量不改動現(xiàn)有代碼的情況下來完成小程序的開發(fā)。
4阻问、選擇
業(yè)內(nèi)其實已經(jīng)出現(xiàn)了很多關(guān)于同構(gòu)的解決方案了梧税,每個方案都有自己的優(yōu)劣,不存在能夠完美解決所有問題的方案称近。kbone 也一樣第队,它的優(yōu)勢在上面提到過,而它的不足也是它的實現(xiàn)原理帶來的刨秆。kbone 是使用一定的性能損耗來換取更為全面的 Web 端特性支持凳谦。
所以關(guān)于性能方面,如果你對小程序的性能特別苛刻坛善,建議直接使用原生小程序開發(fā)晾蜘;如果你的頁面節(jié)點數(shù)量特別多(通常在 1000 節(jié)點以上),同時還要保證在節(jié)點數(shù)無限上漲時仍然有穩(wěn)定的渲染性能的話眠屎,可以嘗試一下業(yè)內(nèi)采用靜態(tài)模板轉(zhuǎn)譯的方案剔交;其他情況就可以直接采用 kbone 了。
5改衩、微信開放社區(qū)方案實現(xiàn)與應(yīng)用效果
具體實現(xiàn)思路見 高級 > 微信開放社區(qū)方案實現(xiàn)與應(yīng)用效果岖常。