前段時間,豆瓣將自己的混合開發框架rexxar開源了。豆瓣可以說是在國內對html5實踐最早的一批公司,早在2023年的時候他們就應用了當時還顯得超前的web component概念開發了cardkit移動ui框架。在移動開發上,豆瓣也採用了混合開發的模式,rexxar就是他們實踐和思考的結晶。我採訪了rexxar的主要開發者之一郭麟,看看他們對混合開發的思考。
豆瓣使用混合開發的原因,是因為他們需要同時提供ios、android、移動web版本的頁面,相對於同時開發三個版本,使用混合開發顯然可以在**重用、開發成本和效率方面有很大的優勢,在權衡效能體驗的前提下,使用混合開發是非常現實的選擇。
rexxar是什麼
rexxar是乙個針對移動端的混合開發框架。支援android、ios和移動web。
rexxar主要由三部分組成:
rexxar目前已經開源,並且分為3個專案,你可以只使用其中某個專案來開發對應平台的**:
混合開發的注意點
對於混合開發,很多團隊都有過實踐,從大家分享的內容來看,重點無非以下幾類:
這些問題大部分已經有了最佳實踐,rexxar就是其中乙個解決方案。在混合開發中一般有兩種方案:純瀏覽器方案、前端模板渲染容器方案,rexxar則處於兩者之間。
rexxar的設計者對於rexxar使用場景有明確的定義:頁面是重度展示,並輕度互動的。所以,除了比較簡單的應用之外,如果對使用體驗有追求,大概很難僅僅用rexxar,或者其他某種混合開發完成。
rexxar的crash有兩種:
一種是webview的crash,這種錯誤webview自己無法捕獲,現在是通過fabric,umeng這種原生的crash收集系統收集。
他們也正在研究,在移動環境下如何定位rexxar頁面的錯誤,如何除錯,如何修正這些錯誤,並將其加入基礎設施裡面。
為什麼不用phongap/cordova
在混合開發中早已有了很成熟的方案,就是phonegap和它的後繼者cordoba. 為什麼豆瓣還要造自己的輪子呢?
郭麟說,如果hybrid方案定義為前端和原生技術的混合使用,那他們認為phonegap/cordova嚴格來說不算是hybrid方案,因為它的目標是全面使用前端技術開發移動應用,而不是前端和原生技術混合使用。但是,包括cordova,還可以加上react native,以及rexxar的目標是一致的:使用前端技術來開發移動應用,提高工程效率。
phonegap/cordova這個專案極具野心。它希望完全使用前端技術完成移動開發。所以,可以看到它盡力讓前端技術完成盡量多的開發工作,只在前端無法直接呼叫的原生系統功能方面提供了前端可用的介面。主流的phonegap/cordova專案將業務邏輯都實現在乙個webview中,目標是,讓開發者只使用前端技術就可以完成乙個移動應用的所有開發工作。這種做法需要有乙個前提:前端技術可以解決移動開發的所有需求。他們認為phonegap/cordova這個理念在現階段有些過於理想化了,或者說過於激進了。
rexxar則相對實際,或者說保守一些。郭麟表示,他們仍然認為,現階段,甚至在相當遙遠的未來,移動開發中前端技術都不太可能完全代替原生技術。但同時也承認,移動開發中總是存在部分功能是適合使用前端技術完成的。在他們的認識中,前端技術和原生技術應該是共存的。移動開發中,前端技術不會完全代替原生技術;而有了前端技術的加入,移動開發的效率會提高。基於這種認識,豆瓣開發了rexxar。
總結而言,如果rexxar和phonegap/cordova比較的話,大目標是一致的:使用前端技術開發移動應用。實現技術棧差不多:使用webview,提供呼叫原生功能的介面。但是,出發點不一樣。phonegap/cordova致力於完全使用前端技術進行移動開發;rexxar致力於在移動專案中部分使用前端技術。
移動開發者要學習前端技術
使用rexxar這類混合開發技術,使得團隊開發的技術棧向前端技術偏斜了。所以,較理想的配置是團隊中加入較優秀的前端工程師,由他來處理基礎設施的開發,和疑難問題的解決。同時,整個團隊需要理解混合開發所帶來的優勢,認可這個開發方式的轉變,並且願意學習和調整自己的技術棧。
rexxar與react native
豆瓣在實際使用rexxar的時候,使用react作為前端框架。對此郭麟解釋道,rexxar本身對前端框架的選擇沒有要求,只是他們選擇了react來實現業務層,而當時react native並未發布,經過對rn的了解後,他們並未否定使用rn的可能性。
在他們看來,react native同樣是一種使用前端技術開發移動應用的技術方案,這和他們開發rexxar的目的是一致的。只是,rexxar仍然在停留在瀏覽器引擎中,而facebook激進地脫離了沉重的瀏覽器引擎,架設了他們自己的web通向native的橋梁,這是乙個很大膽的方案。
當然,react native一直在發展和進步。如果,有一天react native和react可以在**級別移植,他們也許會嘗試從webview遷移到react native。畢竟webview的效能仍然弱於原生。
總結與展望
豆瓣將rexxar這個專案開源,一方面,是因為提高移動開發的工程效率是乙個普遍問題,而他們的實踐結果也證明rexxar確實幫助改善了工程效率。所以,他們認為rexxar應該能給大家提供一些借鑑的方向。另一方面,是為了提高專案本身的質量,沒有方案是完美的,rexxar也還存在不少問題。開源這個專案,促使他們提高了整個專案的**質量。同時,也更容易聽到大家的意見和建議。
混合開發app的思考
類別代表 react native jsx weex vue dcloud mui 5 sdk ionic angular cordova webview載入spa應用 瀏覽器載入spa應用 1.react native 接下來就是乙個乙個的嘗試,最早接觸過react native開發,就先說說它。...
Web開發 原生開發 混合開發的區別優勢
一 web 應用 web應用本質上是為移動瀏覽器設計的基於web的應用,它們是用普通web開發語言開發的,可以在各種智慧型手機瀏覽器上執行。優點 缺點 對於這些缺點,如果能把html 5的優點用到web上的話就會得到很大改善,儘管技術在提高,目前它還不能做原生應用可以做的每件事。二 原生應用 你使用...
web開發原生開發混合開發的區別優勢
一 web 應用 web應用本質上是為移動瀏覽器設計的基於web的應用,它們是用普通web開發語言開發的,可以在各種智慧型手機瀏覽器上執行。優點 缺點 對於這些缺點,如果能把html 5的優點用到web上的話就會得到很大改善,儘管技術在提高,目前它還不能做原生應用可以做的每件事。二 原生應用 你使用...