吹了这么久的小程序终于出来了。微信内置程序要想获得原生APP流畅程度,我想有最需要解决的两个问题:一是页面间的切换,因为html每次更换页面都需要重新加载。第二是页面的生命周期,如果小程序的生命周期不能做到原生APP的程度,将极大限制功能的实现。
小程序有以下几个特点:
框架
小程序的框架由两部分构成,视图层和逻辑层,和传统的MVC略有不同,应该叫做VA框架:
视图层(View)和逻辑层(App Service)
视图层主要由WXML 和WXSS组成,逻辑层是基于JS,中间提供了数据传输和事件系统
数据绑定
数据绑定类似于thinkphp这样的MVC框架,更加简单,框架 可以让数据与视图保持同步非常简单。当做数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新。
逻辑层使用的是js,以往js承担的是事件处理,但在这里,js承担起了逻辑和数据和页面管理这些以往后端的职责。
页面管理(切换)
框架管理了整个小程序的页面路由,可以做到页面间的无缝切换,并给以页面完整的生命周期。开发者需要的只是将页面的数据,方法,生命周期函数注册进框架 中,其他的一切复杂的操作都交由 框架 处理。
目录结构
类似于传统结构,
框架程序包含一个描述整体程序的 app 和多个描述各自页面的page。
一个框架程序主体部分由三个文件组成,必须放在项目的根目录,如下:
一个框架页面由四个文件组成,分别是:
注意:为了方便开发者减少配置项,我们规定描述页面的这四个文件必须具有相同的路径与文件名。
生命周期
程序的生命周期主要取决于数据,也就是逻辑层。小程序中,用到的所有逻辑层代码会汇集成一份js代码,在小程序启动时运行,在小程序销毁时关闭。
在按了Home键时,小程序像原生APP一样进入后台模式,而不会销毁。再次打开微信时会回到前台。
逻辑层JS的改进
- 增加 App 和 Page 方法,进行程序和页面的注册。
- 提供丰富的 API,如扫一扫,支付等微信特有能力。
- 每个页面有独立的作用域,并提供模块化能力。
- 由于框架并非运行在浏览器中,所以 JavaScript 在 web 中一些能力都无法使用,如 document,window 等。
- 开发者写的所有代码最终将会打包成一份 JavaScript,并在小程序启动的时候运行,直到小程序销毁。类似 ServiceWorker,所以逻辑层也称之为 App Service。
API
接口列表:https://mp.weixin.qq.com/debug/wxadoc/dev/api/?t=1474644083871
大概有网络 文件 媒体 设备 位置的微信能获取的原生安卓所有权限,除了隐私权限。
组件
组件列表:https://mp.weixin.qq.com/debug/wxadoc/dev/component/?t=1474644086575
就是前端的一些控件,和html有很大区别,主要是一些移动窗口使用的控件。
特点是操作反馈:获得了系统级的操作反馈。
小程序的强大功能(特点):
- 框架分为视图层和逻辑层。
- 逻辑层基于js实现,js不但处理事件,而且管理数据和页面。
- 页面间可以无缝切换(无需加载),并且有完整的生命周期,开发者只需要专注于逻辑和数据。
- 整个程序的生命周期从启动到关闭,js和页面不会销毁,Home键时会进入后台模式。
- API接近于原生APP
- 页面组件适用于手机窗口,获得系统级的操作反馈。