写点什么

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

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

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

关注

评论

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

为什么修改hosts不立即生效?--浏览器DNS缓存机制分析

陈磊@Criss

架构师训练营 - 第十周作业

坂田吴奇隆

鲲鹏一粤,智算万里

脑极体

如何隐藏你的数据库密码

Rayjun

安全 服务器

Git设置分支保护实现CodeReview卡点

陈磊@Criss

MySQL 架构与历史

多选参数

MySQL 数据库 MySQL优化

用故事去理解「文件 I/O」

小林coding

操作系统 异步 文件系统 同步 非阻塞网络I/O

想要成功,你需要的是目标与动机,目标是你的助攻,动机是你的爱人。

叶小鍵

成功学 心理学 海蒂·格兰特·霍尔沃森

MySQL-技术专题-共享锁与排他锁

码界西柚

Golang+Flutter实现聊天APP

Alber

IM Go 语言

MySQL-技术专题-InnoDB存储引擎

码界西柚

架构师训练营 - 第 7 周命题作业

红了哟

源码分析 | Mybatis接口没有实现类为什么可以执行增删改查

小傅哥

Java 源码分析 小傅哥 mybatis

并不想吹牛皮,但!为了把Github博客粉丝转移到公众号,我干了!

小傅哥

Java 小傅哥 博客 微信公众号

记一次腾讯云(西安)后台开发面试经历

z小赵

面试 分布式 高并发

知道时间轮算法吗?在Netty和Kafka中如何应用的?为什么不用Timer、延时线程池?

yes

kafka Netty Timer ScheduledThreadPool 时间轮

Flexible Box Layout 原理剖析

coolion

CSS 大前端

Dubbo2.7试用

心平气和

dubbo 灰度 hessian

数据治理第一步,摆脱“手工作坊”

KAMI

大数据 数据治理 数据开发 数据平台

国内与国外区块链关键技术现状及差异

CECBC

区块链 应用技术

LeetCode题解:88. 合并两个有序数组,双指针遍历+从前往后,JavaScript,详细注释

Lee Chen

大前端 LeetCode

契约测试:解决微服务测试的问题

陈磊@Criss

Python中的单下划线和双下划线使用场景

wangkx

Python Python基础知识 Python基础

手把手教你从零开始使用python编写大型冒险类游戏01之游戏介绍

Geek_8dbdc1

Github被攻击。我的GitPage博客也挂了,紧急修复之路,也教会你搭建 Jekyll 博客!

小傅哥

Java GitHub 小傅哥 博客

【DevOps】我们忽视了Daily Build(每日构建)吗?

Man

DevOps jenkins 每日构建

Git命令可视化展示,代码管理再也不愁了,建议收藏!

诸葛小猿

git git merge git rebase git fetch git reset

区块链一新基建 新动能 新发展大会将在南昌举办

CECBC

新基建 区块链技术

抽象类、接口、Trait

书旅

接口 面向对象 抽象 对象 Trait

一文了解对称加密与非对称加密

我是程序员小贱

安全

Go: Goroutine, 系统线程和CPU管理

陈思敏捷

mpg Go 语言

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