智慧养殖APP及小程序多端跨平台技术选型分析

智慧养殖APP及小程序多端跨平台技术选型分析

1. 框架选择

------Uniapp------

优势:使用Vue.js语法,学习成本较低;一套代码,能同时支持APP/H5/小程序,是较为全面的跨平台框架。

​ 开发小程序的不二选择,考虑到国内小程序应用广泛,之后可能会有所涉及。

劣势:开发App端时,性能有瓶颈,但是也可以胜任大部分的场景,天花板并不低。

​ HbuilderX开发体验较差(可以使用VSCode代为开发,目前已有可行方案)。

可以通过vue-cli命令行创建uni-app项目,使用VSCode代为开发,使用网页进行H5模式查看效果,使用HbuilderX进行真机调试。

采用vue-cli创建项目和使用HbuilderX可视化界面创建项目并没有本质区别,cli创建的项目是传统的node项目,HbuilderX创建的项目只能在HbuilderX中运行。具体可查看官网介绍。

// 全局安装vue-cli
npm install -g @vue/cli
// 创建node项目
npx degit dcloudio/uni-preset-vue#vite my-vue3-project
------Taro------

京东团队多端统一开发解决方案,个人感觉和Uniapp各有各的优势,现阶段已经同时支持React和Vue;在App端使用的是React Native渲染引擎。

Taro框架同样有很多人在用,和Uniapp一样,搜索引擎资料较多。

同Uniapp一样,跨平台方案目前都不完善,适合以小程序、H5为主,App为辅,不涉及太过复杂的交互的项目。

------Flutter------

优势:google出品,渲染引擎强大,性能优异,上限高。

​ 新兴技术栈,反响较好,在开发效率、性能以及跨平台体验上都有不错表现。

劣势:最大的劣势是不支持小程序的开发。

​ 使用的是dart开发语言,虽然属于强类型语言,相比js有独特的优势,但是需要一定的学习成本。

------原生开发------

官方原生支持,功能强大健全,性能和体验是最好的。但是学习成本高,Android和IOS需要分别开发,开发,测试,维护成本都偏高,直接淘汰。

------其他------

其他App跨平台方案,比如React Native、Hippy学习成本较高,也没有明显优势,不推荐。

------总结------

简单需求的App和小程序开发可以使用Uniapp或者Taro,这两个框架目前来说是使用人数最多的小程序框架,社区活跃,可以满足开发需求,随着硬件的越来越好H5的体验也会越来越好。

Flutter的优势在于APP端,渲染性能高,Android/IOS跨平台体验好。

2. Uniapp注意事项

H5正常但App异常的可能性
  1. css异常:
  • 不支持的选择器

非H5端不支持*选择器;

body的元素选择器请改为page,同样,div和ul和li等改为view、span和font改为text、a改为navigator、img改为image…

  • 组件和页面样式相互影响

非H5端默认并未启用 scoped,如需要隔离组件样式可以在 style 标签增加 scoped 属性,H5端为了隔离页面间的样式默认启用了 scoped

  • webview浏览器兼容性

vue页面在App端,默认是被系统的webview渲染的(不是手机自带浏览器,是rom的webview),在较老的手机上,比如Android4.4、5.0或iOS8,很多css是不支持的,所以不要使用太新的css,会导致界面异常。

注意这不意味着不能使用flex,Android4.4也支持flex,只是不要使用太新的css。

可以找Android4.4手机或使用pc模拟器实际测试下,大多数国产Android模拟器都是4.4或5.0。

从 uni-app 2.5.3 起,Android端支持引入腾讯x5浏览器内核,可以抹平低端Android的浏览器兼容性问题,详见x5使用指南

小程序不存在浏览器兼容问题,它自带了一个很大的Webview。所以如果你的H5和小程序界面正常,而Android低端机App界面异常,且App没有使用x5引擎,那基本就可以判定是因为css兼容性。

app端nvue页面,不存在浏览器兼容问题,它自带一个统一的原生渲染引擎,不依赖webview。

Android4.4对应的webview是chrome37。各端浏览器内核的详情查阅,参考:关于手机webview内核、默认浏览器、各家小程序的渲染层浏览器的区别和兼容性

  • 原生组件层级问题 H5没有原生组件概念问题,非H5端有原生组件并引发了原生组件层级高于前端组件的概念,要遮挡video、map等原生组件,请使用cover-view组件。
  1. 使用了非H5端不支持的API 小程序和App的js运行在jscore下而不是浏览器里,没有浏览器专用的js对象,比如document、xmlhttp、cookie、window、location、navigator、localstorage、websql、indexdb、webgl等对象。

如果你的代码没有直接使用这些,那很可能是引入的三方库使用了这些。如果是后者,去插件市场搜索替代方案。要知道非H5端的js是运行在一个独立的js core或v8下,并不是运行在浏览器里。

从HBuilderX 2.6起,App端新增了renderjs,这是一种运行在视图层的js,vue页面通过renderjs可以操作浏览器对象,进而可以让基于浏览器的库直接在uni-app的App端运行,诸如echart、threejs,详见:renderjs

  1. 使用了非H5端不支持的vue语法,受小程序自定义组件限制的写法,详见
  2. 不要在引用组件的地方在组件属性上直接写 style=“xx”,要在组件内部写样式
  3. url(//alicdn.net)等路径,改为url(https://alicdn.net),因为在App端//是file协议
  4. 很多人在H5端联网时使用本地测试服务地址(localhost或127.0.0.1),这样的联网地址手机App端是无法访问的,请使用手机可访问的IP进行联网

3. 选择Vue3进行开发

UniApp同样支持Vue3,现阶段可能会存在各种问题,但是相比Vue2拥有全方位的优势。

4. 请求接口的封装

框架内自带uni.request请求方法,但是为了对接口进行统一管理,对请求方法进行封装,同时在请求之前和返回的数据做相应的处理,类似于常规Vue项目中对axios进行封装并添加拦截器。

5. Vue2和Vue3中API Promise化 的区别

// Vue 3 转 Vue 2, 在 main.js 中写入以下代码即可
function isPromise(obj) {return (!!obj &&(typeof obj === 'object' || typeof obj === 'function') &&typeof obj.then === 'function')
}uni.addInterceptor({returnValue(res) {if (!isPromise(res)) {return res}const returnValue = [undefined, undefined]return res.then((res) => {returnValue[1] = res}).catch((err) => {returnValue[0] = err}).then(() => returnValue)}
})

加粗样式

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

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

相关文章

线性代数——特征值和特征向量

文章目录 版权声明补充知识求和公式的性质常用希腊字符读音 特征值和特征向量相似矩阵相似对角化实对称矩阵 版权声明 本文大部分内容皆来自李永乐老师考研教材和视频课。 补充知识 求和公式的性质 ∑ i 1 n k a i k ∑ i 1 n a i \sum_{i1}^nka_ik\sum_{i1}^na_i i1∑n​…

visual studio 2022换背景遇到的问题

如果要自定义背景图,则可以下载ClaudialIDE 1.在拓展->点击拓展管理->右上角搜索background->点击下载ClaudialIDE->加载完之后需要关闭vs界面进行下载,下载失败,弹出“由于出现以下错误 无法安装一个或多个扩展”。 解决&#x…

推荐几款不错的AI绘画工具

随着近年来数据、算法等核心技术的不断进步,人工智能在内容创作各垂直领域的比例不断增加,包括人工智能写作、人工智能编辑和最近流行的人工智能绘画。 许多朋友也想跟上潮流,使用人工智能绘画生成软件创建人工智能图像,但我不知…

ssh、scp和sshpass使用

1、ssh ssh 用户名ip地址2、scp 2.1 拉取文件 scp -r 用户名1ip地址:/远程文件目录/远程服务器文件 /本地文件目录/2.2 上传文件 scp -r /本地文件 用户名1ip地址:/远程文件目录/3、sshpass 3.1 定义 sshpass 的定义: ssh 登陆不能在命令行中指定密码&#xf…

手机变局2023:一场瞄准产品和技术的“思维革命”

以折叠屏冲高端,已成为中国手机厂商们的共识。 在这个苹果未涉足的领域,国产手机厂商们加快脚步迭代推新,积极抢占机遇。但平心而论,虽然国产折叠屏机型众多,但市场上始终缺乏一款突破性的产品作为标杆,为…

数据结构【树】

第五章 树 一、树 1.定义:n个结点的集合,n0为空树;是递归的,是一种逻辑结构,同时也是一种分层结构; 特点 树的根结点没有前驱结点,除了根结点外的所有结点有且只有一个前驱结点;树…

MySQL学习-第一部分

文章目录 MySQL数据库1 概述1.1概述1.2安装MYSQL(Windows下)1.2.1需要注意的事项: 1.3 Mysql的卸载1.4查看Mysql服务1.5启动/关闭SQL的服务1.6客户端登录/使用MySql登录退出问题:ERROR 1045 (28000)解决方案第一步:关闭…

Clion开发STM32之W5500系列(综合实验)

说明 此为w5500模块的综合实验测试模块,包含dhcp、dns、ntp以上三个模块的驱动参考之前的文章,本篇不做说明.使用的开发芯片 stm32f103vet6系列,外设接口使用的spi2 实验内容: 通过dhcp动态获取ip,通过dns解析NTP服务域名的ip通过NTP服务ip获取时间 w5500配置驱…

学生护眼台灯几瓦最舒适?2023全新五款护眼台灯推荐

每次经过学校,发现戴眼镜的小学生真的不少,通过近几年的儿童以及青少年的近视人数可看出,我国的近视人数中,儿童以及青少年占比53.5%,所以许多家长逐渐重视孩子用眼健康问题,会选择护眼台灯用于孩子写作业和…

第1章 获取数据库中的数据

CoreShop源程序是以数据库优先进行定义的,所以其本身不包含代码优先的定义,但本从更习惯于代码优先,所以为其定义了代码优先的定义。 1 CoreCms.Net.Model.Entities.SysRole using SqlSugar; using System.ComponentModel.DataAnnotations…

【JavaEE初阶】Tomcat安装与使用及初识Servlet

文章目录 1. Tomcat的安装与使用1.1 Tomcat安装1.2 Tomcat的启动1.3 Tomcat部署前端页面 2. Servlet2.1 Servlet是什么2.2 第一个Servlet程序2.3 常见错误 1. Tomcat的安装与使用 1.1 Tomcat安装 在浏览器中搜索Tomcat,打开官方网页.Tomcat官网 点击下载Tomcat8. 点击下载压…

PSP - 使用 MMseqs2 工具快速搜索蛋白质序列数据库 (GMGC)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131934642 MMseq2 是非常强大和高效的生物信息学软件,可以在极短的时间内对大规模的核苷酸和蛋白质序列进行搜索和聚类。主要特点有&a…

fpga_pwm呼吸灯(EP4CE6F17C8)

文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …

spring学习笔记六

一、构造器注入 1.1、BookDao接口和实现类 public interface BookDao {void save(); } public class BookDaoImpl implements BookDao {private int connectionNum;private String databaseName;public BookDaoImpl(int connectionNum, String databaseName) {this.connectio…

【Spring MVC】小文件下载的多种方法

文章目录 HTTP Header 之 Content-Disposition文件下载代码Servlet 实现方式 1Servlet 实现方式 2Spring 实现方式 1 Content-Disposition 指定 inline Win、JDK 17、 Spring Boot 3.1.2 HTTP Header 之 Content-Disposition 以下内容来自 mdn web docs 在常规的 HTTP 应答中&…

c++网络编程:Boost.asio源码剖析

1、前言 Boost库是一个可移植、提供源代码的C库,作为标准库的后备,是C标准化进程的开发引擎之一。Boost库由C标准委员会库工作组成员发起,其中有些内容有望成为下一代C标准库内容。在C社区中影响甚大,是不折不扣的“准”标准库。…

未来行星探索希望:新型多脚机器人-团队版

机器人正在探索一个模拟的外星环境 即使一个机器人失败了,其余的团队成员也可以抵消它的损失。 背景 虽然探测器取得了令人难以置信的发现,但它们的轮子可能会拖慢它们的速度,而不稳定的地形可能会导致损坏。虽然没有东西可以取代“毅力号”…

Vue3输入框(Input)

APIs 参数说明类型默认值必传width输入框宽度string | number‘100%’falseaddonBefore设置前置标签string | slot‘’falseaddonAfter设置后置标签string | slot‘’falseallowClear可以点击清除图标删除内容booleanfalsefalsepassword是否启用密码框booleanfalsefalsedisabl…

tomcat调优2-具体实现

您好,可以通过修改Tomcat的配置文件来实现上述的Tomcat调优措施。 更改JVM内存配置 在Catalina服务的启动脚本catalina.sh中找到JAVA_OPTS变量,增加Java堆空间参数: JAVA_OPTS“-Xms512m -Xmx4096m” 调整线程池参数 在server.xml中的Connector标签中添加executor属性: &…

两个小封装电机驱动芯片:MLX813XX、A4950

一.MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案,MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片,可以满足汽车系统高品质和低成本的要…