小程序 、 App 和 H5 之间的区别详解

禅あ思 2018-12-06 13:58:43 ⋅ 829 阅读

小程序的实现原理


根据微信官方的说明,微信小程序的运行环境有 3 个平台,iOS 的 WebKit(苹果开源的浏览器内核),Android 的 X5 (QQ 浏览器内核),开发时用的 nw.js(C++ 实现的 web 转桌面应用)。


小程序运行时会创建两个线程:View Thread 和 AppService Thread,相互隔离,通过桥接协议 WeixinJsBridage 进行通信(包括 setData 调用、canvas 指令和各种 DOM 事件)。

下述表格展示了两个线程的区别:


两个线程是通过系统层的 JSBridage 来通信的,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务处理。

小程序与 App 的区别


运行环境

原生 App 直接运行在操作系统的单独进程中(在 Android 中还可以开启多进程),而小程序只能运行在微信的进程中。

开发成本

原生 App 的开发涉及到 Android/iOS 多个平台、开发工具、开发语言、不同设备的适配等问题;而小程序只需要开发一个就可以在 Android/iOS 等不同平台不同设备上运行。

原生 App 需要在商店上架(Android 需要上架各种商店);小程序只能在微信平台发布。

系统权限

原生 App 调用的是系统资源,也就是说系统提供给开发的的 API 都可以使用;而小程序是基于微信的,小程序所有的功能都受限于微信,也就是说微信给开发者提供 API 才可以使用,不能绕过微信直接使用系统提供的 API。

原生 App 可以给用户推送消息;小程序不允许主动给用户发送消息,只能回复模版消息 。

原生 App 有独立的数据库,可以做离线存储;小程序只能存储到 LocalStorage,无法做离线存储。

原生 App 需要下载,安装包比较大;小程序无需下载,可以通过小程序码等方式通过微信直接打开。

运行流畅度

原生 App 运行在操作系统中,所有的原生组件可以直接调用 GPU 进行渲染;而小程序运行在微信的进程中,只能通过 WebView 进行渲染。

小程序与 H5 的区别


运行环境

简单来说,小程序是一种应用,运行的环境是微信(App);H5 是一种技术,依附的外壳是是浏览器。

H5 的运行环境是浏览器,包括 WebView,而微信小程序的运行环境并非完整的浏览器,因为小程序的开发过程中只用到一部分H5 技术。

小程序的运行环境是微信开发团队基于浏览器内核完全重构的一个内置解析器,针对性做了优化,配合自己定义的开发语言标准,提升了小程序的性能。

小程序中无法使用浏览器中常用的 window 对象和 document 对象,H5 可以随意使用。

开发成本

H5 的开发,涉及开发工具(vscode、Atom等)、前端框架(Angular、react等)、模块管理工具(Webpack 、Browserify 等)、任务管理工具(Grunt、Gulp等),还有 UI 库选择、接口调用工具(ajax、Fetch Api等)、浏览器兼容性等等。

尽管这些工具可定制化非常高,大部分开发者也有自己的配置模板,但对于项目中各种外部库的版本迭代、版本升级,这些成本加在一起那就是个不小数目了。

而开发一个微信小程序,由于微信团队提供了开发者工具,并且规范了开发标准,则简单得多。前端常见的 HTML、CSS 变成了微信自定义的 WXML、WXSS,官方文档中都有明确的使用介绍,开发者按照说明专注写程序就可以了。

需要调用后端接口时,调用发起请求API;需要上传下载时,调用上传下载API;需要数据缓存时,调用本地存储API;引入地图、使用罗盘、调用支付、调用扫码等等功能都可以直接使用;UI 库方面,框架带有自家 weui 库加成。

并且在使用这些 API 时,不用考虑浏览器兼容性,不用担心出现 BUG,显而易见微信小程序的开发成本相对低很多。

系统权限

微信小程序相对于 H5 能获得更多的系统权限,比如:网络通信状态、数据缓存能力等,这些系统级权限都可以和微信小程序无缝衔接。

而这一点恰巧是 H5 被诟病的地方,这也是 H5 的大多应用场景被定位在业务逻辑简单、功能单一的原因。

运行流畅度

这条无论对于用户还是开发者来说,都是最直观的感受。长久以来,当HTML5应用面对复杂的业务逻辑或者丰富的页面交互时,它的体验总是不尽人意,需要不断的对项目优化来提升用户体验。但是由于微信小程序运行环境独立,尽管同样用 HTML +CSS + JS 去开发,但配合微信的解析器最终渲染出来的是原生组件的效果,自然体验上将会更进一步。

小程序多平台互转原理


微信小程序与支付宝小程序有很多相似之处,可以封装两个小程序之间的差异进行转换,从而实现一套逻辑代码运行在两个平台。

项目目录结构:


API 差异


封装后的 API:


布局差异


可以通过程序进行转换。

---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    推荐一款功能强大,开源免费H5可视化编辑器

    H5-Dooring 是一款功能强大,开源免费H5可视化页面配置解决方案,致力于提供一套简单方便、专业可靠、无限可能H5落地页最佳实践。技术栈以react为主, 后台采用nodejs开发. 预览

    A3Mall v1.5.2 发布,免费开源 PHP 程序商城系统

    项目介绍 A3Mall商城系统是基于ThinkPhp6.0+Vue开发一套移动电商系统, 支持微信公众号商城、H5商城、程序商城,支持多种营销活动,优惠劵、订单活动、团购、秒杀、会员特价、积分

    微信程序-ImagewidthFix属性rpm尺寸使用

    在做微信程序商品详情页,商品详情是图片集合,渲染完成后发现图片加载很不自然

    微信程序微商城(四):动态API实现商品详情页(上)

    1、实现商品详情页面布局(这篇实现3个模块,头部商品图片轮播、商品价格商品描述、商品详情展示) 2、根据用户点击不同商品请求API动态加载数据

    微信程序电商实战-商品详情(上)

    先看一下今天要实现程序商品详情页吧!

    微信程序微商城(五):动态API实现商品详情页(下)

    加入购物车悬浮框、商品数量、价格计算、收藏加入购物车功能开发

    微信程序微商城(七):动态API实现商品分类

    微信程序商品分类页面布局并且调用动态API获取数据并加载

    Taro 3.0.17 发布,BAT 程序H5 与 RN 端统一框架

    Taro 3.0.17 发布了。Taro 是一套遵循 React 语法规范多端统一开发框架,支持用 React 方式编写一次代码,生成能运行在微信程序/百度智能程序/支付宝程序H5

    Taro 3.0.22 发布,BAT 程序H5 与 RN 端统一框架

    Taro 3.0.22 发布了。Taro 是一套遵循 React 语法规范多端统一开发框架,支持用 React 方式编写一次代码,生成能运行在微信程序/百度智能程序/支付宝程序H5

    「开源资讯」BookChat v2.4 发布,通用书籍阅读微信程序

    BookChat - 面向程序员开源书籍文档阅读学习程序

    微信程序实现商品数量加减

    这是一个用微信程序原生代码实现数量加减demo,主要是用于商品购物车或者商品详情修改数量使用

    微信程序微商城(六):动态API实现新品特卖商品流式布局

    实现新品特卖商品列表布局、调用动态API获取数据并加载点击商品跳转商品详情

    微信程序实战篇:如何解决https域名问题 ?

    开发自己微信程序绕不开https问题,为了能在程序中调用我们自己API服务请打开看一看吧!!!

    精品推荐:微信程序常见UI框架/组件库

    想要开发出一套高质量程序,运用框架,组件库是省时省力省心必不可少一部分,随着程序日渐火爆,各种不同类型

    微信程序 - iconfont 图标字体

    你还在使用图片作为程序图标?大猪告诉大家如何在程序上使用iconfont字体图标

    微信程序电商实战-商品详情加入购物车(下)

    今天会接着上一篇开始写商品详情页加入购物车部分,直接看效果......

    微信程序微商城(三):电商首页福利专场无限下拉刷新动态API数据实现

    电商首页第5个模块-福利专场,通过https调用API数据模型来实现无限下拉刷新......

    微信程序实战篇:程序之页面数据传递

    我们在写程序时候经常会遇到子页面向主页面回传数据或者普通页面跳转到tabBar 页面携带数......

    微信程序抖音实战-首页(下)

    抖音程序首页动态数据获取