写点什么

王跃:关于微信小程序的技术,也许你想错了

2017 年 10 月 15 日

2017 年 1 月 9 日,微信小程序正式发布。在近一年里,小程序一直在坚定的向前走。它的理念和模式受到广泛认可,也被其他人所模仿。

在微信小程序尚在内测之时,外界对它所采用的技术就有很多猜测,正式发布的小程序解答了人们的一些疑惑,但有些问题官方并未正式对外公开说过。InfoQ 对微信小程序相关项目负责人王跃进行了采访,了解了一些开发者关心的问题。

受访嘉宾介绍

王跃(微信号:springwang),微信小程序相关项目负责人,拥有 10+ 年前端开发经验,曾就职于搜狐和新浪,2013 年加入腾讯,负责互娱游戏营销系统,道聚城等多个项目前端架构和开发。对小程序底层架构原理有深入的研究和理解,并且有腾讯多款小程序开发实战经验。

InfoQ:王老师好,您在负责小程序前端之前,做过哪些事情?

王跃:在微信小程序项目之前,我负责过腾讯互娱游戏高级营销系统的前端架构和开发,它承载腾讯几百款游戏业务的日常营销活动,另外还有腾讯道聚城前端架构和开发,覆盖像王者荣耀,LOL,CF 游戏道具的交易,在腾讯之前我还负责过搜狐白社会 SNS 的前端核心框架和模块开发,新浪微博的前端开发工作。

InfoQ:当时小程序还没发布时,坊间传说小程序使用了类似 RN 的技术,发布后人们发现它还是运行在 WebView 里的,不知道实际情况如何?

王跃:从技术实现的层面来说,不管是小程序,还是 RN,或者 Weex,都有共同点,比如 JS 和 Native 的通讯机制,比如 JS 直接调用原生组件的渲染,如在 iOS 平台,小程序和 RN 都采用 JavaScriptCore 来执行 JS。但是小程序和 RN 设计初衷和应对的场景不一样,我们知道小程序的场景主要是在当前实际物理场景用户可以即扫即用,用完即走,整个交互都是非常轻量级的,不涉及特别复杂的交互逻辑,所以在设计上考虑尽量简单,首先是系统底层框架简单,其次开发者开发简单,再次用户使用简单,所以小程序大部分的 UI 组件还是 H5 的渲染方式,而不是像 RN 设计成 Native 的 UI 组件。

当然小程序本身为了解决部分组件性能的问题也采用了 Native 的方式,所以方案上的选项主要是基于实际场景考虑,不是纯技术上的考量。

另外准确的说小程序不仅仅运行在 Webview 里,需要区分不同的部分,这个在我的分享里会有详细的解释。

InfoQ:在 Android 上小程序是运行在 X5 引擎上的,X5 团队有为小程序做一些特别的优化,或者添加特性吗?

王跃:微信 Android 版的浏览服务用的确实是我们腾讯浏览器团队提供的 X5 引擎,在性能方面小程序和 X5 团队之间一直有保持沟通和协调,双方都尽可能设法优化并持续提升用户体验。

InfoQ:刚发布时有人发现小程序的一些代码和 Vue 的有点像,而单向数据流又让人联想到 React,在当初开发小程序核心框架的时候有哪些思考?

王跃:这个跟问题 2 类似,首先小程序和 Vue,React 本质上还是不一样的,小程序是需要特定的 Native 层支持,同时底层功能也更强大,而 Vue 和 React 运行在通用的 WebView 之上,不需要特定 Native 支持,但大家为什么觉得会有些类似呢,主要是指在数据绑定,事件绑定等部分的实现上会有一些类似,当然这几种技术没有好坏,主要还是看我们是解决什么场景下的什么问题。

InfoQ:iOS 和 Android 平台的小程序有一些区别,比如 Android 上可以把小程序图标放到主屏,还有人发现微信小程序在 Android 下有单独的进程,小程序是不是对 Android 进行过更多 Native 化的探索?

王跃:Android 可以放到主屏幕而 iOS 不行这个主要是 OS 层面的限制,至于 Android 下的运行方式,主要是通过单独的 Activity 来承载视图,设置为单独的进程主要是为了保证小程序的运行内存,跟 Native 化没有直接的联系。

前面问题也提到了,小程序本身已经有好几个组件是使用 Native 方式实现的,主要目的还是为了保证小程序的执行效率,达到更好的用户体验,Native 的组件也不是针对 Android 一个平台,Android 和 iOS 都有做,后续是否会有更多的 Native 化的实现,还是看实际组件在采用 Web 实现时是否符合我们对用户体验的标准。

InfoQ:前段时间有人发现小程序出了自己的脚本格式 WXS,它是小程序新的 DSL 吗?

王跃:目前,WXS 对于小程序开发不是必须的,它的主要目的是为了增强 WXML 的数据处理能力而新引入一种技术实现,其实际解析的语言规范还是 JS,并没有引入新的语法,仅仅对 JS 做了上层的封装和限制,所以学习上基本没什么成本,大致了解下开发文档马上就能上手,这里 WXS 跟 DSL 也没太大关系,没有可对比性。

InfoQ:小程序和 PWA 可以说代表着移动 Web 的两条不同的发展路线,从旁人的眼光来看,小程序更加务实,但人们也期待小程序更加开放一些。在这方面您是怎么看的?

王跃:这里我说下个人的想法,不代表官方意见,任何一种模式都是为了在特定环境下解决特定问题而设计的,所以 PWA 有它的应用场景,而小程序有小程序的应用场景,两种模式都有其优势和限制,这两种模式的差异其实跟我们现在的 Web 和 Native 很像,Web 提供相对常用和通用的功能(大部分功能和基本使用体验),而个性定制(更流程复杂的功能和交互体验)可以充分发挥当前平台的能力,我个人觉得这两种模式都会一直存在,关键是看能否为用户提供价值,不过,未来这两种模式一定会有越来越多的融合,就像 web 和 Native 的融合产生了 Hybird 模式一样,想象一下,未来一定会有一种新的模式,可以像 PWA 一样具有更通用的运行场景(提供核心功能),同时又可以根据当前的运行环境接入定制化的高级能力,实现 Write Once,Run Anywhere 的美好愿景。

2017 年 10 月 15 日 22:116270
用户头像

发布了 164 篇内容, 共 90.9 次阅读, 收获喜欢 380 次。

关注

评论

发布
暂无评论
发现更多内容

低代码开发平台解决方案之“金融服务行业”篇

优秀

低代码

中国人工智能,赏花更要寻根

脑极体

【LeetCode】删除字符串中的所有相邻重复项Java题解

HQ数字卡

算法 LeetCode 28天写作 3月日更

网络知识一箩筐:IP地址划分的那些知识点

华为云开发者社区

网络 虚拟私有云 子网 IP地址

深度分析前端构建工具:Vite2 v.s Snowpack3 v.s. Webpack5

智联大前端

vite webpack 构建工具

重点人员管控系统开发搭建,智慧警务建设

13530558032

为什么我们开发 San 项目时要用 CLI?

百度开发者中心

Java面试热门技术框架:Spring Security Oauth2.0认证授权

Java架构追梦

Java spring 面试 金三银四跳槽

如何通过 Serverless 提高 Java 微服务治理效率?

阿里巴巴云原生

Java Serverless 容器 微服务 云原生

AI不仅可以把李焕英带回2021,还能告诉你贾玲更像爸爸还是妈妈

京东科技开发者

人工智能 语音识别 语音合成

AI辅助宫颈癌筛查技术全球居首,守护者的力量来源是?

华为云开发者社区

华为云 目标检测 AI技术 宫颈癌

区块链+版权-助力电子微版权保护

13530558032

如果延迟退休势在必行,区块链如何助力“养老助老”?

旺链科技

产业区块链

USB2.0 扩展器(一拖四)原理图、PCB,可打样使用

不脱发的程序猿

电路设计 USB电路 USB转TTL 28天挑战 3月日更

区块链助力家政

茜茜公主

3月日更

Apache Sqoop中最重要的核心概念-导入导出

大数据技术指南

大数据 sqoop 28天写作 3月日更

《谷歌是如何运营的》-读书笔记

曦语

读书笔记

BFAI量化交易系统开发|BFAI炒币机器人APP软件开发

开發I852946OIIO

系统开发

JVM笔记 -- JVM的生命周期介绍

秦怀杂货店

JVM 生命周期

京东云新一代自研云服务器 4 月上线;COLING 2020丨面向机器阅读理解的双向认知思维网络

京东科技开发者

人工智能 开发者 云服务器

盘点 HashMap 的实现原理及面试题

老王说编程

Java hashmap HashMap底层原理

PT100热电阻温度阻值对应表

不脱发的程序猿

数据分析 PT100 28天挑战 3月日更 温度传感器

智慧平安社区app开发,湖北省老旧小区改造解决方案

WX13823153201

智慧平安社区app开发

干货分享丨从MPG 线程模型,探讨Go语言的并发程序

华为云开发者社区

go 并发 channel goroutines MPG 线程

区块链电子合同签署平台,区块链电子存证

13530558032

能源管理可视化破冰而出,数字孪生打破传统运维僵局

一只数据鲸鱼

物联网 数据可视化 3D可视化 能源管理 智慧电厂

LinqToExcel.Extend 源码分析 第二波

happlyfox

28天写作 3月日更

从产品经理到产品架构师

博文视点Broadview

币宽量化交易软件开发|币宽炒币机器人系统APP开发

开發I852946OIIO

系统开发

寻找被遗忘的勇气(九)

Changing Lin

3月日更

小鼎量化交易系统开发|小鼎炒币机器人软件APP开发

开發I852946OIIO

系统开发

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

王跃:关于微信小程序的技术,也许你想错了-InfoQ