文章来源:中文网
微信小程序正式上线已经几周了,相信大家对它的开发模式已经很熟悉了。但是你或许还会有一些疑惑,如何用web语言开发出如此流畅、近乎原生的应用?也许你会猜这只是h5而已,如果你觉得它很强大,那它的确很强大。但是我们在开发历程中,从来没有用过它,为什么呢?浏览器是如何将开发时用到的view标签解析成页面的呢?带着诸多疑惑,我们来分析一下微信小程序源码吧!
开发平台
这个IDE是如何保证我们小程序的开发和预览的呢?我们简单分析一下两点。
1. 文件目录
打开微信网页开发者工具目录,输入.nw。嗯?有点熟悉,里面有三个文件:app、.json。显然,我们开发构建阶段用到的资源都来自于此,于是试着找了一下这个模块,结果一无所获……
进入app目录,可以看到html、dist、html四个文件夹,开发用的IDE就是通过这几个文件实现的,你可以用浏览器打开其中一个html文件看一下。
这不就是从桌面打开看到的效果吗(提供了从网页到桌面应用的转换)。然后在.html中找到我们主脚本文件../dist/app.js。整个IDE从编辑、开发、预览、发布等操作都在app.js及其引用的脚本中。
2.逻辑关系
接下来我们来分析一下dist里都有些什么,别怕,只有几十行源码。
但是每行都是压缩的...好吧,让我们解压它。在中安装一个插件,在要格式化的代码上按Ctrl + Alt + F,然后将我们的文件分成逻辑部分。
显然,微信小程序 IDE 本身就是使用组件构建的,基于 Flux 架构,那么我们编写的小程序如何运行呢?首先从 ./app/dist///.js 开始,找到按钮(编译按钮上方)。
每次点击此按钮,IDE 都会重新显示当前应用程序。所以这是关键点。
页面构建
1. 构建过程
触发之后会调用.//.js中的方法,正式开始构建过程。
// .js
:(升){
(j),j = (()=> {
e.(this..); // e 是 .js 输出对象 let m = 'edit' === this..show ? `` : ``;
我(我,这个……)
},200)
在.js中可以清晰的看到flux架构部分,它会被传递进去,发生状态的改变,最后被重新渲染到应用程序中。
10
11
12
十三
14
15
16
17
18
19
20
// .: (b) { a.({
:'',
:b
})
},
添加:(b,c){a.({
:'',
:b,
: C
})
},
:(b) { 一个.({

:''
})
},
:(b) { 一个.({
:'',
:b
})
每一个.js都会通过.js映射到.js中,应用程序的add方法也是在中实现的。
10
11
12
十三
14
15
16
添加:(F,G){
F.hash = a(F.), F.es6 = !0, F. = !0, F. = !0, F. = { 时间:Date.now(),
显示: !1,
:!1
},F. = {
:!1
},F. = {
:!1
}, w.(F), c(F, G), b(), (`.js 添加 ${JSON.(F)}`), this.emit('', w)
},
:() {
这.发出('')
},
:(F) {
这.发出('',F)
},
如果你对Flux还不是很清楚,可以用这张图来做简单的说明。nw采用了官方的Flux架构,另外比较有的、mobx都是很好的状态管理架构。
2. 三端操作
当没有安装/ios sdk的时候,我们的应用还是可以在IDE中显示的。此时.wxml、.wxss、.js通过云端转换成NW可以解析的HTML、CSS、JS。当然在/ios微信客户端上还是可以访问的,也就是Once, Run。所以微信小程序和阿里Weex本质上是类似的,只不过微信小程序的API是基于微信的。
以IOS为例
微信小程序和传统的小程序不一样,后者提供了方法让js在当前电脑上执行,本质还是一个web应用;前者通过定义方法映射到模块的调用,回调也比较多,但其实还是一个应用程序。
改变
这些目标可能已经出现在你所在公司或者实习的前端组里了,给公司客户端人员带来了很大的危机感,确实前端能做的事情越来越多了(依赖强大的开源社区)。
在适当的应用场景下,比如使用频率一般、流量不大的产品,去中心化确实是个不错的选择,因为对于业务复杂度高、产品更新迭代频繁的公司来说,去中心化可以大大提高开发效率。一个前端工程师就可以完成曾经需要一个前端+一个客户端+一个IOS客户端的工作,同时避免多次发布的痛点。所以未来几年去中心化会是前端的必修方向。
那么它带来了什么好处,与网页应用、应用程序、应用相比,它有哪些优势呢?
降低开发成本
Once Run,只要懂Web技术,也能开发应用。这大大降低了前端开发者进入原生开发领域的门槛。
更接近原生的用户体验
它解决了传统由于调用原生模块而不是直接执行js脚本而造成的性能瓶颈。
解决频繁发布的问题
对于敏捷开发团队来说,为了快速上线产品,一个版本的迭代周期可能只有几天,那么发布新版本就成了新的问题。有时候新版本开发出来了,但是上一个版本还没有。对于用微信小程序/weex/开发的应用来说,只需要加载这个文件就可以随时更新,应用可以避免重复发布。
PHP自学中心每天分享一篇文章,希望对大家有所帮助