uni-app在跨平台小程序中的实践

yizhihongxing

uni-app在跨平台小程序中的实践

 

 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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:uni-app在跨平台小程序中的实践 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月19日

相关文章

  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus) 通过前面三篇文章的介绍,我们已经对.net co…

    C# 2023年5月7日
    00
  • android短信数据库监听回调多次问题

    在监听android短信数据库变化时。由于只能注册content://sms/ 的observer。所以,在数据库每次状态变化的时候,都会多次回调   onChange 方式。目前还未找到很好的方式,解决回调多次的问题。只能通过代码逻辑来屏蔽这个问题。目前,我使用的方式是通过时间来过滤两次的回调。 long lastTimeofCall = 0L; long…

    Android 2023年4月18日
    00
  • 接入HMS Core应用内支付服务过程中一些常见问题总结

    华为HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程。该服务支持客户端和服务端两种开发形式,具体可以参考官方文档。 往期文章:常见问题总结(2)中分享总结了有关无法拉起支付页面的常见问题,本文将对近期开发者们较为关注的一些集成应用内支付服务过程中的问题进行汇总,并提出解决方案。 问题1:…

    Android 2023年4月18日
    00
  • 鲸鸿动能广告接入如何高效变现流量?

    广告是App开发者最常用的流量变现方法之一,当App拥有一定数量用户时,开发者就需要考虑如何进行流量变现,帮助App实现商业可持续增长。 鲸鸿动能流量变现服务是广告服务依托华为终端强大的平台与数据能力为开发者提供的App流量变现服务,开发者通过该服务可以在自己的App中获取并向用户展示精美的、高价值的广告内容,并从中获得广告收益。开发者集成鲸鸿动能服务进行广…

    Android 2023年5月11日
    00
  • 钥匙环服务,打造无缝的跨设备登录体验

    近些年来,随着手机技术迭代更新越来越快,用户更换手机的周期也在缩短,在这样的背景下,开发者不得不面临以下问题: 同一开发者旗下常常有多个安卓应用和多形态应用(快应用和Web应用),用户更换一个新的设备(手机或平板)后,在新设备上登录各应用时每次都需要重复输入帐号和密码,导致用户在登录阶段流失率增加,同时开发者还需要承担额外的短信成本(如用户使用短信登录)。 …

    Android 2023年4月17日
    00
  • .NET Core 环境变量详解

    一、概述 软件从开发到正式上线,在这个过程中我们会分为多个阶段,通常会有开发、测试、以及上线等。每个阶段对应的环境参数配置我们会使用不同的参数。比如数据库的连接字符串,开发环境一般我们都是连接的测试库。以前这种情况通常是 COPY 两个同名的配置文件来进行处理,然后在本地就使用本地的配置,生产环境就使用生产环境的配置文件,十分麻烦。而 ASP .NET CO…

    C# 2023年4月25日
    00
  • 欢迎页轮播动画

    如图,引导开始,球从上落下,同时淡入文字,然后文字开始轮播,最后一页时停止,点击进入首页。 在来看看效果图。 重力球先不讲,主要欢迎轮播简单实现 首先新建一个类 TextTranslationXGuideView,用于动画展示 文本是类似的,最后会有个图片箭头动画,布局很简单,就是一个 TextView 跟 ImageView,直接写 xml 布局里方便了 …

    Android 2023年4月19日
    00
  • 【FAQ】统一扫码服务常见问题及解答

    1.隐私政策是怎么样的?收集哪些信息? 关于Scan Kit的隐私政策及收集的信息,请查看SDK隐私安全说明。 Android:SDK隐私安全说明 iOS:SDK隐私安全说明 2.如何使用多码识别?多码模式下如何实现指定条码?多码模式的坐标支持返回坐标么?多码模式下实现自动放大? 1)统一扫码服务支持返回多码 ①android项目建议您参考MultiProc…

    Android 2023年4月25日
    00
合作推广
合作推广
分享本页
返回顶部