手淘天施:我眼中的Weex和Weex開(kāi)源那些事
版權(quán)聲明
作者:吳志華(花名:天施),阿里資深無(wú)線(xiàn)技術(shù)專(zhuān)家,淘寶移動(dòng)平臺(tái)基礎(chǔ)平臺(tái)部負(fù)責(zé)人,Weex項(xiàng)目負(fù)責(zé)人
本文為手淘技術(shù)團(tuán)隊(duì)投稿。
今天手淘宣布將Weex開(kāi)源項(xiàng)目捐贈(zèng)給Apache基金會(huì)開(kāi)始孵化,這是阿里在JStorm、RocketMQ之后的第三個(gè)阿里Apache基金會(huì)開(kāi)源項(xiàng)目。
Apache基金會(huì)有著非常嚴(yán)格的準(zhǔn)入機(jī)制,這次Weex加入表明它得到了國(guó)際上的認(rèn)可,我們也非常希望看到中國(guó)的移動(dòng)開(kāi)源項(xiàng)目能夠在國(guó)際上獲得成功。
在今年6月份的GMTC大會(huì)的時(shí)候我和手淘同學(xué)聊到,Weex的開(kāi)發(fā)完全基于Github,在本文里天施老師真誠(chéng)的分享了更多Weex背后的故事,我想,正是這樣的真誠(chéng)和開(kāi)放,是Weex成功的關(guān)鍵。
本文還講到了Weex開(kāi)源的準(zhǔn)備過(guò)程和如何進(jìn)入Apache基金會(huì),相信可以給準(zhǔn)備將公司技術(shù)開(kāi)源的人們一些幫助。
(2016年6月30日,Weex項(xiàng)目開(kāi)源,團(tuán)隊(duì)合影留念)
10月底云棲大會(huì)開(kāi)源專(zhuān)場(chǎng),阿里云唐容邀請(qǐng)我過(guò)去做Weex開(kāi)源的主題演講??戳讼聅peaker列表:第一位是Docker的John Willis(知名Devops專(zhuān)家),第二位是我,第三位MySQL之父Michael Widenius(MySQL第一行代碼的作者),第四位阿里云褚霸大神。感謝阿里云認(rèn)同之外更多是壓力山大,一是擔(dān)心自己在前輩大神和業(yè)界同仁面前妄言,二是真心希望給業(yè)界講點(diǎn)什么,哪怕讓大家記住一兩句話(huà)也行。
Weex開(kāi)源的幕后
準(zhǔn)備演講PPT過(guò)程更是一個(gè)持續(xù)總結(jié)和自我修煉的過(guò)程。回到一年前我們討論Weex是否開(kāi)源的時(shí)候,有追技術(shù)熱點(diǎn)、開(kāi)源趕時(shí)髦的想法,但內(nèi)心堅(jiān)信的一點(diǎn)是我們認(rèn)為Weex可能是在移動(dòng)技術(shù)這塊唯一做技術(shù)生態(tài)的機(jī)會(huì)。與此同時(shí)針對(duì)“Weex是什么、要什么”也展開(kāi)了大量討論,Weex不是RN、三端一致、Vue,這些點(diǎn)都很重要但不一定是最本質(zhì)的理解。
整個(gè)項(xiàng)目開(kāi)源準(zhǔn)備從春節(jié)開(kāi)始一直到4月,大量幕后工作(代碼去內(nèi)部邏輯、代碼倉(cāng)庫(kù)遷移github、文檔、demo、官網(wǎng))。中間也一直跟業(yè)界交流,一直被追問(wèn)我們對(duì)Weex的理解和開(kāi)源項(xiàng)目維護(hù)問(wèn)題。記得有次Geekbang的Selina過(guò)來(lái)進(jìn)行合作交流,被問(wèn)到Weex相關(guān)問(wèn)題,我當(dāng)時(shí)一個(gè)觀(guān)點(diǎn)是“在移動(dòng)時(shí)代沒(méi)有找到一個(gè)比HTML/CSS/JS更合適描述界面和表達(dá)業(yè)務(wù)的方式,當(dāng)前智能手機(jī)GUI體系只是對(duì)HTML拙劣的逼近和模仿。Weex/RN從某種意義上是必然的產(chǎn)物”。
坦言當(dāng)時(shí)Weex開(kāi)源還是處在巨大的爭(zhēng)議中:一個(gè)是我們秉承的三端一致,到底是為了差異而差異,還是我們有自己的思考和堅(jiān)定信念,業(yè)界對(duì)于我們能做到三端一致也是持懷疑態(tài)度;二是阿里過(guò)去開(kāi)源積累的負(fù)面印象,給這個(gè)項(xiàng)目開(kāi)源帶來(lái)不少挑戰(zhàn)。這些擺在面前的困難和挑戰(zhàn),促使我們不斷思考Weex的開(kāi)源之路怎么走,我們的信心和勇氣也處于煎熬之中。
時(shí)間一天天逼近,各項(xiàng)準(zhǔn)備工作逐漸交付,離我們既定4月21日QCon宣布開(kāi)源內(nèi)測(cè)越來(lái)越近了。對(duì)于Weex開(kāi)源內(nèi)測(cè)能夠達(dá)到的效果也放在了桌上討論,到底Weex開(kāi)源能夠吸引多少人?到底是要做內(nèi)測(cè)還是公測(cè)、內(nèi)測(cè)說(shuō)法是否合適?內(nèi)部爭(zhēng)議不斷,技術(shù)團(tuán)隊(duì)的謙虛的秉性也對(duì)合作的市場(chǎng)運(yùn)營(yíng)團(tuán)隊(duì)造成了困擾。整個(gè)事情的不確定性很大,但既定的目標(biāo)還是要持續(xù)往前滾動(dòng),該決策的要決策,該執(zhí)行的要執(zhí)行。
作為團(tuán)隊(duì)負(fù)責(zé)人我在這個(gè)時(shí)候壓力不小,一直擔(dān)心Weex開(kāi)源這一槍打出去就啞掉了,后續(xù)就無(wú)從談起。3月19號(hào)周末在家,壓力之下突發(fā)奇想:“我們應(yīng)該立即在集團(tuán)內(nèi)部做個(gè)開(kāi)源內(nèi)測(cè),看看集團(tuán)內(nèi)部開(kāi)發(fā)者的反響”。
開(kāi)源內(nèi)測(cè)
一想到就說(shuō)做就做,在內(nèi)網(wǎng)讓團(tuán)隊(duì)立即寫(xiě)了篇集團(tuán)內(nèi)開(kāi)源內(nèi)測(cè)的號(hào)召文章讓集團(tuán)技術(shù)發(fā)展部推廣了下。結(jié)果這樣一個(gè)形式粗糙簡(jiǎn)陋的活動(dòng)形式收到的效果出乎我們的意料,集團(tuán)不少同學(xué)給我們貢獻(xiàn)了一些有意思的demo和組件,正是這些最早一批的社區(qū)貢獻(xiàn)給了我們堅(jiān)持下去的信心和鼓勵(lì)。
然后就是4月21號(hào)QCon開(kāi)源內(nèi)測(cè)的故事:從4月20號(hào)晚上團(tuán)隊(duì)趕Weex官網(wǎng)發(fā)布折騰到凌晨4點(diǎn),再到QCon當(dāng)天南天的keynote演講非常成功爆棚當(dāng)場(chǎng)引起業(yè)界強(qiáng)烈反響,讓業(yè)界看到了我們對(duì)移動(dòng)技術(shù)方向的深刻理解,緊隨其后的是海量開(kāi)發(fā)者申請(qǐng)郵件源源不斷進(jìn)來(lái),Weex開(kāi)源之路就此啟動(dòng)。
事后來(lái)看,開(kāi)源內(nèi)測(cè)幫助Weex在可控范圍內(nèi)逐步提升開(kāi)發(fā)者體驗(yàn),起了非常關(guān)鍵性作用,讓我們有機(jī)會(huì)去不斷自我修正,避免因?yàn)轫?xiàng)目本身不成熟的時(shí)候大量開(kāi)發(fā)者涌入導(dǎo)致失控。
當(dāng)我們沖出去開(kāi)源才知道Weex各種工具在開(kāi)發(fā)者環(huán)境下的大量問(wèn)題、開(kāi)發(fā)者對(duì)調(diào)試工具的強(qiáng)烈訴求、文檔的問(wèn)題。大量輸入也使得Weex項(xiàng)目變得更加完善、健全、更加有人情味。在開(kāi)源內(nèi)測(cè)2個(gè)月,我們滿(mǎn)腔熱血和激情服務(wù)了大量開(kāi)發(fā)者,解決了不少問(wèn)題,也讓社區(qū)看到了我們的決心,一些熱心的開(kāi)發(fā)者也開(kāi)始幫忙自發(fā)建立Weex Help論壇、QQ群,Weex的社區(qū)的雛形就此形成。
到后來(lái)就是6月底的正式開(kāi)源,團(tuán)隊(duì)一邊兼顧業(yè)務(wù)落地的壓力一邊要兌現(xiàn)在QCon上的承諾—“6月底Weex正式開(kāi)源”,其實(shí)是蠻不容易的。開(kāi)源當(dāng)天我們做了個(gè)小慶祝儀式,這個(gè)也是后來(lái)大家在微博上看到團(tuán)隊(duì)對(duì)外第一次整體亮相—“小伙伴們以滿(mǎn)滿(mǎn)的熱情和儀式感表達(dá)對(duì)Weex開(kāi)源的熱愛(ài)和執(zhí)著”。
和VueJS作者尤雨溪的合作
開(kāi)源路上還值得一提的是引入VueJS作者尤雨溪作為Weex顧問(wèn)的故事。
其實(shí)勾股跟小右接觸很久,談了接近小半年,在小右進(jìn)來(lái)的工作形式和職責(zé)上一直有一些小糾結(jié)。主要在集團(tuán)層面過(guò)去也沒(méi)有可參考的例子,要說(shuō)服方方面面要做不少努力,同時(shí)也要兼顧尤小右的感受。
我個(gè)人的原則是“盡最大可能尊重小右,最終在工作形式上也大膽決定讓小右全部面向開(kāi)源社區(qū)工作,一切的交付和合作在社區(qū)進(jìn)行”。我們做的是開(kāi)源的事情,也希望小右的工作成果在社區(qū)體現(xiàn),服務(wù)于熱愛(ài)Weex和Vue的社區(qū)開(kāi)發(fā)者。這樣原則一確定,合作形式就清晰簡(jiǎn)單,彼此合作起來(lái)也會(huì)少了不必要的束縛和壓力。
不過(guò)這個(gè)事情的促成其實(shí)還是要感謝我的Boss南天,讓我們?cè)谶@個(gè)事情上自由折騰去嘗試一些創(chuàng)新的想法,也真心期待Weex和Vue的合作真正不負(fù)社區(qū)的厚望。
9月3號(hào)南京JSConf上尤雨溪正式宣布“作為技術(shù)顧問(wèn)加入Weex團(tuán)隊(duì),推進(jìn)Weex和Vue在前端框架和社區(qū)融合”,社區(qū)反饋幾乎全是正面評(píng)價(jià)。那天我跟勾股說(shuō)了一句話(huà):“小右這個(gè)點(diǎn)上加入是最合適的時(shí)間點(diǎn),過(guò)早過(guò)晚都不是好的時(shí)機(jī)。”
推動(dòng)Weex加入Apache社區(qū)
然后回到文章一開(kāi)始提到的云棲開(kāi)源峰會(huì)。在開(kāi)源峰會(huì)10月份之前團(tuán)隊(duì)受邀在業(yè)界做了不少分享,中間收到社區(qū)開(kāi)發(fā)者的反饋:“一些業(yè)界公司擔(dān)心這個(gè)項(xiàng)目過(guò)于阿里化,停掉了正在調(diào)研接入Weex的嘗試”。
這個(gè)反饋促使我們思考怎么讓這個(gè)項(xiàng)目變得更加中立,讓更多的開(kāi)發(fā)者可以參與進(jìn)來(lái)一起貢獻(xiàn)。團(tuán)隊(duì)討論后覺(jué)得推動(dòng)Weex去Apache社區(qū)可能是一條讓業(yè)界放心的路。
于是我們開(kāi)始行動(dòng)起來(lái),最早找到集團(tuán)JStrom項(xiàng)目的紀(jì)君祥,老紀(jì)很熱心,也一直認(rèn)為Weex這樣的項(xiàng)目應(yīng)該構(gòu)建更廣泛的影響力,我們?cè)诶砟詈头较蛏弦慌募春?,于是開(kāi)始準(zhǔn)備起來(lái)。
老紀(jì)在Weex進(jìn)Apache孵化器之路做了大量工作,上周還在給Weex團(tuán)隊(duì)介紹Apache社區(qū)的工作流程。通過(guò)老紀(jì),我們也接觸到Apache Kylin的Luke老師,正好QCon上海Luke老師有演講,我們跑過(guò)去跟Luke老師當(dāng)面交流。一個(gè)多小時(shí)交流過(guò)程中,Luke老師給我們講解了Apache社區(qū)秉承的理念規(guī)則,和Apache Kylin的The Apache Way,也讓我們領(lǐng)略到真正熱愛(ài)開(kāi)源技術(shù)人的風(fēng)采。
最終我們邀請(qǐng)到Luke老師和另外一位老師作為Weex項(xiàng)目的mentor,但是項(xiàng)目的Champion還空缺。所以這次云棲大會(huì)開(kāi)源峰會(huì)我有兩個(gè)任務(wù):一是將Weex我們一直堅(jiān)持的理念講給大家;二是尋找Champion。
對(duì)Weex的思考
在開(kāi)源峰會(huì)的PPT準(zhǔn)備中,我一直在思考要給業(yè)界講點(diǎn)什么,腦海中全是這半年Weex在集團(tuán)的落地之路(團(tuán)隊(duì)諸多艱辛和永不停歇的性能穩(wěn)定性之路)、這半年開(kāi)源之路的點(diǎn)點(diǎn)滴滴。Weex是什么?我們到底要堅(jiān)持什么?我們花費(fèi)這么大力氣做Weex開(kāi)源是為了什么?
這三個(gè)Why我們一直反復(fù)思考,也必須回答。我想了很久,PPT也改了很多遍,想了這十年移動(dòng)互聯(lián)網(wǎng)技術(shù)變遷的事情,也想了過(guò)去自身諸多技術(shù)經(jīng)歷,想了手淘從2009年到現(xiàn)在的技術(shù)架構(gòu)演進(jìn)之路:從Native到H5,中間經(jīng)歷WebApp/鳥(niǎo)巢不斷嘗試,再到RN/WVC/Weex的殊途同歸。10月13號(hào)晚上,我寫(xiě)下一段話(huà):“Weex希望把Web統(tǒng)一的技術(shù)標(biāo)準(zhǔn)和開(kāi)放自由分享的精神,帶到移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)交付中來(lái)”,這是我們所認(rèn)定的路。
10月14號(hào)下午演講完出乎意料,本來(lái)覺(jué)得這個(gè)場(chǎng)子很多奔著Docker和MYSQL兩位大神來(lái)的,結(jié)果關(guān)注Weex關(guān)注開(kāi)源的朋友不少,演講完提問(wèn)的朋友不少。
還記得有人提了微信小程序跟Weex的問(wèn)題,我的理解這完全兩個(gè)層面的事情:“小程序更多是封閉的商業(yè)生態(tài)。Weex更愿意做移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)交付的統(tǒng)一技術(shù)標(biāo)準(zhǔn),希望一直堅(jiān)持開(kāi)源、中立,大家喜歡拿去用就好不會(huì)有任何負(fù)擔(dān)。至于未來(lái)我還是堅(jiān)信移動(dòng)互聯(lián)網(wǎng)的技術(shù)一定會(huì)走向成熟統(tǒng)一,統(tǒng)一的技術(shù)標(biāo)準(zhǔn)可能會(huì)帶來(lái)很多美好的東西,這個(gè)是技術(shù)人愿意相信也愿意去為之努力的事情”。
演講完走出來(lái),身心有股沉甸甸的感覺(jué),對(duì)于Weex實(shí)踐標(biāo)準(zhǔn)化、三端一致有了更深的理解和發(fā)自?xún)?nèi)心的使命感,每當(dāng)我們?cè)跇?biāo)準(zhǔn)化多做一點(diǎn)點(diǎn),就能降低開(kāi)發(fā)者很多成本?;氐綀F(tuán)隊(duì),我第一時(shí)間找核心骨干溝通促成Weex技術(shù)委員會(huì)的成立,致力于推動(dòng)標(biāo)準(zhǔn)化、規(guī)范化在項(xiàng)目落地。
Weex的雙十一大考
進(jìn)入8月底,阿里雙十一的壓力撲面而來(lái)。Weex代替H5成為雙十一終端基礎(chǔ)渲染解決方案,是Weex團(tuán)隊(duì)的唯一且最重要的任務(wù)。
如何力保雙十一Weex的穩(wěn)定性和性能、滿(mǎn)足業(yè)務(wù)的需求、打通研發(fā)生產(chǎn)監(jiān)控的全鏈路、保證業(yè)務(wù)代碼落地最佳實(shí)踐和性能達(dá)標(biāo)、大量不斷推敲的降級(jí)方案和反復(fù)演練,鬼道、勾股帶領(lǐng)團(tuán)隊(duì),跟雙十一會(huì)場(chǎng)團(tuán)隊(duì)一起,在聯(lián)合項(xiàng)目室一扎就是2個(gè)多月。壓力很大,沒(méi)有退路,唯有不斷往前,一旦雙十一Weex被降級(jí),近百人的努力將全部白費(fèi)。
非常幸運(yùn),加上我們也足夠努力,很慶幸Weex扛住了雙十一這次大考的磨礪,交出一份不錯(cuò)的答卷:Weex在雙11會(huì)場(chǎng)中的覆蓋率接近99%,頁(yè)面數(shù)量接近2000,覆蓋了包括主會(huì)場(chǎng)、分會(huì)場(chǎng)、分分會(huì)場(chǎng)、人群會(huì)場(chǎng)在內(nèi)幾乎所有的雙11會(huì)場(chǎng)業(yè)務(wù)。雙十一主會(huì)場(chǎng)秒開(kāi)率97%,全部會(huì)場(chǎng)頁(yè)面達(dá)到93%。
奇妙的事情也在這個(gè)期間發(fā)生,有時(shí)候當(dāng)你努力到一定程度的時(shí)候,奇跡也會(huì)悄然降臨。
如愿以?xún)?,進(jìn)入Apache基金會(huì)
前面提到,我們從8月開(kāi)始Apache準(zhǔn)備工作過(guò)程,一直苦尋Champion而不得。JStrom的老紀(jì)在10月11日的時(shí)候,幫忙在Apache社區(qū)發(fā)了封“Seek one Champion for incubating Weex project”的郵件,郵件石沉大海。大家一度失望,中間我們還嘗試給JS Foundation發(fā)郵件詢(xún)問(wèn)相應(yīng)項(xiàng)目孵化流程,也沒(méi)有得到回復(fù)。
直到11月3號(hào)奇跡悄然發(fā)生,Benjamin Young(Weex的Champion,W3C Invited Expert)給我們回復(fù)一封郵件提寫(xiě)到:
Were you all able to find a Champion for the Incubator? I’d hate to see this great project miss out on benefiting from the Apache Way.
記得正好是周四晚上10點(diǎn)我看到這封郵件,忍不住興奮給勾股電話(huà)告知這個(gè)好消息。天道酬勤,找到了Champion之后,接下來(lái)的Proposal提交、社區(qū)發(fā)起討論和投票的過(guò)程都順利的不可思議,最終我們很幸運(yùn)得以入駐Apache孵化器( http://incubator.apache.org/projects/weex.html )。
我一直反復(fù)跟團(tuán)隊(duì)講,今天Weex在業(yè)界有一些技術(shù)影響力和社區(qū)關(guān)注,不是我們做的有多好,相反,很多事情我們做的也不好。只是很幸運(yùn)或許是這個(gè)項(xiàng)目方向選對(duì)了,我們獲得了集團(tuán)和業(yè)界技術(shù)人的大量關(guān)注和支持,所以才有機(jī)會(huì)做好這第一步。
回歸初心,我們才剛剛開(kāi)始。堅(jiān)持標(biāo)準(zhǔn)的路不好走,希望業(yè)界有更多朋友一起同行,但我們堅(jiān)信路走對(duì)了就不怕遠(yuǎn)。
回想起這十年,大量技術(shù)人在跨平臺(tái)GUI、移動(dòng)應(yīng)用程序動(dòng)態(tài)性上做的努力、完善移動(dòng)瀏覽器技術(shù)再到HTML5標(biāo)準(zhǔn)、從非智能操作系統(tǒng),到WebOS再到iOS/Android系統(tǒng)上不斷追逐界面UI繪制和業(yè)務(wù)表達(dá)效率的提升,再到今天的RN/Weex。一切看起來(lái)像是一個(gè)輪回,技術(shù)總是曲折往前但不會(huì)簡(jiǎn)單重復(fù)。