Hybrid App 技術路徑帶動性能的提升

来源:https://www.cnblogs.com/finbird/archive/2023/08/08/17615000.html
-Advertisement-
Play Games

說到 Hybrid App(混合應用)大家都不陌生,因為這種開發模式大行其道發展的這些年取代了很多原生和 Web 應用,為什麼大家對這種「Native + HTML5」的開發模式額外偏愛呢? 因為一方面在一定程度上兼顧了原生應用的優質體驗,另一方面又兼顧到了 HTML5 靈活的開發模式。 這種模式的 ...


說到 Hybrid App(混合應用)大家都不陌生,因為這種開發模式大行其道發展的這些年取代了很多原生和 Web 應用,為什麼大家對這種「Native + HTML5」的開發模式額外偏愛呢?

因為一方面在一定程度上兼顧了原生應用的優質體驗,另一方面又兼顧到了 HTML5 靈活的開發模式。

這種模式的核心就在於使用了 HTML、CSS 和 JavaScript 語言進行編寫,繼而封裝到原生應用中,這個模式下應用不是在用戶的瀏覽器中顯示,而是在本地應用程式和自己的嵌入式瀏覽器中運行,用戶基本上看不到它。例如,iOS 應用程式將使用 WKWebView 來顯示我們的業務功能,而在 Android 上,它將使用 WebView 元素來實現相同的功能。

不過既然說到 Hybrid App 的核心在於使用 WebView 來實現業務功能的對外展示,那有瀏覽器也必然存在大大小小的毛病,至少說和原生頁面的體驗會有較為明顯的差異。

那是否有方式能夠縮小(或者說一定程度上彌補)和原生的性能差距呢?這也是今天希望進行探討的。

提升載入速度

體驗過 Hybrid App 的都知道,最煩人的就是長時間的白屏載入,背後的原因就是頁面載入速度過慢造成的,所以我第一個關註點就是載入速度。

在 Hybrid App 中,一般是可以通過減少 HTTP 請求、壓縮文件、使用緩存等方法來提升載入速度。

1、減少HTTP數量

我主要想分享兩個辦法,一是可以將多個小的 JavaScript 或 CSS 文件合併為一個文件,從而實現減少請求的數量的目的,但也要註意合併文件時,需要平衡文件的大小和併發請求的數量。第二個辦法是對於多個 icon 或圖片,將它們合併到一個雪碧圖(Sprite Sheets)中,然後使用 CSS 的 background-position 屬性來顯示不同的圖標,這個辦法也可以在一定程度上減少多個圖標的 HTTP 請求。

2、壓縮文件大小

在 Hybrid App 中可以通過使用 ImageOptim、UglifyJS 等壓縮工具減少壓縮文件的大小,當然也可以在伺服器端啟用 Gzip 和 Brotli 進行壓縮,這也能夠將在傳輸過程中的資源文件進行壓縮,從而減少網路傳輸量。

3、設置緩存策略

我們可以設置合理的緩存策略,緩存策略比較多:瀏覽器緩存、服務端緩存、本地緩存、緩存清除、緩存優先順序等都可以作為我們的緩存策略,這裡以瀏覽器的緩存機製為例,我們可以將一些常用的文件存儲在用戶的設備上,從而減少網路請求提升載入速度。

優化 JavaScript 性能

JavaScript 是 Hybrid App 中最主要的執行環境,因此 JavaScript 的性能也直接影響到整個 App 的性能。

對於 JavaScript 的性能優化,我主要想到的是2個點:

1、減少 DOM 操作

應該大家都知道頻繁的 DOM 操作會引起重排 reflow 和重繪 repaint ,自然而然的也會影響 App 的性能,這裡推薦批量更新和離線 DOM 來減少操作次數。

批量更新顧名思義就是將多次 DOM 操作合併為一次,再通過一次性更新多個元素,達到減少重排和重繪的效果。一般可以使用 Fragment 文檔片段 來批量添加多個元素,然後一次性插入到 DOM 中。

另外還可以試試離線 DOM 操作,在 DOM 外部進行修改再將修改的部分一次性添加到 DOM,主要可以通過使用字元串拼接、模板引擎、虛擬 DOM 等方式來實現。

2、避免記憶體泄漏

另外還有一個比較重要且需要註意的是 JavaScript 的記憶體管理,在整個管理環節避免記憶體泄漏的問題出現,我們除了可以使用工具來監控記憶體使用情況,還有一些使用的技巧需要註意。例如減少全局變數的使用、手動解除引用 null 、避免迴圈使用引用等。

寫在後面

當然 Hybrid App 性能優化是一個比較複雜的過程,可以實踐的途徑還有其他的角度,像是 WebView 優化是一個非常重要的部分,也是一個值得後續詳細展開細講的部分,這篇文章就先不對 WebView 優化做過多的介紹了。

另外需要說明一點隨著小程式容器技術的持續推動,新的移動混合應用方式「Native+小程式」也開始受到關註,其實技術原理就是以非入侵性的方式把 FinClip SDK 嵌入到現有的 App,讓App 具備小程式運行能力,從而轉變為「Native+小程式」的混合開發模式,這個模式的使用體驗會明顯的好於「Native + HTML5」。

這個模式也是符合用戶越來越重視各個產品使用體驗的趨勢,「原生+小程式」更優質的混合開發模式也會更多的受到開發者的關註和認可。


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

-Advertisement-
Play Games
更多相關文章
  • NineData 是一款功能強大的資料庫對比工具,能夠幫助企業追蹤資料庫的變化、發現問題並快速修複。相比其他工具,NineData 具有以下優勢:即開即用、全面的數據源支持、完善的對比功能、快速高效、可視化界面、一鍵差異修複、免費使用、安全可靠。使用 NineData,您可以快速配置對比任務、查看對... ...
  • MySQL 和 Elasticsearch 是兩種不同的數據管理系統,它們各有優劣,適用於不同的場景。本文將從以下幾個方面對它們進行比較和分析: - 數據模型 - 查詢語言 - 索引和搜索 - 分散式和高可用 - 性能和擴展性 - 使用場景 ## 數據模型 MySQL 是一個關係型資料庫管理系統(R ...
  • 本篇文章主要是對方案性能優化2.0中,所做的緩存設計的過程、方案、結果做一個總結。 一、前言 對於方案中心,核心業務場景之一是物流場景下的物流費用計算。而部分業務場景下,對於物流費用計算的性能有較高要求,如ICBU網站運費模板鏈路,通方案中心計算快遞、海拼物流費用。在接入新的流量場景的背景下(ICB ...
  • 作為開發公司,我們開發完APP,如何發給客戶下載測試呢?安卓APP可以通過QQ直接發送給客戶,客戶可以在QQ內直接點擊安裝。 但是現在很多客戶都不用QQ,用微信的居多。而通過微信直接發送安卓APP安裝包(apk)的話,是不可以像QQ那樣直接點擊安裝的。這就需要我們把APP生成二維碼提供給客戶下載安裝 ...
  • > 本文首發於[掘金](https://juejin.cn/post/7264128388288708664),未經許可禁止轉載 Vuex4 是 Vue 的狀態管理工具,Vuex 和單純的全局對象有以下兩點不同: 1. Vuex 的狀態存儲是響應式的 2. 不能直接改變 store 中的狀態。改變 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 我們經常會遇到一個場景,比如在一個列表中批量獲取用戶的信息。 如果我們一次性往後端發送幾十條請求是非常愚蠢的事情。此時我們就要學會如何使用批量獲取的邏輯。 但是批量獲取有一個問題就是,我需要在用戶列表項的上層去獲取,然後再把結果分發給下層 ...
  • 分享的 WebStorm 2023.2 最新激活註冊碼,可免費永久激活,親測有效,下麵是詳細文檔哦~ 申明:本教程 WebStorm 激活碼收集於網路,請勿商用,僅供個人學習使用,如有侵權,請聯繫作者刪除。若條件允許,希望大家購買正版 ! PS: 本教程最新更新時間: 2023年08月08日~ 前言 ...
  • 最近,群友分享了一個很有意思的效果: ![](https://img2023.cnblogs.com/blog/608782/202308/608782-20230808101320920-311621134.gif) 原效果的網址:[frosted-glass](https://frosted-g ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...