Hybrid App 可以从哪些技术路径实现性能优化

news2024/11/25 12:49:35

说到 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」。

这个模式也是符合用户越来越重视各个产品使用体验的趋势,「原生+小程序」更优质的混合开发模式也会更多的受到开发者的关注和认可。

其他的大佬们还有什么好的办法呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

compile_and_runtime_not_namespaced_r_class_jar\debug\R.jar: 另一个程序正在使用

问题情况: run App的时候,提示该文件被占用 想要clean Project,还是提示该文件被占用,这个文件和连带的文件夹都无法被删除。 方法1: AndroidStudio下方的terminal(没有这个窗口的话,从上面的…

Java源码-Context源码解析

您好,我们来一起了解一下Java源码中的Context源码解析。 Context是Android中的一个重要的概念,在Android开发中可以用来获取应用程序的各种信息,如Activity、Service、Application等等。在Android中,Context是一个抽象类&#xf…

虚拟机centos7配置网络

虚拟机centos7配置网络 centos7克隆之后需要配置网络才能联网。 实验环境: VMware Workstation Pro 16CentOS 7系统虚拟机主机Windows 11系统 1.VMware网络模式设置为NAT模式 虚拟机–设置–网络适配器– ​​ ‍ 2.查看虚拟机 子网IP和网关IP 编辑–虚拟网…

AcWing 129:火车进栈 ← DFS

【题目来源】https://www.acwing.com/problem/content/131/【题目描述】 这里有 n 列火车将要进站再出站,但是,每列火车只有 1 节,那就是车头。 这 n 列火车按 1 到 n 的顺序从东方左转进站,这个车站是南北方向的,它虽…

【vue3】基础知识点-组合式api-recative和ref函数

学习vue3,都会从基础知识点学起。了解setup函数,ref,recative,watch、computed、pinia等如何使用 今天说vue3组合式api,响应式函数recative和ref函数 recative函数:接收对象类型数据的参数传入&#xff0…

激光雷达测距和摄像头联合棋盘格反射率标定板

目前,激光雷达不仅在军事上起到了重要的作用,而且发挥其测程大、精度高、反应速度快、可靠性高等优点,在商业领域应用越来越广,发展越来越迅速,具有较高的实用价值和商业价值。车载三维成像激光雷达采用脉冲式测量原理…

【PCL-6】PCL基于凹凸型的分割算法

凹凸型分割算法适用于颜色类似、棱角分明的物体场景分割。 算法流程&#xff1a; 1、基于超体聚类的过分割&#xff1b; 2、在超体聚类的基础上再聚类。 示例代码&#xff1a; //超体聚类LCCP //#include "stdafx.h"#include <stdlib.h> #include <cm…

Linux 安装软件的几种方式

哈喽大家好&#xff0c;我是咸鱼 相信小伙伴们都知道在 Linux 中&#xff0c;安装软件一般有三种方式 yum 安装rpm 安装源码编译安装 咸鱼平时三种安装方式都会用&#xff0c;但是具体原理和区别却没有去深入了解过 结果上周部门刚来的新人问我这几种安装方式的时候&#x…

连续四年入选!三项荣耀!博云科技强势上榜Gartner ICT技术成熟度曲线

日&#xff0c;全球知名咨询公司Gartner发布了2023年度的《中国ICT技术成熟度曲线》&#xff08;《Hype Cycle for ICT in China, 2023》&#xff0c;以下简称“报告”&#xff09;。令人瞩目的是&#xff0c;博云科技在报告中荣获三项殊荣&#xff0c;入选云原生计算&#xff…

【linux-keepalive】keepalive避免单点故障,高可用配置

keepalive: [rootproxy ~]# yum install -y keepalived [rootproxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id proxy1 //设置路由ID号vrrp_iptables //不添加任何防火墙规则 } vrrp_instance V…

HTTP Status 404 – 未找到

这HTTP Status 404 – 未找到 我的问题就是啥呢 这里已经提示了原因有两个&#xff1a; ①&#xff1a;找不到 ②&#xff1a;资源被占用 我的问题就是找不到&#xff0c;找不到的问题也就说可能是文件路径不对&#xff0c;也可能是文件名不对&#xff0c;仔细检查两遍 apac…

Visual Studio实用调试技巧---让你成为高端的程序员

​ &#x1f341; 博客主页:江池俊的博客 &#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;GeekHub &#x1f341; 如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏&#x1f31f; 三连支持一下博主&#x1f49e; 文章目录…

链式二叉树统计结点个数的方法和bug

方法一&#xff1a; 分治&#xff1a;分而治之 int BTreeSize1(BTNode* root) {if (root NULL) return 0;else return BTreeSize(root->left)BTreeSize(root->right)1; } 方法二&#xff1a; 遍历计数&#xff1a;设置一个计数器&#xff0c;对二叉树正常访问&#…

Spring 是如何解决循环依赖问题的?

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;项目场景&#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信&#xff0c;每隔 5s 传输一批传感器数据(不是很大) 问题描述 我们都知道&#xff0c;如果在代码中&#xff0c;将两个…

高忆管理:券商板块探底回升,大市值券商企稳,中信建投涨超5%

近日活泼的券商板块8日盘中大幅回落&#xff0c;哈投股份一度跌停&#xff0c;后探底上升。大市值券商企稳&#xff0c;截至发稿&#xff0c;中金公司触及涨停&#xff0c;中信建投涨超5%。 首创证券一度大跌近9%&#xff0c;此前接连三日涨停&#xff0c;公司昨日晚间公告称&a…

【Vue】全家桶之vue-devtools

文章目录 概述安装使用componentsVuexEventsRoutingPerformanceSettings 来源 概述 Vue Devtools 是 Vue 官方发布的调试浏览器插件&#xff0c;可以安装在 Chrome 和 Firefox 等浏览器上&#xff0c;直接内嵌在开发者工具中&#xff0c;使用体验流畅。Vue Devtools 由 Vue.js…

9-数据结构-栈(C语言版)

数据结构-栈&#xff08;C语言版&#xff09; 目录 数据结构-栈&#xff08;C语言版&#xff09; 1.栈的基础知识 1.入栈&#xff0c;出栈的排列组合 情景二&#xff1a;Catalan函数&#xff08;计算不同出栈的总数&#xff09; 2.栈的基本操作 1.顺序存储 (1)顺序栈-定义…

在QT及VS运行包含opencv的cmakelists实例

本文分享如何利用QT和Visual Studio运行cmake组织管理的程序&#xff0c;也就是运行cmakelists.txt。 main和cmakelists内容 main和cmakelists文件路径如下&#xff1a; main.cpp #include<opencv2/opencv.hpp> #include<iostream> #include <string> usi…

ElementPlus 自定义主题(Vite4 + Vue3)

配置 ElementPlus 主题的时候遇到 SCSS 循环导入的报错&#xff0c;排查后发现是以为在 main.ts 和 vite.config.ts 中引入了两次自定义主题的样式文件&#xff0c;解决方法很简单&#xff0c;去掉 main.ts 中导入自定义主题的文件即可。这个问题发生在按需导入的时候&#xff…

vue实现大转盘抽奖

本案例为在小程序中实现的转盘抽奖&#xff0c;其他手机端项目思路类似。 注意&#xff1a; 转盘上的东西是由后台web项目里的配置页进行配置的&#xff0c;可以配置每个位置的奖品&#xff0c;中奖概率等。此文章只讲了抽奖转盘的实现&#xff0c;配置可根据真实需求进行开发…