精华内容
下载资源
问答
  • 前言 自2017-1-9微信小程序诞生以来,小程序生态蓬勃...1.原生开发对Node、预编译器、webpack支持不好,影响开发效率工程构建流程。 2.微信定义了自己的一套开发规则,为了开发小程序,需要单独学习这种语法,成本高

    前言

    自2017-1-9微信小程序诞生以来,小程序生态蓬勃发展,支付宝、百度、京东等也都推出了自己的小程序生态。小程序开发也从最初的微信原生开发,到现在uni-app、taro、mpvue、wepy等框架依次出现,生态越来越丰富。选择多了,问题也就来了,开发小程序,该用原生还是选择第三框架?

    以微信小程序为例,微信原生开发的槽点大多集中如下:

    1.原生开发对Node、预编译器、webpack支持不好,影响开发效率和工程构建流程。
    2.微信定义了自己的一套开发规则,为了开发小程序,需要单独学习这种语法,成本高。
    3.微信开发者工具和专业编辑器有差距。
    4.只能在微信小程序运行,如需支付宝小程序、百度小程序等, 需要再次开发。

    为了抹平各平台的差异,编写一套代码就能适配到多个小程序平台的能力就显得极为需要,taro、uni-app、mpvue、wepy等三方框架应运而生。

    这么多框架我们应该如何选择呢?其实经过几年的沉淀,各个框架的社区活跃度及官方技术支持程度,已经替我们做出了答案。截至到现在官方仍在维护,而且使用相对较多的也就是uni-app和taro了。trao3更是可以使用完整的 React / Vue / Vue3 / Nerv 开发体验,非常的强大,不需要再去学习微信、支付宝等这些平台小程序的更个规则及语法。
    以taro为例,他统一了各个小程序平台的api接口,以Taro的形式进行调用,例如调用相册功能及预览功能如下:
    在这里插入图片描述
    那么这套代码生成的小程序即可以在微信运行,也可以在支付宝、百度、京东等平台运行。

    不需要学习新的语法,而且对api的支持度也非常高,如果要开发多端小程序,三方框架也许是个不错的选择。

    展开全文
  • 这是一个最接近原生开发的H5框架,可以开发出各种App的原生效果,高效
  • 移动端app开发,原生开发与混合开发的区别

    万次阅读 多人点赞 2019-09-26 18:47:01
    目前市场上主流的APP分为三种:原生APP、Web APP(即HTML5)混合APP三种,相对应的定制开发就是原生开发、H5开发混合开发。那么这三种开发模式究竟有何不同呢?下面我们就分别从这三者各自的优劣势来区分比较吧...

    目前市场上主流的APP分为三种:原生APP、Web APP(即HTML5)和混合APP三种,相对应的定制开发就是原生开发、H5开发和混合开发。那么这三种开发模式究竟有何不同呢?下面我们就分别从这三者各自的优劣势来区分比较吧!
    一、APP原生开发
    原生开发(Native App开发),是在Android、IOS等移动平台上利用提供的开发语言、开发类库、开发工具进行App软件开发。比如Android是利用Java、Eclipse、Android studio;IOS是利用Objective-C 和Xcode进行开发。
    通俗点来讲,原生开发就像盖房子一样,先打地基然后浇地梁、房屋结构、一砖一瓦、钢筋水泥、电路走向等,都是经过精心的设计。原生APP也一样:通过代码从每个页面、每个功能、每个效果、每个逻辑、每个步骤全部用代码写出来,一层层,一段段全用代码写出来。
    优点:
    1、可访问手机所有功能(如GPS、摄像头等)、可实现功能齐全;
    2、运行速度快、性能高,绝佳的用户体验;
    3、支持大量图形和动画,不卡顿,反应快;
    4、兼容性高,每个代码都经过程序员精心设计,一般不会出现闪退的情况,还能防止病毒和漏洞的出现;
    5、比较快捷地使用设备端提供的接口,处理速度上有优势。
    缺点:
    1、开发时间长,快则3个月左右完成,慢则五个月左右;
    2、制作费用高昂,成本较高;
    3、可移植性比较差,一款原生的App,Android和IOS都要各自开发,同样的逻辑、界面要写两套;
    4、内容限制(App Store限制);
    5、获得新版本时需重新下载应用更新。
    二、Web APP (HTML5)开发
    HTML5应用开发,是利用Web技术进行的App开发。Web技术本身需要浏览器的支持才能进行展示和用户交互,因此主要用到的技术是HTML5、Javascript、CSS等。
    优点:
    1、支持设备范围广,可以跨平台,编写的代码可以同时在Android、IOS、Windows上运行;
    2、开发成本低、周期短;
    3、无内容限制;
    4、适合展示有大段文字(如新闻、攻略等),且格式比较丰富(如加粗,字体多样)的页面;
    5、用户可以直接使用新版本(自动更新,不需用户手动更新)。
    缺点:
    1、由于Web技术本身的限制,H5移动应用不能直接访问设备硬件和离线存储,所以在体验和性能上有很大的局限性;
    2、对联网要求高,离线不能做任何操作;
    3、功能有限;
    4、APP反应速度慢,页面切换流畅性较差;
    5、图片和动画支持性不高;
    6、用户体验感较差;
    7、无法调用手机硬件(摄像头、麦克风等)。
    三、混合APP开发(原生+H5)
    混合开发(Hybrid App开发),是指在开发一款App产品的时候,为了提高效率、节省成本而利用原生与H5的开发技术的混合应用。通俗点来说,这就是网页的模式,通常由“HTML5云网站+APP应用客户端”两部份构成。
    混合开发是一种取长补短的开发模式,原生代码部分利用Web View插件或者其它框架为H5提供容器,程序主要的业务实现、界面展示都是利用与H5相关的Web技术进行实现的。比如京东、淘宝、今日头条等APP都是利用混合开发模式而成的。
    优点:
    1、开发效率高,节约时间。同一套代码Android和IOS基本上都可使用;
    2、更新和部署比较方便,每次升级版本只需要在服务器端升级即可,不再需要上传到App Store进行审核;
    3、代码维护方便、版本更新快,节省产品成本;
    4、比web版实现功能多;
    5、可离线运行。
    缺点:
    1、功能/界面无法自定:所有内容都是固定的,不能换界面或增加功能;
    2、加载缓慢/网络要求高:混合APP数据需要全部从服务器调取,每个页面都需要重新下载,因此打开速度慢,网络占用高,缓冲时间长,容易让用户反感;
    3、安全性比较低:代码都是以前的老代码,不能很好地兼容新手机系统,且安全性较低,网络发展这么快,病毒这么多,如果不实时更新,定期检查,容易产生漏洞,造成直接经济损失;
    4、既懂原生开发又懂H5开发的高端人才难找。
    以上就是原生开发、H5开发和混合开发各自的优缺点。相比之下,由于现代人的个性化需求越来越明显,所以原生APP开发也越来越多,定制化的服务更能满足消费者的需求。若您也想要定制一款别开生面的APP,就来找我们吧!

    展开全文
  • 是上一个mvc模式的改进版,代码数据库资源,更接近thinkphp框架结构
  • Quarkus 是一个为 Java 虚拟机(JVM)和原生编译而设计的全堆栈Kubernetes云原生Java框架,用于专门针对容器优化的Java开发框架,并使其成为 serverless、cloudKubernetes环境下的高效开发平台 Quarkus 可与常用...

    云原生应用开发框架Quarkus介绍

    1. 概述

    Quarkus 是一个为 Java 虚拟机(JVM)和原生编译而设计的全堆栈Kubernetes云原生Java框架,用于专门针对容器优化的Java开发框架,并使其成为 serverless、cloud和Kubernetes环境下的高效开发平台

    Quarkus 可与常用Java标准、框架和库协同工作,例如:Eclipse MicroProfile、Spring、Apache Kafka、RESTEasy (JAX-RS)、Hibernate ORM (JPA)、Infinispan、Camel 等

    Quarkus 的使用CDI作为依赖注入解决方案,且包含一个Quarkus扩展框架来扩展功能并将其配置、引导并集成到您的应用中。添加扩展程序就像添加依赖项一样容易;或者您可以使用 Quarkus 工具。

    此外, Quarkus还支持GraalVM AOT编译 ;传统的Java编译模式采用JIT(Just in time,即时编译,边运行边编译)而AOT(Ahead Of Time,运行前编译)可以把Java应用进行原生编译极大的提高应用性能,并允许直接在目标机器上直接运行。

    2. Quarkus 特性

    2.1 专为开发人员而设计

    Quarkus 的设计从一开始就立足于简单易用,其功能几乎不需要配置即可正常使用。

    开发人员可以为其应用选择所需的 Java 框架,而这些应用可以在 JVM 模式下运行,也可以在原生模式下进行编译和运行

    为了方便开发人员的工作,Quarkus 还包含以下功能:

    - 实时编码,旨在让开发人员能够即时检查代码更改的影响并快速进行故障排除
    - 带有嵌入式托管事件总线的统一命令式和响应式编程
    - 统一配置
    - 简单的原生可执行文件生成
    

    2.2 容器优先

    无论是将应用托管在公共云上还是内部托管的 Kubernetes 集群中,快速启动和低内存消耗等特性对于降低总体主机成本来说都至关重要。

    Quarkus 的开发遵从了容器优先的原则,这意味着它已通过以下方式针对降低内存使用和加快启动时间进行了优化:

    - 完全支持 Graal/SubstrateVM
    - 构建时元数据处理
    - 减少反射的使用
    - 本机映像预启动
    

    因此,Quarkus 构建的应用其内存消耗只有传统 Java 的 1/10,而且启动时间更快(快了 300 倍),这些都大大降低了云资源的成本。


    2.3 命令式和响应式编码

    在设计上,Quarkus 能够在开发应用时无缝地结合熟悉的命令式代码和非阻塞、响应式样式。

    这对于习惯使用命令式模型而不想切换风格的 Java 开发人员以及使用云原生/响应式方法的开发人员都非常有用。

    Quarkus 开发模型可以适应您正在开发的任何应用。

    对于在新的无服务器架构、微服务、容器、Kubernetes、功能即服务(FaaS)和云环境中运行 Java 而言,Quarkus 堪称是一个有效的解决方案,因为在创建它时就充分考虑了所有这些因素。


    2.4 提供优异系统性能和研发效率

    Quarkus是一个开源的kubernets-native Java框架,允许开发人员优化容器中的云原生应用程序以获得最佳性能。Quarkus提供:

    • 快速启动时间
    • 低内存消耗
    • 降低整体主机成本
    • 改进了Java应用程序的性能
    • 提高开发人员的生产率

    3. 云原生开发选择Quarkus的4大理由

    Quarkus是一个开源的、kubernets原生的Java框架,专为GraalVM和OpenJDK量身定制。它提供了一个完整的全栈框架,使用业界知名的Java类库和标准。有了Quarkus, Java可以成为Kubernetes和无服务器环境的领先平台,同时为开发人员提供统一的响应式和命命令式编程模型,以解决更广泛的分布式应用架构挑战。红帽公司是Quarkus项目的发起人,也是Quarkus社区的主要贡献者。
    下面详细说明使用Quarkus作为编程工具的四个原因。


    3.1 应用在云,容器,serverless 环境中部署

    低内存消耗和快速的首次响应时间使Quarkus成为云、容器和无服务器环境的理想选择。使用Quarkus,您可以:

    • 使用GraalVM和HotSpot的编译时引导方法定制您的应用程序。
    • 首次启动毫秒级别的响应速度
    • 减少驻留集大小(RSS)内存,与传统云应用相比所需内存只有前者的十分之一
    • 在Kubernetes等容器编排平台上获得几乎即时的扩展性和高密度内存利用率
    • 实现更高的工作负载密度,降低硬件和云计算和内存的总体成本

    3.2 提高生产力

    Quarkus内置了很多自动化功能,允许开发人员更快地完成他们的工作。Quarkus功能特点:

    • 统一配置
    • 零配置和实时加载
    • 简化80%的通用代码和配置
    • 简化Java代码编译为机器语言的命令
    • 兼容流行的框架,如Eclipse MicroProfile, Spring Dependency Injection (DI), Hibernate等,允许开发者使用和集成其它开源框架和JAVA标准

    3.3 支持多种开发模式

    Quarkus无缝地将命令式模型和反应式模型结合在一起,因此开发人员可以使用最适合他们的技术来开发应用。Quarkus支持如下几种开发模式:

    • 反应式开发模式
    • 命令开发模式
    • 或者在同一个框架中使用两种模式

    3.4 Java 优化

    Quarkus对Java进行了优化,并通过内存消耗优化和快速的首次响应时间使其对容器、云和无服务器环境提供优异性能。

    • 对Java开发人员来说,学习曲线很低
    • 使Java可与本机编译、获得高级编程语言
    • 集成很多成熟框架——从数据库访问到集成和业务自动化
    • 支持微服务架构和开发

    4. 容器优先策略

    从一开始Quarkus就围绕容器第一的理念设计。这意味着Quarkus通过以下方式优化了低内存使用和快速启动时间:

    4.1 优先支持Graal/SubstrateVM

    Substrate技术从一开始就是Quarkus设计的重要组成部分。当应用程序被编译为本机映像时,它启动得更快,并且可以在比标准JVM小得多的堆中运行。Quarkus都是在Substrate中测试的,可以在没有-H:+ReportUnsupportedElementsAtRuntime标志的情况下运行。

    4.2 构建时元数据处理

    让尽可能多的处理在构建时完成,因此你的应用程序将只包含运行时实际需要的类。在传统模型中,执行初始应用程序部署所需的所有类在应用程序的整个生命周期中都存在,即使它们只使用一次。使用Quarkus时,它们甚至不会加载到生产JVM中。这导致内存使用更少,而且启动时间更快,因为所有元数据处理都已经完成。

    4.3 减少反射的使用

    Quarkus尽可能地避免反射,减少启动时间和内存使用。

    4.4 本机镜像预启动

    在本地映像中运行时,Quarkus会在本地映像构建过程中预启动尽可能多的框架。这意味着生成的本机映像已经运行了大部分启动代码,并将结果序列化到可执行文件中,从而导致启动速度更快

    5. 结论

    本文中,介绍了Quarkus的特性,以及它如何使我们的JAVA应用减少内存占用和毫秒级的首次启动时间的原理;Quarkus作为云,无服务器,K8s云原生开发框架值得我们研究尝试

    展开全文
  • 简单原生php MVC框架

    2019-05-18 19:48:56
    简单原生php MVC框架 ,轻量级的PHP数据库框架, 提高开发效率!
  • 自2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web、iOS、Android之后,第四大主流开发技术。... 原生开发对Node、预编译器、webpack支持不好,影响开发效率工程...

    自 2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web、iOS、Android之后,第四大主流开发技术。

    与之相随,小程序的开发生态也在蓬勃发展,从最初的微信原生开发,到wepympvuetarouni-app等框架依次出现,从刀耕火种演进为现代化开发,生态越来越丰富。

    选择多了,问题也就来了,开发小程序,该用原生还是选择三方框架?

    首先,微信原生开发的槽点大多集中如下:

    • 原生开发对Node、预编译器、webpack支持不好,影响开发效率和工程构建流程

    • 微信定义了一个不伦不类的语法,不如正经学vue、react,学会了全端通用,而不是只为微信小程序

    • vue/react生态里有太多周边工具,可以提高开发效率,比如ide、校验器、三方库。。。

    • 微信那个ide和专业编辑器相比实在不好用

    同时,开发者对三方框架,又总是有各种顾虑:

    1. 怕性能不如原生

    2. 怕有些功能框架实现不了,只能用原生

    3. 怕框架不稳定,跳到坑里

    4. 以及诸多三方框架,到底该用哪个

    面对如此纠结的场景,不少热心开发者发布评测文章分享经验,但感觉众说纷纭,过期信息太多。缺少一份非常专业的、深度的,或者按如今流行的话来讲,“硬核的”评测报告。

    做评测报告这件事,不同于泛泛经验分享,其实非常花费时间。它需要:

    • 你必须成为每一个框架的专业使用人员,而不是浅浅的了解一下这些框架

    • 真实的动手写多个平台的测试例,比较各个平台的功能、性能,了解他们的社区情况、技术服务情况

    • 你要有长期跟踪和更新报告的能力,避免半年后沦为过期信息

    换言之:评测要想真,功夫得做深!

    本文从面向用户、面向开发者两大维度七大细项,对微信原生及主流的wepympvuetarouni-app开发框架进行横向对比,希望给开发者在小程序框架选型时提供一种参考思路。

    本文基于各框架官网可采集到的公开数据及真实测试数据,希望客观公正地评价各个框架的现状和优劣。但宥于利益相关,本文的观点很可能是带有偏向性的,大家可以带着批判的眼光来看待,如发现本文中有任何评测失真,欢迎在这里报 issuse。

    面向用户、面向开发者维度,具体包括:

    1. 用户:提供完整的业务实现,并保证高性能体验

    2. 开发者:平缓的学习曲线、现代开发体验(工程化)、高效的社区支持、活跃的开发迭代、多端复用。

     

    一、用户

     

    1.1 功能实现

    软件开发,首要目标是向用户提供完整、闭环的业务功能。

    在web开发中,如果vue、react等框架的使用,造成开发者无法操作浏览器提供的所有api,那这样的框架肯定是不成熟的。小程序开发也一样,任何开发框架,都不能限制底层的api调用。

    而各种业务功能底层依赖微信暴漏的组件和接口(微信官网介绍的组件和 API 规范,也即微信原生API),三方框架是基于微信原生进行的二次封装,开发者此时常会有个疑问:小程序在不断的迭代升级,如果某项业务依赖于最新的小程序API,但三方框架尚未封装,该怎么办?

    实际上就像web开发的vue、react一样,浏览器出了一个新API,并不会涉及vue、react的升级。本评测里的所有框架,都不会限制开发者调用底层能力。这里详细解释下原因:

    • wepy:未对小程序API作二次封装,API依然使用微信原生的,框架与微信小程序是否新增API无关

    • mpvue:支持微信的所有原生组件和api,无限制。同时框架封装了自己的跨端API,使用方式类似mpvue.request()

    • taro:支持微信的所有原生组件和api,无限制。同时框架封装了自己的跨端API,使用方式类似Taro.request(),支持Taro 代码与小程序代码混写,可通过混写的方式调用框架尚未封装的小程序新增API

    • uni-app:支持微信的所有原生组件和api,无限制。在跨端方面,即便仍然使用微信原生的组件和API,也可以直接跨端编译到App、H5、以及支付宝百度头条等小程序。但为了管理清晰,推荐使用uni封装的API,类似uni.request()。同时支持条件编译,可在条件编译代码块中,随意调用各个平台新增的API及组件

    注:以上顺序,按各个框架的诞生顺序排序,下同。

    故,三方框架均可调用所有小程序API,完成用户的业务需求,这个维度各框架是无差别的。

    然而有差别的,是性能体验。

     

    1.2 性能体验

    三方框架,内部大多做了层层封装,这些封装是否会增加运行负载,导致性能下降?尤其是与原生微信小程序开发相比性能怎么样,这是大家普遍关心的问题。

    为客观的进行对比,我们特意搭建了一个测试模型,详细如下:

    • 开发内容:开发一个仿微博小程序首页的复杂长列表,支持下拉刷新、上拉翻页、点赞。

    • 界面如下:

       

    • 开发版本:一共开发了5个版本,包括微信原生版、wepy版、mpvue版、taro版、uni-app版,按照官网指引通过cli方式默认安装。

    • 测试代码开源, Tips:若有同学觉得测试代码写法欠妥,欢迎提交 PR 或 Issus

    • 测试机型:红米 Redmi 6 Pro、MIUI 10.2.2.0 稳定版(最新版)、微信版本 7.0.3(最新版)

    • 测试环境:每个框架开始测试前,杀掉各App进程、清空内存,保证测试机环境基本一致;每次从本地读取静态数据,屏蔽网络差异。

    我们以上述仿微博小程序为例,测试2个容易出性能问题的点:长列表加载、大量点赞组件的响应。

     

    1.2.1 长列表加载

    仿微博的列表是一个包含很多组件的列表,这种复杂列表对性能的压力更大,很适合做性能测试。

    从触发上拉加载到数据更新、页面渲染完成,需要准确计时。人眼视觉计时肯定不行,我们采用程序埋点的方式,制定了如下计时时机:

    • 计时开始时机:交互事件触发,框架赋值之前,如:上拉加载(onReachBottom)函数开头

    • 计时结束时机:页面渲染完毕(微信setData回调函数开头)

    Tips:setData回调函数开头可认为是页面渲染完成的时间,是因为微信setData定义如下(微信规范):

    测试方式:从页面空列表开始,通过程序自动触发上拉加载,每次新增20条列表,记录单次耗时;固定间隔连续触发 N 次上拉加载,使得页面达到 20*N 条列表,计算这 N 次触发上拉到渲染完成的平均耗时。

    测试结果如下:

     

    说明:以400条微博列表为例,从页面空列表开始,每隔1秒触发一次上拉加载(新增20条微博),记录单次耗时,触发20次后停止(页面达到400条微博),计算这20次的平均耗时,结果微信原生在这20次 触发上拉 -> 渲染完成 的平均耗时为876毫秒,最快的uni-app是741毫秒,最慢的mpvue是4493毫秒

    大家初看这个数据,可能比较疑惑,别急,下方有详细说明

    说明1:为何 mpvue/wepy 测试数据不完整?

    mpvuewepy 诞生之初,微信小程序尚不支持自定义组件,无法进行组件化开发;mpvuewepy 为解决这个问题,将用户编写的Vue组件,编译为WXML中的模板(template),变相实现了组件化开发能力,提高代码复用性,这在当时的技术条件下是很棒的技术方案。

    但如此方案,在页面复杂、组件较多的时,会大量增加页面 dom 节点数量,甚至超出微信的 dom 节点数限制。我们在 红米手机(Redmi 6 Pro)上实测,页面组件超过500个时,mpvuewepy  实现的仿微博App就会报出如下异常,并停止渲染,故这两个测试框架在组件较多时,测试数据不完整。这也就意味着,当页面组件太多时,无法使用这2个框架。

    dom limit exceeded please check if there's any mistake you've made

    Tips1:wepy官网的CHANGELOG,提到 v1.7.2 测试版本添加了对小程序原生组件的支持,实测坑很多,因为是测试版,官方在 issue 中也表示不推荐使用;按照官网文档,默认安装的 v1.7.3 正式版本并不支持原生组件

    Tips2:wepy在400条列表以内,为何性能高于微信原生框架,这个跟自定义组件管理开销及业务场景有关(wepy编译为模板,不涉及组件创建及管理开销),后续对微博点赞,涉及组件数据传递时,微信原生框架的性能优势就提现出来了,详见下方测试数据。

    说明2:为什么测试数据显示uni-app 会比微信原生框架的性能略好呢?

    其实,在页面上有200条记录(200个组件)时,taro 性能数据也比微信原生框架更好。

    微信原生框架耗时主要在setData调用上,开发者若不单独优化,则每次都会传递大量数据;而 uni-apptaro 都在调用setData之前自动做diff计算,每次仅传递变动的数据。

    例如当前页面有20条数据,触发上拉加载时,会新加载20条数据,此时原生框架通过如下代码测试时,setData会传输40条数据

     

    开发者使用微信原生框架,完全可以自己优化,精简传递数据,比如修改如下:

    经过如上优化修改后,再次测试,微信原生框架性能数据如下:

     

    从测试结果可看出,经过开发者手动优化,微信原生框架可达到更好的性能,但 uni-apptaro 相比微信原生,性能差距并不大。

    这个结果,和web开发类似,web开发也有原生js开发、vue、react框架等情况。如果不做特殊优化,原生js写的网页,性能经常还不如vue、react框架的性能。

    也恰恰是因为Vuereact框架的优秀,性能好,开发体验好,所以原生js开发已经逐渐减少使用了。

    复杂长列表加载下一页评测结论:微信原生开发手工优化,uni-app>微信原生开发未手工优化,taro > wepy > mpvue

    Tips:有人以为uni-app和mpvue是一样的,早期uni-app确实使用过mpvue,但后来因为性能和vue语法支持度问题已经重新开发了。

     

    1.2.2 点赞组件响应速度

    长列表中的某个组件,比如点赞组件,点击时是否能及时的修改未赞和已赞状态?是这项测试的评测点。

    测试方式:

    • 选中某微博,点击“点赞”按钮,实现点赞状态状态切换(已赞高亮、未赞灰色),

    • 点赞按钮 onclick函数开头开始计时,setData回调函数开头结束计时;

    在红米手机(Redmi 6 Pro)上进行多次测试,求其平均值,结果如下:

     

     

    说明:也就是在列表数量为400时,微信原生开发的应用,点赞按钮从点击到状态变化需要111毫秒。

    测试结果数据说明:

    • wepy/mpvue 测试数据不完整的原因同上,在组件较多时,页面已经不再渲染了

    • 基于微信自定义组件实现组件开发的框架(uni-app/taro),组件数据通讯性能接近于微信原生框架,远高于基于template实现组件开发的框架(wepy/mpvue)性能

    组件数据更新性能测评:微信原生开发,uni-app,taro > wepy > mpvue

    综上,本性能测试做了2个测试,长列表加载和组件状态更新,综合2个实验,结论如下:

    微信原生开发手工优化,uni-app>微信原生开发未手工优化,taro > wepy > mpvue

     

    二、开发者

    在满足用户业务需求的前提下,我们谈谈开发者的需求,从如下几个维度比较:

    • 平缓的学习曲线:简单易学,最好能复用现有技术栈,丰富的学习资料

    • 高效的开发体验:现代前端开发流程、工程化支持

    • 高效的社区支持:遇到问题,可很快的寻求到帮助

    • 活跃的开发迭代:框架处于积极更新升级状态,无需担心停更

     

    2.1 平缓的学习曲线

    2.1.1 DSL语法支持

    选择开发团队熟悉的、能快速上手的DSL,是团队框架选型的基本点。

    首先微信原生的开发语法,既像React ,又像Vue,有点不伦不类,对于开发者来说,等于又要学习一套新的语法,大幅提升了学习成本,这一直被大家所诟病。

    其它开发框架基本都遵循React、Vue(类Vue)语法,其主要目的:复用工程师的现有技术栈,降低学习成本。此时,框架对于原框架(React/Vue)语法的支持度就是一个重要的衡量标准,如果支持度较低、和原框架语法差异较大,则开发者无异于要学习一门新的框架,成本太高。

    实际开发中发现,各个开发框架,都没有完全实现VueReact在web上的所有语法:

    • wepy开发风格接近于 Vue.js,属于类Vue实现,相对微信原生开发算前进了一大步,但相比完整Vue语法还有较大差距,开发时需要单独学习它的规则;

    • mpvueuni-app 框架基于 Vue.js 核心,通过修改 Vue.js 的 runtime 和 compiler,实现了在小程序端的运行。mpvue支持的Vue语法略少,uni-app 则基本支持绝大多数vue语法,如filter、复杂 JavaScript 表达式等;

    • taro 对于 JSX 的语法支持度,也达到了绝大多数都支持的完善程度。

    DSL语法支持评测:taro,uni-app > mpvue > wepy > 微信原生

     

    2.1.2 学习资料完善度

    官方文档、问题搜索、示例demo的完备度方面:

    • 微信原生:文档丰富,API搜索准确,官方有示例demo,支持官网上调起微信开发者工具。

    • wepy:文档只有2页,没有搜索,组件API等文档都直接看微信的文档。没有提供示例demo,很多配置需要靠猜。

    • mpvue:文档较少,但其概念不复杂,组件API等文档都直接看微信的文档,学习难度低。问题搜索效果一般。没有提供示例demo。

    • taro:基础文档完整,具体使用问题资源较少,问题搜索效果一般,示例demo只包含基础功能,仅发布了微信一端。

    • uni-app:基础文档和各种使用专题内容丰富,问题搜索效果较好,示例demo功能完备,并发布为7端上线。

    教学课程方面:

     

    学习资料完善度评测:微信原生 > uni-app > mpvue , taro > wepy

    2.2 现代前端开发体验

    开发体验层面,处于明显劣势的是微信原生开发,主要差距在于:

    • 框架开发提供了精简的代码组织(微信原生开发,一个Page由4个文件构成,写个代码要开的标签卡太多)

    • 框架开发提供了更强大的组件化能力

    • 框架开发提供了应用状态管理(类Vuex/Redux/Mobx等)

    • 框架开发能灵活支持各种 Sass 等 预处理器

    • 框架开发可提供完整的 ES Next 语法支持

    • 框架开发方便自定义构建策略

    其它小程序开发框架均支持cli模式,可以在主流前端工具中开发,且基本都带有d.ts的语法提示库。

    由于mpvueuni-apptaro直接支持vuereact语法,配套的ide工具链较丰富,着色、校验、格式化完善;wepy要弱一些,有部分三方维护的vscode插件。

    好的开发工具,绝对可以大幅提升开发体验,这个维度上,明显高出一截的框架是uni-app,其出品公司同时也是HBuilder的出品公司,DCloud.io。HBuilder是四大主流前端开发工具(可对比百度指数),其为uni-app做了很多优化,故uni-app的开发效率、易用性非其他框架可及。

    开发体验维度,对比结果:uni-app > taro,mpvue > wepy > 微信原生

    这里可以输出一个结论:如果你需要工程化能力,那就直接忘了微信原生开发吧。

     

    2.3 高效的社区支持

    学习、开发难免遇到问题,官方技术支持和社区活跃度很重要。

     

    本次评测demo开发期间,我们的同学(同时掌握vue和react),在学习研究各个多端框架时,切实感受到由于语法、学习资料、社区的差异带来的学习门槛,吐出了很多槽。

    综合评估,本项评测结论:微信原生 , uni-app > taro > mpvue > wepy

     

    2.4 活跃的开发迭代

    开发者必须关心一个问题:该项目是否有人长期维护?

    这个问题可以通过github commits 频次、产品更新日志(changelog)、百度搜索指数等指标来衡量和对比。

    github commits 频次

    我们采集2019年4月份(时间为4.1 ~ 4.30),每个项目在github上的master分支有commit的天数,结果如下:

    Tips:

    • 微信原生是闭源的,看不到 commits 数量,但保持每月至少一次的更新节奏。

    • wepy的master分支无commit,最新的2.0.x分支在4月份也仅1天有commit记录

    从 commit 的记录来看,tarouni-app处于更新比较活跃的状态,wepympvue则相对疲软,呈现无人维护之态。

    产品更新日志

    通过浏览产品更新日志,可确认产品是否在积极迭代、增加新功能、修复用户bug。

    我们分别查看各框架官方链接的更新日志(CHANGELOG),下方是链接地址:

    • 微信基础库更新日志

    • wepy官网 CHAGELOG

    • mpvue官网 Chang log

    • taro github 更新日志

    • uni-app官网更新日志

    通过产品更新日志对比,微信原生、tarouni-app 三者更新频繁,bug修复、新功能补充都处于比较紧凑的状态;而mpvuewepy则已有长时间没有版本发布,wepy甚至有将近1年时间未发布正式版本,开发者选型需谨慎。

     

    2.5 多端复用

    随着微信小程序的火爆,支付宝、百度、字节跳动等公司也先后进入小程序领域,这些公司个个日活过亿,坐拥海量用户,企业主希望将自己的业务触达每个用户,不管这个用户在哪个小程序中。

    需求转接到程序员这里,程序员怎么办?难道真的每个平台到处搬砖吗?此时,一套代码、多端发布就成为很多程序员的梦想,小程序跨端框架应运而生。

    现实真能如此理想吗?每个跨端框架能否真的像官网宣传的那样,实现开发一次,发布到所有小程序平台?甚至和H5平台复用代码?

    我们用事实说话,依然使用上述仿微博App,依次发布到各平台,验证每个框架在各端的兼容性,结果如下:

     

    测试结果说明:

    • ⭕ 表示支持且功能正常,❌ 表示不支持,其它则表示支持但存在部分bug或兼容问题

    通过这个简单的例子可以看出,跨端支持度测评结论:uni-app,taro > mpvue原生微信小程序wepy

    但是仅有上面的测试还不全面,实际业务要比这个测试例复杂很多。但我们没法开发很多复杂业务做评测,所以还需要再对照各家文档补充一些信息。由于每个框架的文档中都描述了各种组件和API的跨端支持程度。我们过了几家的文档,发现各家基本是以微信小程序为基线,然后把各种组件和API在其他端实现了一遍:

    • taro:H5端实现了大部分微信的API

    • uni-app:组件、API、配置,大部分在各个端均已实现,个别API有说明在某些端不支持。可以看出uni-app是完整在H5端实现了一套微信模拟器

    跨端框架,一方面要考虑框架提供的通用api跨端支持,同时还要考虑不同端的特色差异如何兼容。毕竟每个端都会有自己的特色,不可能完全一致。

    • taro:提供了js环境变量判断和统一接口的多端文件,可以在组件、js、文件方面扩展多端,不支持其他环节的分平台处理。

    • uni-app:提供了条件编译模型,所有代码包括组件、js、css、配置json、文件、目录,均支持条件编译,可不受限的编写各端差异代码。

    跨端框架,还涉及一个ui框架的跨端问题,评测结果如下:

    • taro:官方提供了taro ui,只支持微信小程序和H5两端,不支持App。

    • uni-app:官方提供了uni ui,可全端运行;uni-app还有一个插件市场,里面有很多三方ui组件。

    最后补充跨端案例:

    • mpvue:微信端案例丰富,未见其它端案例

    • taro:微信端案例丰富,百度、支付宝、H5端亦有少量案例

    • uni-app:多端案例丰富,官方示例已发布到7端(包括App端)

    综合以上信息,本项的最终评测结论:uni-app > taro > mpvue > 原生微信小程序wepy

    这里可以输出一个结论,如果有多端发布需求,微信原生开发、wepy这两种方式可以直接排除了。

     

    三、结语

    真实客观的永远是实验和数据,而不是结论。不同需求的开发者,可以根据上述实验数据,自行得出自己的选型结论。

    但作为一篇完整的评测,我们也必须提供一份总结,虽然它可能加入了我们的主观感受:

    1、如果你只开发微信小程序,不做多端,那么使用uni-apptaro是更优的选择,他们相当于web世界的vue和react,有了这些工具,不再需要使用原生wxml开发。

    • 如果坚持微信原生开发,需要注意手动写优化代码来控制setdata,并且注意其工程化能力非常弱

    • 如果你是react系,那就用taro

    • 如果是vue系,那就用uni-appuni-app在性能、周边生态和开发效率上更有优势

    2、如果你开发多端,uni-apptaro都可以,可根据自己熟悉的技术栈选择,相对而言uni-app的多端成熟度更高一些。

    展开全文
  • 原生开发、H5开发与混合开发的区别

    千次阅读 2019-12-04 16:01:59
    目前市场上主流的APP分为三种:原生APP、Web APP(即HTML5)混合APP三种,相对应的定制开发就是原生开发、H5开发混合开发。那么这三种开发模式究竟有何不同呢?下面我们就分别从这三者各自的优劣势来区分比较吧...
  • 自2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web、iOS、Android之后,第四大主流开发技术。...原生开发对Node、预编译器、webpack支持不好,影响开发效率工程构...
  • Android原生集成MUI框架进行混合开发

    千次阅读 2019-11-05 15:02:41
    开发APP中我们经常进行原生结合H5进行混合开发,下面将进行详细讲解Android原生集成MUI框架进行混合开发...今天我们就要把这个号称最接近原生开发框架集成到我们Android原生本地中。 2:首先作为例子我们下载下来...
  • 1.vue的事件绑定可以直接传参数,而小程序需要使用自定义...} }) 原生小程序uniapp的区别 1.使用原生小程序的标签 2.使用原生小程序的生命周期 3.使用vue的语法 4.uniapp有自己的一套api 5.支持原生不支持的lesssass
  • Kyma一种在云原生世界中连接扩展企业应用程序的灵活而简便的方法
  • Hybrid APP 、Native APP、Web APP性能分析,优缺点对比。
  • 对于原生模式(Nativi App)、混合模式(Hybrid App)、Web App模式开发的优缺点进行分类说明。并对两款混合开发框架进行了特性对比,方便正在琢磨移动开发技术选型的同学进行参考。
  • Tabris.js - 是一个使用JavaScript开发移动原生UI的框架。iOSAndroid应用程序可以完全由一个代码库构建。
  • 所以使用uni-app开发的本质还是使用Vue,本文主要比较的是Vue小程序原生开发区别。 1.页面布局模板。 Vue:模板只有一个根标签 <template> <view></view> </template&.
  • 原生小程序开发框架

    2020-02-21 22:33:15
    原生小程序开发框架(微信自己的开发规范)
  • TensorFlo ElasticDL:一个Kubernetes原生的深度学习框架ElasticDL是一个基于TensorFlow 2.0的Kubernetes原生深度学习框架,支持容错弹性调度。 TensorFlow 1.x图形模式TensorFlow 2.x渴望执行不更改运行时Uber ...
  • 原生开发、H5开发混合开发的区别

    千次阅读 2020-05-11 12:07:29
    原生开发(Native App开发),是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发。比如Android是利用Java、Eclipse、Android studio;IOS是利用Objective-C Xcode进行开发。 ...
  • 简单实用的Android游戏开发框架FrameWork.rar 简单实用的Android游戏开发框架FrameWork.rar
  • Wax 用Lua开发原生iPhone App的框架
  • WePY是一个由腾讯团队推出的最早的一款类Vue语法的小程序组件化开发框架。WePY2 是基于小程序原生组件实现组件化开发。因此WePY2支持的最低版本小程序基础库为 1.6.3。WePY的特点有: 类Vue开发风格 支持自定义组件...
  • smart skin wpf outlook style score version1.0 原生开发框架没有任何插件升级版 没有任何UI插件,vs 常用控件原生开发 节约90%的UI开发时间 上下布局界面美观大方
  • xy-ui是一套使用原生Web Components规范开发的跨框架UI组件库
  • iOS 原生SocketCocoaAsyncSocket框架的简单使用
  • 这个库是一个快速开发框架moudle集databing+rxjava+AndroidX+rxlifecycle3+retrofit2等前沿技术,绝对物有所值
  • 小程序使用的是MINA框架,目的是通过简单、高效的方式让开发者可以在微信中开发具有原生App体验的服务。 这篇文章主要介绍了微信小程序开发框架(MINA),需要的朋友可以参考下
  • 2、同一份代码开发iOSAndroid 3、用更少的代码做更多的事情 4、轻松迭代 5、在应用程序运行时更改代码并重新加载(通过热重载) 6、修复崩溃并继续从应用程序停止的地方进行调试 7、创建美观,高度定制的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 151,251
精华内容 60,500
关键字:

原生开发和框架开发区别