uni-app在跨平臺小程式中的實踐

来源:https://www.cnblogs.com/88223100/archive/2023/01/31/practice-of-uni-app-in-cross-platform-applet.html
-Advertisement-
Play Games

隨著移動互聯網的高速發展,各家大廠的小程式百花齊放,在用戶規模及商業化方面都取得了極大的成功。微信小程式的日活超過5億,其他追趕者如:支付寶、百度、位元組跳動小程式的月活也紛紛超過3億。鑒於小程式相比App,無需下載等待,有更高的激活率,相比H5有更好的下單轉化率,汽車報價業務線藉助各平臺的優勢,大力... ...


 

 1. 背景 

隨著移動互聯網的高速發展,各家大廠的小程式百花齊放,在用戶規模及商業化方面都取得了極大的成功。微信小程式的日活超過5億,其他追趕者如:支付寶、百度、位元組跳動小程式的月活也紛紛超過3億。鑒於小程式相比App,無需下載等待,有更高的激活率,相比H5有更好的下單轉化率,汽車報價業務線藉助各平臺的優勢,大力發展小程式業務。

目前國內頭部應用中,有一半以上部署了小程式。整個小程式生態現在有騰訊、阿裡巴巴、百度、位元組跳動、手機廠商、京東、360、美團、網易等9大類。然而各家平臺的開發規範完全不一樣,同時研發幾家主流平臺的小程式和快應用,對於研發團隊提出了挑戰,在前端團隊人數有限的情況下,如何能搞定諸多平臺的小程式是擺在我們面前的難題。

 

 2. 技術選型 

任何框架都首先要服務於實際業務需求,技術的選型也需根據研發團隊成員的技術方向和具體情況而定,對於項目建設而言技術框架沒有最好的只有最適合的。我們從核心需求、技術棧、支持跨平臺小程式、運行性能、社區生態、開發工具等幾方面對市面上的開發框架進行預研和對比。

 

2.1

核心需求

由於研發資源有限,在沒有額外人力增加的情況下,原來的H5研發人員要同時承擔跨平臺小程式的開發,核心需求是提高研發效率。經過調研,市面上支持跨平臺小程式的主流框架有uni-app和taro,本文主要針對這兩種開發框架進行對比。

 

2.2

uni-app和taro的共同點

 taro是京東開發的多端統一開發框架,支持用 react 編寫一次代碼,生成能運行在微信/百度/支付寶/位元組跳動小程式、H5、React Native 等的應用。uni-app 是DCloud開發的使用 vue.js 開發跨平臺應用的前端框架,開發者編寫一套代碼,可編譯到iOS、Android、H5、小程式等多個平臺。由於筆者所在部門有專門的App原生開發人員,從性能角度來考慮,不需要開發框架支持App端,焦點主要集中在支持小程式和H5方面。兩者具有如下共同點:

  • 均支持微信、百度、支付寶、位元組跳動等小程式及H5;

  • 均支持使用 npm/yarn 安裝管理第三方依賴;

  • 均支持使用 ES6 甚至更新的ES規範;

  • 均支持使用 less/scss/ts 等預編譯器;

  • 均支持進行應用狀態管理,taro 支持 Redux/Mobx,uni-app 支持 vuex。

     

2.3

uni-app和taro各自優缺點

圖片

前端團隊人數有限的情況下,相對react,我們團隊更熟悉vue技術棧,學習成本更低,開發時間和風險更低,且uni-app在不同平臺運行相容性更好,有官方推薦的IDE,所以我們決定使用uni-app作為跨平臺小程式的開發框架。

 

 

 3. 應用案例 

3.1

uni-app的項目結構

一個uni-app工程,預設包含如下目錄及文件:

圖片

圖 1 uni-app 項目結構

 

3.2

渲染引擎

uni-app有2種渲染引擎:基於weex的原生渲染,以及webview渲染。

如果使用 vue 頁面,則使用 webview 渲染;如果使用 nvue 頁面(native vue 的縮寫),則使用原生渲染。

如果你不開發 App,那麼不需要使用 nvue。雖然 nvue 也可以多端編譯,輸出 H5 和小程式,但 nvue 的 css 寫法受限,所以如果不需要支持App的情況下,就不需要使用 nvue。在 App 端某些 vue 頁面表現不佳的場景下使用 nvue 作為強化補充。

 

3.3

uni-app與vue開發的區別

雖然uni-app遵循了vue語法,但是還是存在一些差異:

 

【DOM標簽不一樣】

  • div 改成 view;

  • span、font 改成 text;

  • a 改成 navigator;

  • img 改成 image;

  • select 改成 picker;

  • iframe 改成 web-view;

  • ul、li沒有了,都用view替代。做列表一般使用uList組件。

     

【生命周期函數不一樣】

uni-app在原來vue的生命周期函數上又新增了很多新的函數;

uni-app 支持 onLaunch、onShow、onHide 等應用生命周期函數;

uni-app 支持 onLoad、onShow、onReady 等生命周期函數。

生命周期執行順序為: App.vue: onLaunch(應用) ->  App.vue: onShow(應用)-> index.vue: onLoad(頁面)-> index.vue: onShow(頁面)-> index.vue: created(vue)-> index.vue: onReady(頁面)-> index.vue: mounted(vue)-> index.vue: updated(vue)

-> App.vue: onHide(應用)-> index.vue: onHide(頁面)-> App.vue: onError(應用)。

 

【安裝第三方庫問題】

原來vue項目中通過npm install安裝的第三方庫,大多數無法直接在uni-app中使用,需要在uni-app的插件市場找類似的庫。

另外uni-app 在非 H5 端不支持window、document、navigator 等瀏覽器的對象,以及cookie等瀏覽器特性。

 

3.3

實際運行效果

通過實際驗證,基於uni-app開發的代碼分別發佈為微信小程式、百度小程式、快手小程式、位元組小程式等後,相容性不錯。對於一些平臺特性,還可以通過條件編譯,實現各平臺差異化編譯,調用各平臺的特色功能,如適配各平臺的獲取用戶信息、獲取用戶手機號等方法。其中頂部導航欄個性化定製在位元組小程式中預設不開放,需要小程式主體信用分大於90分,評級達到S,才可以申請。而微信小程式、百度小程式、快手小程式均預設支持。

圖片

圖2 汽車報價小程式在各平臺的運行效果

 

 4. 應用效果和收益

汽車報價業務線目前基於uni-app已經同時支持微信小程式、百度小程式、位元組小程式、快手小程式等多個平臺,後續還將擴展其它平臺的小程式及快應用。在熟練掌握uni-app的語法和工具後,研發效率可以提3-4倍以上。後續我們將基於uni-app框架實現可視化編輯工具,通過豐富的組件可視化拖拽生成小程式,進一步提高小程式和H5頁面的研發效率。

 

作者|張慧吉、伍新生

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/practice-of-uni-app-in-cross-platform-applet.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 相信大家看過不少講C# async await的文章,博客園就能搜到很多,但還是有很多C#程式員不明白。 如果搞不明白,其實也不影響使用。但有人就會疑惑,為什麼要用非同步?我感覺它更慢了,跟同步有啥區別? 有的人研究深入,比如去研究狀態機,可能會明白其中的原理。但深入研究的畢竟少數。有的人寫一些 ...
  • 由於一些客戶的內部系統需要提取一些記錄信息,如果手工錄入會變得比較麻煩,因此考慮使用百度雲的OCR進行圖片文字的提取處理,綜合比較了一下開源免費的Tesseract 類庫進行處理,不過識別效果不太理想,因此轉為了百度的OCR雲介面處理方式,測試的效果比較理想,基本上較少出現錯別字。本篇隨筆介紹如何利... ...
  • 1.背景知識 CRLF用來表示文本換行的方式 ,CR是回車的意思,對應 \r ;LF 是換行的意思,對應 \n Windows 換行符是 \r\n Unix 換行是 \n 如果一個將要在Linux伺服器上使用的文件,比如某個配置文件,在windows電腦打開,編輯過,那麼文件每一行末尾會多有\r 。 ...
  • MySQL中既存在redo log,又存在bin log,這是因為bin log是MySQL Server提供的一種歸檔日誌,其本身並不具備crash-safe能力。而redo log本身不具備歸檔能力,他是一種迴圈寫的日誌。 MySQL通過將這兩種日誌整合起來,並通過兩階段提交的機制,保證了數據... ...
  • 一:背景 1. 講故事 相信絕大部分用 SQLSERVER 作為底層存儲的程式員都知道 nolock 關鍵詞,即使當時不知道也會在踩過若幹阻塞坑之後果斷的加上 nolock,但這玩意有什麼註意事項呢?這就需要瞭解它的底層原理了。 二:nolock 的原理 1. sql 阻塞還原 為了方便講述,先創建 ...
  • Redis 每秒可以處理超過 10 萬次讀寫操作,是已知性能最快的 key-value 資料庫,稱得上是必須要學會的知識。 ...
  • 華為 HMS Core 音頻編輯服務(Audio Editor Kit)是華為幫助全球開發者快速構建各類應用音頻能力的服務,匯聚了華為在音樂、語音等相關音頻領域的先進技術。音頻編輯服務為開發者們提供音頻基礎編輯、AI配音、音源分離、空間渲染、變聲、多種音效等豐富的音頻處理能力,以及性能優異、簡單易用 ...
  • 一、前言 你可以使用任意文本編輯器,再結合命令行工具來開發 Flutter 應用。然而,我們推薦使用本文接下來介紹的編輯器插件以獲取更好的開發體驗。這些插件提供了代碼補全、代碼高亮、widget 輔助編輯的功能,以及為項目的運行和調試提供支持等。 推薦的開發工具有 VS Code、Android S ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...