Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从微信小程序原理来看app如何搭建自己的小程序环境

从微信小程序原理来看app如何搭建自己的小程序环境

作者头像
FE情报局
发布于 2023-03-01 07:44:20
发布于 2023-03-01 07:44:20
2.5K00
代码可运行
举报
文章被收录于专栏:FE情报局FE情报局
运行总次数:0
代码可运行

前沿

还记得当初小程序刚出来爆火的场景,依附于微信确实是给我们带来了极大的便利,有着微信的流量,用完即走,无需下载,随时使用,从17年到23年,小程序已经深入人心,吃喝玩乐你都可以找到小程序的身影,疫情期间各种码的场景也给小程序带来了巨大的流量

当然不只是微信小程序,各大平台都推出了自己的小程序,像支付宝小程序、百度小程序、抖音小程序等等,这些app都紧跟潮流,实现了自己的小程序框架,经过了五年多时间的发展,小程序的框架已经趋于稳定,对于前端开发来说,甚至出现了一批专门做小程序的开发者

在开发使用上,相信大家在看文档的同时,已经有了自己的认识,但是小程序具体的架构是怎样的?它的原理是什么?我们如何在自己的app上搭建一套小程序体系?

当然微信的webview的方式也能实现小程序同样的功能,但是和微信的webview相比,小程序运行速度更快,因为小程序是双线程模型,逻辑和渲染是分开的,不会相互阻塞

小程序原理

在浏览器环境中,我们都知道,js代码的执行会阻塞页面渲染,渲染和脚本执行是互斥的,长时间的脚本运营导致页面无响应,这也是为什么react要进行切片操作

小程序采用双线程将两者分开,渲染和逻辑独立,互不影响,这就是为什么上面提到的小程序要比正常的H5要快,当然要让用户感受到快,首要的就是渲染

目前比较通用的四种渲染技术分别是

  1. webview渲染
  2. native渲染
  3. Hybrid渲染
  4. Skyline渲染引擎(新增)

首先如果采用webview的渲染我们也提到了,同一个线程阻塞导致性能问题,采用native的方式做渲染的话我们改动小程序代码还需要同微信客户端一起发包,显然是不可能的,既然两个都不行,那采用hybrid的方式呢?将两者结合,比如react native就采用了这种方式

那什么是hybrid呢?说白了就是一个app中既有native的内容,又有web的内容,原理是其中有一个UIWebView,里面嵌入了一些web页面,这些web页面可以跨平台使用,比如ios和安卓,做个通用的壳就可以了,你可以把微信类比成hybrid app,小程序就是一些H5,界面渲染走的是web层面的渲染,然后由端上提供大量的接口提供丰富的客户端原生能力,保证在web的体验上能够使用一些原生的能力,并且更新比较迅速

近期微信新增了一种渲染引擎,为什么要新增呢?主要原因是由于web发展了这么久,虽然渲染方面已经做的很好的,但是还是由于历史原因以及复杂的渲染流程,让它在app中的表现还是有一定的差异,毕竟js总是会阻塞页面渲染,所以skyline是一种新的渲染引擎,skyline创建了一条渲染线程来负责layout, composite 和渲染等任务,并在在端上划出一个独立的上下文,来运行之前webview承担的js任务、dom树创建等逻辑。使得js不在阻塞页面的渲染,并且很好的保证了兼容性

但是其中的一些特性并不是原生就有,还是需要端上做一些能力的开发和兼容,比如CSS的calc 函数,小程序的picker-view组件等等都需要去做适配,成本较高,但是这确实是以后的小程序发展方向,能够较好的提升小程序性能

目前如果没有特殊指定,小程序采用的还是hybrid方式

安全

除了渲染要快,对于小程序来说,最重要的一点是安全,对于web来说,我可以跳转任意想要的页面,比如从自己的页面跳转到baidu,跳转到juejin,都是很随意的,没有任何的管控,但是对于小程序来说不能这样,如果没有约束要跳转的内容,体验会变得很糟糕

另一方面,如果通过js代码获取一些用户的敏感数据通过dom操作,那用户信息泄漏会将事情变的无法进行

所以基于这些情况,微信内部阻止了一些操作dom,跳转,动态脚本执行的接口,只提供了一些js的脚本执行器,所以小程序提供了一个沙箱环境,这个环境不能有浏览器相关操作,而对于客户端来说,本身微信app就有内置的js解释引擎,iOS下是内置的JavaScriptCore框架,在安卓则是用腾讯x5内核提供的JsCore环境,创建了独立的线程去执行js代码,这个线程中执行的都是相关的业务逻辑的代码,逻辑相关的内容都在这里处理,渲染相关的都在webview中处理,通过逻辑层去控制渲染层的展示,这就是小程序的双线程模型

性能

既然是双线程,那问题来了,线程之间的通信是有延迟的,就导致线程之间的通信实际上是异步的,对于和客户端原生的交互也是异步的,所以小程序的api大量采用了回调的方式,比如选择图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.chooseImage({
  count: 1,
  sizeType: ['original', 'compressed'],
  sourceType: ['album', 'camera'],
  success (res) {
    // tempFilePath可以作为 img 标签的 src 属性显示图片
    const tempFilePaths = res.tempFilePaths
  }
})

组件

既然渲染是用webview来的,那是不是我们直接使用html标签就可以了,当然不行,不然利用a标签那不是也可以自己跳转了么?所以小程序搞了自己的一套组件系统,名为Exparser,本质还是模仿了html的那一套,但是相对的也增加了自己的一些能力,比如button,使用一些额外的参数用来获取用户信息,map可以直接使用地图的能力,ad的广告能力

通信

小程序和app通信原理其本质和web同app通信的原理类似,只不过有渲染层和逻辑层的通信,因为双线程架构模式,安卓比较简单,不管是逻辑层还是渲染层,都是在window对象中注入一些方法,ios在渲染层采用messageHandlers特性,逻辑层则是在JavaScripCore框架注入一个全局的原生方法

总结

整套的原理有了,根据这些原理和内容,本质上是可以能够自己实现一套小程序的体系的,但是这个工作量无疑是巨大的,既然这已经是一套成熟的方案,那如何在自己的app里面搭件一套小程序环境呢?

市面上已经存在很多开源的方案,毕竟个大厂商都已经有自己的小程序,容器技术已经成熟,比如常见的FinClip,OpenApp,mPaas,Donut等

我们以FinClip为例,毕竟FinClip能够运行微信中的小程序,并且能够保证用户体验,客户量较大,国内较为领先的小程序容器化公司,我们熟悉的像建设银行app,工商银行app等都有它的身影,有整个一套完整的小程序管理平台,端侧小程序sdk,以及自身的开发者工具,方便运营开发以及数据分析

像我们上面提到的沙箱环境,双线程的逻辑层和视图层都做成了一套通用方案

所以如果想搭件自己的一套小程序体系,使用现有的方案,安全省心,希望能给需要的同学一定的参考

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FE情报局 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小程序原理初探
微信小程序是介于Native和web app之间的产物。它依托浏览器(webview)展示,同时可以调用原生能力(如获取通信录,拍照等等),同一份代码可运行在Android,iOS和微信调试开发工具内(跨平台能力)。
娜姐
2021/01/14
1.5K0
小程序原理初探
浅谈小程序运行机制
接触小程序有一段时间了,总得来说小程序开发门槛比较低,但其中基本的运行机制和原理还是要懂的。“比如我在面试的时候问到一个关于小程序的问题,问小程序有window对象吗?他说有吧”,但其实是没有的。感觉他并没有了解小程序底层的一些东西,归根结底来说应该只能算会使用这个工具,但并不明白其中的道理。
super.x
2019/07/02
8160
小程序的底层框架
原文链接:https://godbasin.github.io/2018/09/02/wxapp-technology-architecture/
李成熙heyli
2018/11/14
1.5K0
小程序的底层框架
微信小程序底层框架实现原理|万字长文
我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情
虎妞先生
2022/10/27
4.7K0
微信小程序底层框架实现原理|万字长文
微信小程序基础架构浅析
作者:billgong,腾讯IEG前端开发工程师。 微信小程序,简称小程序,英文 mini program。是一种不需要下载安装即可在微信中使用的应用,用户扫描小程序码或搜索小程序即可打开,触手可及,用完即走,不用关心是否安装太多应用的问题。 小程序技术演进 内部开放微信原生能力 使用 WeixinJSBridge 预览图片 此类 API 最初是提供给腾讯内部一些业务使用,很多外部开发者发现了之后,依葫芦画瓢地使用了,逐渐成为微信中网页开发的事实标准。 JS-SDK 发布 2015 年初,微信发
腾讯技术工程官方号
2021/06/10
2.9K0
小程序新渲染引擎 Skyline 发布正式版
为了进一步提升小程序的渲染性能和体验,我们推出了一套新渲染引擎 Skyline,现在,跟随着基础库 3.0.0 发布 Skyline 正式版。
binnie
2023/08/14
6390
H5 和小程序架构有什么差异
我们知道像是一般我们常用到的 App 都是 hybrid 模式的,特别是例如支付宝、微信、抖音、美团之类的都是以原生+H5的形式进行业务的承载,但是到了后面这些 App 又不约而同的在其中增加了小程序的运行能力。
Onegun
2023/11/14
5000
H5 和小程序架构有什么差异
微信小程序实现原理
微信小程序采用wxml、wxss、javascript进行开发,本质是一个单页应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口。微信的架构,是数据驱动视图的MVVM模式,其视图UI和数据是分离的,所有的页面更新,都需要通过对数据的变更来实现。小程序分为两个部分Webview和AppService,Webview主要用来展现渲染界面,AppService用来处理业务逻辑、数据及接口调用,通过系统层JSBridge实现通信,实现UI的渲染与事件的处理。
WindRunnerMax
2020/08/27
1.4K0
干货|小程序的运行机制和原理
在小程序没有出来之前,最初微信WebView逐渐成为移动web重要入口,微信发布了一整套网页开发工具包,称之为 JS-SDK,给所有的 Web 开发者打开了一扇全新的窗户,让所有开发者都可以使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情。
用户10245619
2023/02/14
9420
小程序的底层框架
| 导语  前端的框架太多让人眼花缭乱,很多相似的地方,优秀的地方大家都会借鉴,同时又会有各自的一些特点。小程序也好,其他框架也好,理解他们的设计缘由、实现原理,还是能学到很多很多东西的。 技术选型 目前来说,页面渲染的方式主要有三种: 一、Web 渲染。 二、Native 原生渲染。 三、Web 与 Native 两者掺杂,也即我们常说的 Hybrid 渲染。 前面也说过,小程序最终的呈现形式,是 WebView + 原生组件,Hybrid 方式。我们结合之前对小程序的期望来看: 开发门槛:Web
腾讯NEXT学位
2018/12/07
7600
小程序的底层框架
探究Hybrid-APP技术原理
随着Web技术的发展和移动互联网的发展,Hybrid技术已经成为一种前端开发的主流技术方案。那什么是Hybrid App呢?
Tiffany_c4df
2019/09/04
9200
小程序的底层架构设计
小程序(Mini Program)是一种无需安装即可使用的轻量级应用,广泛应用于微信、支付宝、百度等生态系统中。它的核心特点是即开即用、体验接近原生、跨平台运行、开发成本低。为了实现这些特点,小程序在底层架构上采用了特有的设计思路,以确保其高效运行和良好用户体验。
LucianaiB
2025/02/21
1410
小程序的当下和未来可能 | 崔红保在GMTC 深圳站演讲内容整理
简要介绍今天的分享大纲,罗马不是一天建成的,小程序也不是一天发明的;小程序这种介于H5和Native App之间的特殊应用形态,从探索到成熟,经历了哪些过程,我们首先带大家回顾梳理一下,然后从现有技术架构出发,分析小程序当下几个主要性能坑点,各家小程序引擎为解决这些坑点,做了哪些完善工作;比如大家知道小程序是以web渲染为主、原生渲染为辅,那引入原生渲染后,引发了哪些新的问题?为解决这些,微信提出了同层渲染的方案,同层渲染在技术层面上又是如何实现的?最后从当前已知问题出发,对于小程序未来的技术更迭,抛出一些我们认为的可能方向,供大家参考。
CHB
2020/04/10
1.1K0
小程序的当下和未来可能 | 崔红保在GMTC 深圳站演讲内容整理
混合App求生指南:从Hybrid到小程序架构,技术选型踩坑实录
作为一名在移动开发战场摸爬滚打五年的“老油条”,今天想掏心窝子聊聊混合开发这个让人又爱又恨的技术路线。
Onegun
2025/03/26
1220
混合App求生指南:从Hybrid到小程序架构,技术选型踩坑实录
小程序实现原理解析
概述 作为一名前端开发,如果你还停留在应用开发层面,那你就OUT了,快来跟我一起探讨下小程序框架本身底层实现的一些技术细节吧,让我们从小程序的运行机制来深度了解小程序。 小程序是基于WEB规范,采用HTML,CSS和JS等搭建的一套框架,微信官方给它们取了一个很牛逼的名字:WXML,WXSS,但本质上还是在整个WEB体系之下构建的。 WXML,个人猜测在取这个名字的是微信的Xml,说到底就是xml的一个子集。WXML采用微信自定义的少量标签WXSS,大家可以理解为就是自定义的CSS。实现逻辑部分的JS还是通
xiangzhihong
2018/01/26
11.1K1
Hybrid App技术解析 -- 原理篇
引言 随着 Web 技术和移动设备的快速发展,Hybrid 技术已经成为一种最主流最常见的方案。一套好的 Hybrid架构方案 能让 App 既能拥有极致的体验和性能,同时也能拥有 Web技术 灵活的
前端教程
2018/07/27
1.7K0
Hybrid App技术解析 -- 原理篇
浅谈Hybrid
随着 Web 技术和移动设备的飞速发展,各种 APP 层出不穷,极速的业务扩展提高了团队对开发效率的要求,这个时候使用 IOS/Andriod 开发一个 APP 似乎成本有点过高了,而 H5 的低成本、高效率、跨平台等特性马上被利用起来形成了一种新的开发模式:Hybrid APP。
前端森林
2020/04/23
7K0
浅谈Hybrid
【干货】解剖小程序的 setData
双线程的渲染机制、通信机制,setData 的出现、工作原理、使用建议等,应该要怎么去理解呢?
腾讯NEXT学位
2018/12/14
2K0
【干货】解剖小程序的 setData
React-Native与小程序的底层框架比较
页面渲染 1.在渲染层,宿主环境会把WXML可以先转成JS对象,然后再渲染出真正的Dom树。 2.在逻辑层发生数据变更的时候,需要通过宿主环境提供的setData方法把数据从逻辑层传递到渲染层 3.对比前后差异,把差异应用在原来的Dom树上,渲染出正确的UI界面
薛定喵君
2019/11/05
3.1K0
解剖小程序的 setData
原文链接:https://godbasin.github.io/2018/10/05/wxapp-set-data/
李成熙heyli
2018/11/14
4.5K0
解剖小程序的 setData
相关推荐
小程序原理初探
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验