HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

  • 2017-10-15
  • 本文字数:2216 字

    阅读完需:约 7 分钟

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:116978
用户头像

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

关注

评论

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

Django 介绍与安装

海拥(haiyong.site)

django 6月月更

InfoQ 极客传媒 15 周年庆征文|Webpack 性能优化措施汇总

No Silver Bullet

性能优化 前端 webpack 6月月更 InfoQ极客传媒15周年庆

浅谈居家办公后的感想| 社区征文

雪雷

居家办公 初夏征文

【sql语句基础】——删(delete) /改(update)

写代码两年半

数据库 sql :MySQL 数据库 6月月更

Es6新特性——箭头函数

大熊G

JavaScript 前端 6月月更

利用 VSCode 的代码模板提高 MobX 的编码效率

岛上码农

flutter ios 前端 安卓开发 6月月更

Vue-6-计算属性

Python研究所

6月月更

你还不懂线程池的设计及原理吗?掰开揉碎了教你设计线程池

C++后台开发

线程 线程池 后端开发 Linux服务器开发 C++后台开发

485天,远程办公的 21 条心得分享|社区征文

悟空聊架构

远程办公 悟空聊架构 热门活动 初夏征文 社区征文

开源项目那么多,这次带你了解个版本的区别,明白alpha版、beta版、rc版是什么意思

迷彩

开源 记录 6月月更

远程办公经验 | 社区征文

弑着去忘记う

初夏征文

safePoint讲解及其安插思路分析

北洋

6月月更

数据结构进阶(一)稀疏矩阵

No Silver Bullet

稀疏矩阵 6月月更

tornado环境搭建及基本框架搭建——熟悉的hello world

孤寒者

Python tornado 6月月更 hello world

Fabric.js 动态设置字号大小 🎄

德育处主任

canvas 前端可视化 FabricJS Fabric.js 6月月更

测试基础之:黑盒测试

甜甜的白桃

测试用例 黑盒测试 6月月更

【LeetCode】 极大极小游戏Java题解

Albert

LeetCode 6月月更

浅析分布式系统之体系结构-事务与隔离级别(多对象、多操作)下篇

snlfsnef

有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?

汪子熙

云原生 SAP abap Netweaver 6月月更

InfoQ 极客传媒 15 周年庆征文|Dubbo入门实战:Spring + Zookeeper + Dubbo

No Silver Bullet

zookeeper 架构 dubbo 6月月更 InfoQ极客传媒15周年庆

这篇SpringCloud GateWay 详解,你用的到

牧小农

SpringCloud Gateway

InfoQ 极客传媒 15 周年庆征文|容器运行时技术深度剖析

liuzhen007

容器 运维 热门活动 InfoQ极客传媒15周年庆

spring的BeanFactory和ApplicationContext

程序员欣宸

Java spring 6月月更

Linux开发_ Linux命令复习与文件目录复习

DS小龙哥

6月月更

详解Java中的值传递

工程师日月

6月月更

远程办公经验分享 | 社区征文

Geek_ac6fb9

初夏征文

C#入门系列(十一) -- 多维数组

陈言必行

C# 6月月更

SDN系统方法 | 5. 交换机操作系统

俞凡

架构 网络 sdn SDN系统方法

网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)

赖猫

音视频 流媒体

【高并发】关于线程池,蚂蚁金服面试官问了我这些内容!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

王跃:关于微信小程序的技术,也许你想错了_移动_徐川_InfoQ精选文章