问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一个小程序的实施技术方案?

发布网友 发布时间:2023-06-07 19:54

我来回答

1个回答

热心网友 时间:2024-07-29 16:10

微信小程序上线大半年,大部分技术原理也有文章介绍了,本文尝试从需求出发探讨微信小程序技术方案的来源,以及最近公测的支付宝小程序技术方案的考量。

微信小程序

微信小程序的需求是让第三方开发者可以接入,可以使用微信的提供的接口去开发应用嵌入在微信里。对于这个需求,最简单的实现方案是:让外部开发者开发纯H5应用,在微信的H5容器里打开,容器提供微信native接口,就行了。在有小程序之前,已经有很多这样的业务接入,像京东购物,钱包里的各种友商大众点评/滴滴出行等,都可以认为是一个“小程序”,内嵌在微信里,能调用微信native接口,是不是沿着这种模式下去,把相应的接口开放给第三方,再提供个入口就行了?

实际上这种简单的方案不能满足需求,在产品上微信小程序有另外两个很重要的需求:

管控。作为一个平台必须对接入的应用有管控能力,必须能尽量精确控制应用的内容和类型,毕竟若出现非法应用平台是要承担责任的,H5的方式太过自由,开发者可以随时改变整个应用的内容,平台难以检测到这些改变,无法管控。另外H5开发质量参差不齐,平台也无法管控,这对于一向有洁癖的微信来说无法接受。

体验。作为一个“小程序”需要让体验接近原生,而上述像京东购物这些普通H5页面的体验不太行,包括启动速度/页面切换流畅度都有问题,跟原生体验没法比。

所有小程序的技术方案都是为了这两个需求服务。


管控

为了满足管控的需求,技术上微信做了两个事情:小程序框架和分离JS运行环境。

框架/DSL

H5太自由,首先要做的就是*它的自由,怎样*?自然是做个框架套住,让开发者只能按框架的规则去开发。那应该使用怎样的框架?

在PCSNS时代,*做开放平台时有类似的场景,为了第三方开发者能在*平台上开发,同时又能*住开发者的权限,*要求开发者使用自定义的一套DSL(FBML)去开发,而这个DSL能怎么写,最终能转成什么,如何执行,都是平台说了算,同时也可以很方便做代码扫描和审查。

小程序正好能借鉴这样的设计思路,界面不使用HTML开发,而是自定义一套DSL,这样就可以很容易配合审核/代码扫描/域名*等系列措施去做管控,这就是小程序这一套框架的来源。这套框架通过wxml去描述界面,wxss描述样式,js去处理逻辑和数据,再通过工具一系列处理把这些转为HTML/CSS/JS显示在webview上,并处理界面交互和数据更新。

这样用一套框架去*开发方式,再造一层DSL,除了管控外还有一个好处,就是容易进行针对性优化,DSL最终转成什么,最终如何执行渲染都由框架决定,上层不感知,可以做成由webview渲染,有条件也可以用类似RN的方案自己实现渲染层。

JS环境

通过框架限定开发方式后,管控上还有个问题,就是如何*应用端类JS语言调用domAPI?小程序跑在webview上,渲染时必然要通过JS操作dom,如果小程序框架和应用JS代码都有权限操作dom,应用可能会通过各种方式在上线后绕过检查,注入JS调用dom接口去修改页面结构和内容,变成跟审核时不一样的应用。怎样能*应用的JS调用dom的权限?微信想了个比较创新的解决方案,就是:JS运行环境与浏览器分离,运行在单独的JS引擎上。

脱离了浏览器,JS自然没有dom的调用权限,任何跟webview界面相关的API都无法拿到。而小程序框架核心JS运行在webview上,可以自由操作dom,通过小程序框架定义的机制,应用端通过wxml/wxss定义固定的渲染样式,JS端只管数据绑定,数据可以通过native桥梁从JS引擎传递到webview,JS端无法做任何渲染相关的操作,可以对渲染的内容有完整的管控权。

独立的JS运行环境除了满足管控需求外,也额外带来一些好处和一些坏处,好处在于:

多个页面可以共享一个JS运行环境,数据可以很方便地共享,整个小程序生命周期里共享同一个上下文,更接近APP的开发体验。

JS与页面渲染分离并行执行,不会出现JS执行时卡住页面渲染的情况,提升渲染性能。

坏处在于:

多了数据序列化传输的开销,数据需要从JS传到webview给视图层渲染,需要序列化为字符串格式再进行传输。

iOS上WKWebview的JS引擎比JavaScriptCore多了JIT优化,执行速度快很多倍,小程序的JS运行在JavaScriptCore上无法享受到这个优化。

由于管控需求过于刚需,这个方案带来坏处可以接受。

体验

小程序最主要的两个技术点—框架和JS运行分离都是源自管控需求,而体验上的需求就是由各种细致的性能优化组成了,很多文章也分析过,这里简单说下,包括:

离线包:整个小程序打包下发,不需要打开每个页面都去请求,减少第二次打开时间以及页面切换时间。

预加载:预加载多一个wkwebview放后台,用户打开小程序时省去初始化wkwebview时间。另外对于一个小程序内的页面切换,得益于框架的设计,可以做到预渲染模板,切换时再填充数据,加快渲染速度。

缓存:退出小程序后不会立即销毁,会在后台继续跑5分钟,在这期间用户切回小程序时速度快。

视觉:小程序首次加载通过loading和动画的方式过渡,拒绝白屏,给人一种快的感觉,同时提升了小程序的标识度。

剩下的就是围绕小程序这个平台的周边建设了,像组件,native接口,IDE,后台管理,版本管理,权限控制等基础支持。

支付宝小程序

策略

微信小程序推出时主要面向的场景是线下,希望商家能开发小程序,做像点菜买票这样的即时性应用,提升线下商户体验,支付宝作为线下战场的主要竞争对手自然要跟进。

支付宝要做小程序应该怎么做?可以根据自身的情况,定义另一套技术体系,让第三方接入。但这样的话第三方如果要同时接入微信和支付宝,需要开发两套程序,成本很高,而微信有先发和平台优势,很可能变成只开发微信小程序而放弃接入支付宝小程序,所以最好的做法是降低这里的接入成本,让微信小程序的代码可以复用在支付宝小程序上。所以支付宝小程序对外的框架/API/组件必须是跟微信小程序接近或力求一致,技术上没得选择,所以可以看到支付宝小程序公测版的文档很多跟微信一致。

实现

支付宝小程序框架对外接口是跟微信一样,又因为同样有管控/安全和体验的需求,有些策略是类似的,像独立JS环境,离线包,缓存策略等,但在小程序框架的实现上就跟微信完全不一样。小程序框架作为一层屏蔽了实现细节的DSL层,最终通过什么技术手段实现都可以是由框架底层自由定制的,这边底层架构基于蚂蚁前端团队多年的积累,最终web版小程序是以react为基础实现。

ReactNative

除了对外的跟微信一致的web版小程序,内部一直在尝试ReactNative版小程序,渲染层不适用webview,而是用RN去渲染,提升性能和体验,这也是小程序DSL层带来的好处,底层渲染引擎可以很方便地替换实现方案,甚至同时存在多套方案。

很多人问为什么不用weex,按我理解首先是蚂蚁的前端技术栈基于react,切换成本高,另一个RN相对weex成熟度高,社区支持度高,并保持着不间断的更新,相对友好。

RN本身不跨平台,iOS/Android有各自的写法,在RN的使用上,业界很多人各自实现了基于RN的跨三端或两端的开发方式(例如JDReact),也就是一次开发,能同时支持RN在iOS/Android两端做原生渲染,也支持fallback到webview渲染。这里小程序也算是这样一套方案,上层通过自定义DSL开发业务,部署时通过工具分别转换成三个平台不同的代码,在三个平台运行。

内部应用

小程序是一套对外的方案,主要用于第三方应用接入,因为上文也说了,框架上很多技术方案都是为了满足对第三方管控和安全方面的需求,而小程序相关的很多体验优化其实用纯H5也可以做到,内部业务用web版小程序开发并没有带来什么好处,反而增加学习成本。但RN版小程序不一样,它有一些优势,包括:

RN相对webview性能优势明显,秒开率高,交互也更流畅。

相对于单纯使用RN开发,使用小程序可以屏蔽平台差异,实现跨平台一次开发。

小程序有配套的开发环境/IDE/包管理等基础设施支持,无需再重复建设。

对于业务开发者,小程序不是全新的一套开发方式,在业界可复用,对于框架实现者,RN也是业界流行开源方案,有强大的社区支持。对内对外都避免了另外创建一套只能在内部使用的技术体系,极大降低技术成本。

基于这些原因,在蚂蚁财富这边一些内部原本应该使用H5实现的业务,也正尝试更多地使用小程序实现,以提升用户体验,目前部分基于小程序RN版开发的业务已在线上稳定运行,后续也会继续尝试把小程序RN版持续打造成高性能稳定的三端统一动态化方案。

一个小程序的实施技术方案?

小程序框架作为一层屏蔽了实现细节的DSL层,最终通过什么技术手段实现都可以是由框架底层自由定制的,这边底层架构基于蚂蚁前端团队多年的积累,最终web版小程序是以react为基础实现。 ReactNative 除了对外的跟微信一致的web版小程序,内部一直在尝试ReactNative版小程序,渲染层不适用webview,而是用RN去渲染,提升性能和体验,...

请问有哪些地方能用到低代码开发

引迈JNPF低代码开发平台可以以极少量代码或无代码的方式开发各种企业级管理系统,其特点如下:1. web在线开发低代码开发平台是个全Web可视化开发和运行架构,只要在web端网页就能开发,不需要安装配置复杂的本地开发环境;2. 代码生成器依托代码...

如何做一个电商商城小程序?

发布,审核通过后,就可以通过小程序的二维码进行进入使用了。还有其他的很多获取小程序途径,这里就不一一举例了。开始使用 四、商城 上面三个是基本的小程序开发流程,然而商城的实现就是在步骤二中进行的。自己做一个商城,你首先需要勾画流程和逻辑,再进行界面设计,再到交互代码的编写,然后是和后端、...

如何做一个微信小程序?

有一部分大型企业或互联网公司会选择自己招聘、组建新的技术团队,自主开发企业的微信小程序。选择这种开发方式的企业首先一定要有强大的经济实力,其次,自己组建技术团队周期会更长,如果企业想要在一个较短的周期内完成微信小程序的开发,选择临时招聘组建团队的方式,效率较低,且开发效果也不好保证。三...

开发一个商城小程序有什么步骤?

二.选择开发的方式:尽管从本质上微信小程序模板和小程序定制开发都是属于微信的衍生应用,但是由于彼此的质量不同、功能上的数量、页面结构等方面也是有所区别的,所以价格自然而然也是会不一样。而且现在的微信小程序定制开发也是时刻的会进行升级以及更新换代,所以从技术维护和售后方面也是比较有保障的。

如何做一个小程序

微信版本升级后,打开微信,点击底部的“发现”这个菜单项,就会发现升级后的“发现”菜单里,增加了“小程序”这样一个功能。2.点击打开小程序后,可以看到有附近的小程序和我的小程序,附近的小程序是所在定位周边的小程序。下面的小程序列表可以看到的是我们之前打开过的一些小程序,如果有自己觉得很好...

小程序开发流程有哪些?

1.在微信公众平台上,注册一个小程序账号。根据注册指引填写相应信息,提交相应的资料。如果你有认证过的微信公众号,可以直接在公众号后台迅速创建小程序,选择小程序管理——快速注册并认证小程序就行了。2.注册好账号后,登录小程序。在后台设置好小程序的名称、头像、服务类目等信息,提交后等待微信...

如何开发微信小程序需要哪些技术

2、小程序模板开发 小程序模板开发则是套用现成的小程序模板,将功能组合起来成为一个模板小程序。小程序模板是标准化产品,因而只有标准化的小程序功能需求才能满足使用。小程序模板由于是已经开发好的,因而无需再花费时间去开发,基本上开通账号就能直接使用,因而价格方面对比小程序定制开发会有很大差异。...

怎样制作一个小程序?

流程一:微信小程序注册 登录微信公众平台,点击立即注册,选择小程序模块。流程二:微信小程序制作 对于不懂技术和编程的小白,可以采用套用模板的模式通过简单的拖拽方式一键生成微信小程序,方便快捷。流程三:选用合适模板 在各式各样的模板中,选择适合自己行业的模板 流程四:编辑内容,发布 选择合适的...

做一个小程序商城有几种方法?

做一个小程序商城有几种方法?方法1:自己制作微信小程序 自己开发制作微信小程序,只需要支付300元微信小程序注册认证费用。但这个方式需要你有一定微信小程序开发编程代码和页面设计等综合能力。如果你具备这些能力的话,可以采用这种方式。方法2::购买源码 这种模式主要是购买别人已经开发好了的小程序源码...

开发一个小程序,都需要什么流程

自己开发小程序。自行开发小程序需要公司拥有自己的技术人员,程序的复杂程度是时间的主要衡量标准。外包。核算成本后,在预算允许内,可以选择找技术公司进行外包,功能简单的一般要一个月到三个月不等,能够满足需求,后期维护简单。购买模板。这种发式可以快速获得小程序,但功能单一,后期更迭难度大。

技术方案及实施方案 技术方案和项目实施方案 某企业实施一项技术方案 技术实施方案 某技术方案实施期为两年 小程序建设推广方案 小程序推广策划方案 微信小程序营销方案 小程序推广的八种方式
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
word文档怎么删除多余表格内容 Excel表格技巧—怎么打开多个独立窗口 如何在一个窗口内显示两个或多个不同的界面? 如何让多个标签页在同一个窗口中? 现在从赤峰寄东西到深圳要多长时间 谢谢! 想在深圳邮寄到老家内蒙古赤峰一张木质床怎么办谁知道谢谢 想从深圳到内蒙赤峰巴林右旗邮寄衣服,大概50斤左右,要多少钱 施华洛世奇是什么材质的首饰 卷毛最强出装 卷毛如何答理 格林精密历年走势?今日深证大盘走势格林精密?格林精密的价值在哪里... 格林精密股价趋势?格林精密每月收盘价?格林精密股能涨几倍? 格林精密最近行情?格林精密今天收盘价?格林精密不涨的原因? 格林精密走势解析?格林精密2021年股票走势?格林精密股价跌破发行价了吗... 深圳这边哪里的电子市场最大?最全? 失败单词 尼康D780电池后盖和哪个型号相同? oppoa96动态照片怎么拍摄? 尼康el15abc的区别 遇了缘重庆话什么意思 育种学家畜和野生动物区别和联系 旅游一词在古代怎么说 可转债计提的财务费用是什么意思 古人会经常出去旅游吗 古人也会经常出去旅游吗 严禁摘花草植物的提示语(精选50句) 世界技能大赛加强了什么 党的十八大对全面建成小康社会提出了那些重要任务? 《全境封锁》背景技能玩法介绍 河南人管盛饭叫什么呢? 妖皇裂天为什么是天之子 找中介买期房,中介会一直负责到交房么 期房中介费怎么收费 买期房需要中介吗 德佑房产中介可以卖期房吗 2021广西四六级考试时间 广西六级考试时间2023 羽毛球as02什么意思 胡瑞航这个名字怎么样啊,求解 老婆说老公是逆子可以吗 2022年1月15日可以公对公转帐吗 耕耘三尺讲台守望满园花开什么意思 大一新生开学需要自带被褥吗 要带哪些生活物品 耕耘于分秒,收获于细微能用于教师吗 三尺讲台 默默耕耘是什么意思? 翌高少年助长怎么样?在武汉地铁看到它们的广告,能帮助孩子长高吗... 如果你想让孩子长得更高,你会选择中医还是西医? sce方x等于什么 在“研究匀变速直线运动”的实验中,打点计时器使用的交流电源的频率为50... (1)打点计时器是一种交流电源的计时仪器,根据打点计时器打出的纸带... 孩子积食是什么原因?有什么帮助调节的办法?