最近一直開發(fā)小程序的轉(zhuǎn)譯框架,遇到許多坑,但回過頭發(fā)現(xiàn)支付寶小程序抄微信小程序真是一個英明的決定。
表現(xiàn)上,微信小程序出來兩年多支付寶小程序開發(fā)教程,各種坑都踩過了,它們也試水了許多新東西,有些好用,有些不好用,比如自定義組件機制就比標(biāo)簽好用,自定義組件機制中將鉤子們聚合到對象就比散著放好,鉤子里面的回調(diào),, , 就比moved常用多,于是其他平臺有類似功能的, , ,而沒有moved。后來的平臺可以將一些沒用,不受歡迎的功能去掉,并且將一些方法名配置名改得更好聽更短。
圍繞著微信小程序,也興起了一大堆第三方框架與轉(zhuǎn)譯器。如果支付寶小程序與它出入太大,那么這些框架作者就沒有熱情支持它了。這就像15年前的瀏覽器大戰(zhàn),那時網(wǎng)景是第一大瀏覽器,90%的網(wǎng)頁都是在它上面編寫的,而IE反編譯了它的源碼,但樣式總是與它長得不一樣。于是許多碼農(nóng)干脆根據(jù)UA ,判定是IE 就跳轉(zhuǎn)到一個頁面,說我們不支持IE ,請使用網(wǎng)景瀏覽器打開。因此IE 的UA就拼命偽裝成網(wǎng)景,并加快在CSS與網(wǎng)景上保持一致。像opera, 這些更后來者,它們就更要模仿網(wǎng)景。后來IE用不光彩的手段打敗網(wǎng)景,他們轉(zhuǎn)而模仿IE ,并且在JS 上有兩套API,一套是網(wǎng)景的(的那一套,以后成為W3C標(biāo)準(zhǔn))一套是微軟的。
現(xiàn)在的情況也是這樣,為了吸引開發(fā)者,百度智能小程序,頭條小程序從API 接口,自定義組件機制,內(nèi)置的UI 庫,開發(fā)者工具的樣式與提供功能上,都是與微信小程序一樣。百度還提供一份腳本,能將你的微信小程序代碼轉(zhuǎn)換成百度的(主要是改模板中的條件循環(huán)指令,文件的后綴名)。
從公司的角色來看支付寶小程序開發(fā)教程,直接將別人的東西扒過來,成本很少的。畢竟像支付寶,頭條一開始也不知道到底能吸引多少開發(fā)者,因為不是它們的主營業(yè)務(wù),一開始不會投入太多人力。作為實驗性質(zhì)的項目,給的人力也很少。于是文檔可以照搬,API也不用自己費心想,開發(fā)者工具可以反編譯,先吸引一波用戶。像共享單車,先發(fā)優(yōu)勢好重要。除非是大公司,他們可以有人力開發(fā)3,4種小程序,小公司只會搞一下微信。
那么如何吸引小公司的人呢?除非一份代碼可以多個平臺用,否則他們不會進入的。于是只能通過轉(zhuǎn)譯框架實現(xiàn)這種機制。在微信小程序出來的第一年,是沒有轉(zhuǎn)譯框架。mpvue, wepy, weact這些框架是降低大家的學(xué)習(xí)成本,將你們的vue, react經(jīng)驗遷移到小程序開發(fā)上。順序?qū)⒁恍︰I 庫改一改也搬過去。到了今年才冒出taro與,表面上它們都是將你的react經(jīng)驗上遷到小程序上,但是它們打通了許多平臺的開發(fā),包括H5, , 微信小程序, 百度小程序, 支付寶小程序。。。
為什么轉(zhuǎn)譯框架對后來的小程序平臺這么重要的呢? 轉(zhuǎn)譯框架就相當(dāng)于一個大型商業(yè)體,里面入駐了各種小程序,其中微信小程序肯定占據(jù)最好的位置,與微信小程序長得差不多,兼容難度夠低的小程序也會有場所入駐,差異越大,入駐可能性就越低,就像王府井里面不會給你入駐壽衣店一樣。
下面為娜娜奇為例,先做微信,然后是百度,然后是支付寶,然后做快應(yīng)用,但快應(yīng)用耗時太長,現(xiàn)在還在做。這時并行做了頭條,頭條的開發(fā)者工具還是beta版,沒有多架構(gòu),但我們可以確信90%可以跑。同時并行的還有QQ輕應(yīng)用,與微信同一公司,應(yīng)該也能跑。快應(yīng)用其實許多組件與小程序長得不一樣,于是我們實現(xiàn)一套補丁組件(基于React與一些基礎(chǔ)標(biāo)簽),覺得補丁組件出來,加上一個路由器,那么我們就可以跑在瀏覽器上。即在兼容快應(yīng)用的同時,我們也搞定了H5端。由于H5端是一個SPA ,外面套一個,加上一些橋,我們就實現(xiàn)手機上的端,能跑在安卓與IOS 上。上周我們開始弄YIS,我們早期一個類似于小程序的架構(gòu),它能做獨立APP,也能跑安卓與IOS ,比純的性能好多了。發(fā)現(xiàn)這個讓娜娜奇支持它也輕松。因此在娜娜奇這個大型商業(yè)體,擁擠著這么多商店。與微信小程序長得像的早就開始營業(yè),與微信小程序差異夠大的,那正在裝修,與微信差異很大的,如快應(yīng)用,雖然很早動工,但還沒有建好房子。
如果不進駐, taro, 這些轉(zhuǎn)譯框架會如何呢?那就是違背了商業(yè)上的“集聚效應(yīng)”。為什么沙縣小吃和蘭州拉面要挨在一起,為什么麥當(dāng)勞旁邊始終開著一家肯德基,為什么nike的旁邊一定要有。好的店總能有資源獲得好的地址,吸引更好的客流量,形成一個消費的中心,挨在一起不能五五開,也能分一杯羹。(有關(guān)集聚效應(yīng)可以詳看這里, 為什么蘭州拉面旁邊必定有一家沙縣小吃?)
我以前與快應(yīng)用的人也討論過,不能總以性能問題說不能做這個,不能做這個。IE 打敗網(wǎng)景不是因為它性能比網(wǎng)景好,而是它的功能更多。尤其是IE6,它提供了的功能與API,其他瀏覽器抄到IE 11時代,整整抄了10年還沒有抄完。12306最大的賣點也不是它的性能快。首先要滿足功能,才輪到性能優(yōu)化。能提供與其他平臺一一對照的API,比如說拖拽效果,如果你不提供touch事件,開發(fā)者怎么玩?!文字要求一定寫在text標(biāo)簽中,如果轉(zhuǎn)譯器不幫你做這事,人家肯定是開發(fā)了微信小程序才兼容快應(yīng)用,誰有空一個個文本外面加text標(biāo)簽?!到時費勁做了許多東西,別人直接套了。
從發(fā)版速度也可以看到互聯(lián)網(wǎng)公司的速度,支付寶的承玉今天對他提了,他明天就打一個新包給你,頭條三天就可以弄一個。微信與支付寶的版本都是幾天就有一個。百度會承諾下一個版本加上,他們每個版本兩個星期左右。快應(yīng)用則要兩個月,這就尷尬了。因此從商業(yè)策略,成本控制,運營推進,阿里的行為都是非常NB的。