微信小程序是微信平台提供的一种开放技术,微信小程序为企业用户服务,用于建立一种移动端的“轻应用”,这种应用是不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用。用户也不用关心是否安装了太多应用的而造成手机空间不足问题。微信小程序的推出后,与订阅号、服务号、企业号并列成为微信的企业应用体系。微信小程序运行在微信平台之上,微信平台对不同的手机平台已经做了兼容。使用微信小程序开发的应用,不需要兼容多个平台,开发完成后可以直接运行于多个平台,降低了应用的开发门槛。
针对传统H5应用的不足,微信小程序对用户交互性能做了众多的优化,使微信小程序的应用在部分用户体验上接近了App的水准。
微信小程序没有采用网页编程中的HTML5+CSS3+JavaScript组合,微信小程序使用腾讯全新定义的技术规范和架构。不过微信小程序的开发与网页编程以及微信公众号编程非常类似,对于前端开发者而言,从网页开发迁移到微信小程序的开发成本并不高。微信小程序吸收了主流前端开发中数据、样式、控制逻辑分离的理念,将每个页面分为四个文件:WXML文件、WXSS文件、JSON文件、JS文件。其中JS文件采用标准的JavaScript语法规范,用于逻辑操作。JSON文件基于JSON语法规范,用于页面文件的配置。WXML文件基于XML语法规范,用于页面视觉组件的描述。而WXSS继承了标准的CSS语法,用于WXML组件样式的定义。
网页开发中渲染线程和脚本线程是互斥的,而在微信小程序中二者是分开的,分别运行在不同的线程中。微信小程序的渲染层和逻辑层分别由两个线程管理:渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端做中转,逻辑层发送网络请求也经由Native转发。网页开发者可以使用浏览器DOM API来操作DOM对象。小程序的逻辑层和渲染层是分开的,逻辑层运行在JSCore中,并没有一个完整浏览器对象,因而缺少相关的DOM API和BOM API。这一区别导致了前端的一些库,例如jQuery、Zepto等在小程序中是无法运行的。同时JSCore的环境同 NodeJS环境也是不尽相同,所以一些NPM的包在小程序中也是无法运行的。
小程序每次冷启动时,都会检查是否有需要更新版本,如果发现有新版本,将会下载新版本的代码包到本地。因此小程序的页面加载是基于本地的,不需要通过频繁的发送网络请求来获取页面文件,所有的页面跳转也都不需要通过与服务端进行交互。这将使小程序的执行效率大大提高,比使用H5的Web应用模式有更好的用户体验,操作流畅度与反应速度也会更好。这也意味着在没有网络连接的环境下也可以使用微信小程序。结合本地存储,小程序可以满足暂时断网或网络情况较差的场景需求,这是微信服务号和H5都无法实现的。