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

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

Hybrid App 技术路径带动性能的提升的更多相关文章

  1. Hybrid App技术解析 — 原理篇

    Hybrid App技术解析 — 原理篇 原文出处:   https://segmentfault.com/a/1190000015678155 引言 随着 Web 技术和移动设备的快速发展,Hybr ...

  2. Hybrid App技术批量制作APP应用与跨平台解决方案

    前言 简单的聊一聊我开发了4年之久的Hybrid App(混合模式移动应用)平台开发,目前一直在持续开发与维护,支持无编程快速开发! 其本意也不是要吹捧前端有多么强大,只是用自己的实际项目阐述下对于前 ...

  3. 【Hybrid App】关于Hybrid App技术解决方案的选择

    [引言]近年来随着移动设备类型的变多,操作系统的变多,用户需求的增加,对于每个项目启动前,大家都会考虑到的成本,团队成员,技术成熟度,时间,项目需求等一堆的因素.因此,开发App的方案已经变得越来越多 ...

  4. hybrid app

    hybrid app Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台 ...

  5. 【转载】用Ionic开发hybrid APP

    使用phonegap开发APP的优劣在此不必细说,快速,简单,跨平台,以及随着iOS,Android本身对webview优化所带来的不错的性能,便是其独有的优势.而且私以为在目前激烈而又变化快速的移动 ...

  6. App技术框架

    一.App技术框架的类型 图1 三种App技术框架之间的关系 目前App的技术框架基本分为三种(图1): (1)Native App:互动型,iOS.Android.WP各一套,而且要维护历史版本,要 ...

  7. 你得知道这3个最基础的APP技术框架

    出处:优设网作者:信籽链接:http://www.uisdc.com/3-basic-app-technical-framework 信籽(手淘设计师):不知道大家有没有遇到过这种情景,当你做好一个设 ...

  8. Hybrid App是如何实现网页语言与程序语言的混合?谁占主体?

    [编者按]本文作者@徐珂铭,一位看好Html5的移动互联网的从业人士.喜爱玩技术,会点JAVA.HTML及CSS,有自己的想法及姑且能表达想法的文字,因此有了自己的文章. 基于HTML5的Web Ap ...

  9. Hybrid app本地开发如何调用JSBridge

    前天同事问我公司内部的小程序怎么对接的,我回忆了一下,简单记录了一下前端同学需要注意的点. 背后还有小程序架构.网络策略等等.当时恰逢小程序架构调整,(老架构的时候我就发现了有一个问题点可以优化,但是 ...

  10. [转]iOS hybrid App 的实现原理及性能监测

    转自:http://www.cocoachina.com/ios/20151118/14270.html iOS hybrid App 的实现原理及性能监测 2015-11-18 11:39 编辑:  ...

随机推荐

  1. vue全家桶进阶之路44:Vue3 Element Plus el_row和el_col组件

    在 Vue 3 中,Element Plus 也提供了 ElRow 和 ElCol 组件,用于实现栅格布局. ElRow 组件的常用属性: gutter:栅格间距,默认为 0. type:布局模式,可 ...

  2. springboot 整合druid和mybatis

    Shrio+Mybatis+Druid 1.导入相关依赖包 2.在配置文件配置数据源 3.pojo对应实体类和mapper目录下的接口UserMapper (3.使用注解版) package com. ...

  3. 执行pod setup 报错error: RPC failed; curl 18 transfer closed with outstanding read data remainin

    执行pod setup 报错 error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal ...

  4. 研究NIST 800-53B信息系统和组织的控制基线

    简介 800-53B是800-53的定制版本.为低.中.高影响的系统提供了安全与隐私控制手段.对于所有企业,定制控制手段不是强制的,必须的,可以参考NIST SP 800-37(800-37)提供了关 ...

  5. rest-framework 视图类源码分析

    从miminx 类开始,依次有子类RetrieveModelMixin(单个get 请求)) ,ListModelMixin(LIST请求),CreateModelMixin(POST请求),Upda ...

  6. .NET周报 【5月第4期 2023-05-27】

    国内文章 C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地之openai接口平替 https://www.cnblogs.com/gmmy/p/17430613. ...

  7. R数据分析:多项式回归与响应面分析的理解与实操

    今天给大家分享一个新的统计方法,叫做响应面分析,响应面分析是用来探究变量一致性假设的(Congruence hypotheses).本身是一个工程学方法,目前在组织行为学,管理,市场营销等等领域中使用 ...

  8. celery笔记二之建立celery项目、配置及几种加载方式

    本文首发于公众号:Hunter后端 原文链接:celery笔记二之建立celery项目.配置及几种加载方式 接下来我们创建一个 celery 项目,文件夹及目录如下: proj/__init__.py ...

  9. 自定义 coding.net 静态网站域名

    点击文章左下角 "阅读原文",预览本文章的示例站点. 在上一篇文章<使用 coding.net 发布你的个人博客>,我们介绍了怎么在 coding.net 部署个人的静 ...

  10. “古老”编程语言的最新选择!华为云发布CodeArts IDE for C/C++

    摘要:华为云CodeArts IDE for C/C++正式上线,欢迎体验. 本文分享自华为云社区<"古老"编程语言的最新选择!华为云发布CodeArts IDE for C ...