首页 > 其他分享 >Hybrid App 技术路径带动性能的提升

Hybrid App 技术路径带动性能的提升

时间:2023-08-08 17:45:52浏览次数:37  
标签:缓存 DOM App 路径 Hybrid 使用 JavaScript

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

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

标签:缓存,DOM,App,路径,Hybrid,使用,JavaScript
From: https://www.cnblogs.com/finbird/p/17615000.html

相关文章

  • Visual Studio 修改NuGet 包路径
    目的:通过NuGet安装包时,NuGet先将包下载至一个统一的目录,默认路径是:C:\Users\{用户名}\.nuget\packages。现在需要将其迁移到目录E:\nuget\packages步骤1、在C:\ProgramFiles(x86)\NuGet\Config目录中找到Microsoft.VisualStudio.Offline.config。在文件末尾添加一......
  • 家政app小程序开发
      随着互联网的普及和智能手机的普及,家政服务行业也开始借助互联网的力量来提高服务质量和效率。家政app小程序应运而生,成为了家政服务行业的新宠。  家政app小程序是一种基于微信小程序技术开发的应用程序,具有使用方便、无需下载、使用快捷等特点。通过家政app小程序,用户......
  • 上门服务家政小程序app软件开发
       人们生活水平的提高,越来越多的人开始享受家政服务带来的便利。为了满足市场需求,上门服务家政小程序app软件应运而生。这种app软件不仅可以为用户提供更加便捷的服务,同时也为家政行业的发展注入了新的活力。  首先,上门服务家政小程序app软件可以为用户提供更加全面的服......
  • appium + python | UI 自动化测试
     tradeBtns=(By.ID,"com.hexin.plat.android.MinShengSecurity.test:id/title")self.driver.find_elements(tradeBtns)[3].click()不支持以上语法。......
  • @RequestMapping(value = "/testxml", produces = {"application/xml; charset=UTF-8"
    这行代码是使用SpringFramework的注解来配置一个用于处理HTTP请求的方法。具体来说,这是一个用于处理GET请求的方法,路径为"/testxml"。让我为你解释其中的含义:@RequestMapping:这是SpringFramework提供的注解,用于将一个方法映射到特定的请求路径。在这个例子中,它将......
  • Request.url请求路径的一些属性
    https://blog.csdn.net/u012726702/article/details/51737795Request.url请求路径的一些属性1,Request.UrlReferrer.AbsolutePath=获取URL的绝对路径例:"/Manager/Module/OfficialManage/Issuedadocument/Issuedadocument_WorkNew.aspx"2,Request.UrlReferrer.AbsoluteUri=获取绝......
  • 遇到问题---hadoop--Remote App Log Directory does not have same value for the 4 N
    情况因为我们的某台服务器空间不足,暂时清理不出来,所以需要修改一些存放数据的日志目录等。修改完毕之后发现报错错误的配置RemoteAppLogDirectorydoesnothavesamevalueforthe4NodeManagers。原因一般来说不同的主机不要求配置的目录一致,但是yarn.nodemanager.remote......
  • uniapp vuex用法详细讲解
    uni-app小程序项目三1.商品列表、过滤器、封装商品item组件、上拉加载、节流阀、下拉刷新、2.商品详情、轮播图、商品价格闪烁问题3.加入购物车、vuex、持久化存储、mixiins_小程序商品列表加载_Hyman-ya的博客-CSDN博客......
  • .net core 单文件发布,找不到appsettings.json的问题
    解决方案config.SetBasePath(GetBasePath());config.AddJsonFile("appsettings.json",false);privatestringGetBasePath(){usingvarprocessModule=Process.GetCurrentProcess().MainModule;returnPath.GetDirectoryName(processModule?.FileName......
  • 路径规划算法:基于跳蛛优化的机器人路径规划算法- 附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......