微信小程序源码分析:不用 webview 如何实现流畅体验

2024-07-17
来源:网络整理

文章来源:中文网

微信小程序正式上线已经几周了,相信大家对它的开发模式已经很熟悉了。但是你或许还会有一些疑惑,如何用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自学中心每天分享一篇文章,希望对大家有所帮助

分享