详解 微信小程序开发框架(MINA)


Posted in Javascript onMay 17, 2019

小程序MINA框架,及优点

MINA框架:

小程序使用的是MINA框架,目的是通过简单、高效的方式让开发者可以在微信中开发具有原生App体验的服务。   

MINA的核心是一个响应的数据绑定系统。

 整个系统分为两块:视图层(view,描述语言wxml和wxss)和逻辑层(App Serice,基于 JavaScript)。这可以让数据与视图非常简单的保持同步。当做数据修改时,只需要在逻辑层改数据,视图层就会做响应的更新。开发者只需要将页面路由、方法、生命周期函数注册进框架,其他的一切复杂的操作都将由框架处理。

小程序优点:

• 方便使用:无需下载,打开即用,用完即走。不占用手机内存,省流量,省安装时间
• 开发简单:开发的本质是MVVM风格的Javascript框架上开发的,有前端经验的程序员可以无缝衔接,无经验的“小白”也可以快速入门。
• 跨平台运行:不用再分别开发IOS和Andriod版本,只需要发布微信小程序平台,所有平台都可以使用。开发成本低
• 快速分发与迭代:无需关心各种发布渠道,也无须担心旧版本升级的兼容问题。 

 打开速度比H5快,体验接近原生APP

小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务。

微信团队为小程序提供的框架命名为MINA。MINA框架通过封装微信客户端提供的文件系统、网络通信、任务管理、数据安全等基础功能,对上层提供一整套JavaScript API,让开发者方便的使用微信客户端提供的各种基础功能与能力,快速构建应用。

MINA框架

微信小程序的框架示意图如下所示:

详解 微信小程序开发框架(MINA)

MINA框架主要分为两大部分:

第一部分页面视图层,开发者使用WXML文件来搭建页面的基本视图结构(WXML是类似于HTML标签的语言和一系列基础组件),使用WXSS文件来控制页面的表现样式。

第二部分AppService应用逻辑层,是MINA框架的服务中心,通过微信客户端启动异步线程单独加载运行,页面渲染所需的数据、页面交互处理逻辑都在其中实现。MINA框架中的AppService使用JavaScript来编写交互逻辑、网络请求、数据处理,但不能使用JavaScript中的DOM操作。小程序中的各个页面可以通过AppService实现数据管理、网络通信、生命周期管理和页面路由。

MINA框架为页面组件提供了一系列事件监听相关的属性(比如bindtap、bindtouchstart等),来与AppService中的事件处理函数绑定在一起,来实现页面向AppService层同步用户交互数据。MINA框架同时提供了很多方法将AppService中的数据与页面进行单向绑定(注意数据的绑定方向是单向的),当AppService中的数据变更时,会主动触发对应页面组件的重新渲染。

框架的核心是一个响应式的数据绑定系统,它能让数据与视图很简单的保持同步。只需要在逻辑层修改数据,视图层就会做相应的更新。示例如下:

<!--页面视图层代码--> 
<view class="apptitle">
 <text class="app-avatar">欢迎使用{{appname}}</text>
 <button bindtap="changeAppname">更换名称 </button>
</view>
//AppService应用逻辑层代码
//初始数据
page({
 data:{
  appname:'易投票'
 },
 changeAppname:function(e){
  this.setData({
  appname:'我的小程序'
 })
 }
})

详解 微信小程序开发框架(MINA)详解 微信小程序开发框架(MINA)

图1:初始名称

图2:点击按钮“更换名称”以后

示例中数据是如何更新的呢?首先,开发者通过框架将AppService应用逻辑层数据中的appname与页面视图层名为appname的变更进行了绑定,页面在刚打开的时候会显示“欢迎使用 易投票。然后,当点击按钮“更换名称”之后,视图层会发送changeAppname的tap事件给逻辑层,逻辑层找到事件函数changeAppname。最后,逻辑层changeAppname函数执行了setData操作,将对象appname的值改变为“我的小程序”,因为该对象已经在视图层绑定,所以视图层会显示为图2的名称了。

小程序的MINA框架有着接近原生App的运行速度,在框架层面做了大量的优化,在重功能上(page或tab切换、多媒体、网络连接等)上使用接近于native的组件继承,对安卓和ios端做出了高度一致的呈现,还有近乎完备的开发、调试工具。

目录结构

典型的小程序目录结构非常简洁,一般一个项目包含两个目录(pages和utils)三个文件(app.js、app.json、app.wxss)。pages目录下包括程序所需的各个页面,一个页面对应一个目录,包含2至4个文件(.js、.wxml、.json及.wxss)。utils目录则包含一些公共的js代码文件。当然,我们还可以添加其他的公共目录,如用来存放本地图片资源的images目录。

详解 微信小程序开发框架(MINA)

逻辑层

小程序的逻辑层就是所有.js脚本文件的集合。小程序在逻辑层处理数据并发送至视图层,同时接受视图层发回的事件请求。

MINA框架的逻辑层是由JavaScript编写,在此基础上,微信团队做出了一些优化,以便更高效的开发小程序,这些优化包括:

1、增加app方法用来注册程序,增加page方法用来注册页面;

2、提供丰富的API接口;

3、页面的作用域相对独立,并拥有了模块化的能力;

简单概括,逻辑层就是各个页面的.js脚本文件。

需要注意的是,小程序的逻辑层由js编写,但并不是在浏览器中运行的,所以JavaScript在Web中的一些能力都不能使用,比如 dom、window等,这也是我们开发过程中要克服的阻碍。

视图层

对于微信小程序而言,视图层就是所有的.wxml(WeiXin Markup language)文件与.wxss(WeiXin Style Sheet)文件的集合:.wxml用于描述页面结构而.wxss用于描述页面样式。

视图层以给定的样式来展现数据并反馈事件给逻辑层,而数据展现是以组件来进行的。组件(Component)是视图的基本组成单元。

数据层

数据层包括临时数据或缓存、文件存储、网络存储与调用。

1、页面临时数据或缓存

在页面page()中,我们要使用setData函数来将数据从逻辑层发送到视图层,同时改变对应的this.data的值。this在小程序中一般指调用页面,广泛情况下指的是包含它的函数作为方法被调用时所属的对象。直接修改this.data是无效的,无法改变页面的状态,还会造成数据的不一致。单次设置的数据有一个大小限制,不能超过1024KB,避免一次性设置过多的数据。

setData()函数的参数接受一个对象。以key,value的形式表示,将this.data中的key对应的值改变为value。key可以非常灵活,包括以数据路径的形式表示,如array[0].title,并且无需在this.data中预定义。

2、文件存储(本地存储)

使用微信提供的现成数据API接口,如:

wx.getStorage:获取本地数据缓存

wx.setStorage:设置本地数据缓存

wx.clearStorage:清理本地数据缓存

3、网络存储与调用

上传或下载文件的API接口,如:

wx.request:发起网络请求

wx.uploadFile:上传文件

wx.downloadFile:下载文件

调用URL的API接口如下:

wx.navigateTo:保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。可返回原页面。

wx.redirectTo:关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。不可返回原页面。

以上就是微信小程序框架的相关描述,微信团队一直在不断的优化框架能力,及时的关注官方提供的小程序开发者文档,了解小程序的最新能力及优化点。

总结

以上所述是小编给大家介绍的微信小程序开发框架(MINA),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery写的日历(包括日历的样式及功能)
Apr 23 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
jquery validate在ie8下的bug解决方法
Nov 13 Javascript
微信小程序 增、删、改、查操作实例详解
Jan 13 Javascript
vue时间格式化实例代码
Jun 13 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
JS实现移动端判断上拉和下滑功能
Aug 07 Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 Javascript
gulp构建小程序的方法步骤
May 31 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
Sep 09 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 Javascript
Vue模板语法中数据绑定的实例代码
May 17 #Javascript
jQuery控制input只能输入数字和两位小数的方法
May 16 #jQuery
微信小程序云开发详细教程
May 16 #Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
May 16 #Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 #Javascript
微信小程序云开发之云函数详解
May 16 #Javascript
微信小程序云开发之模拟后台增删改查
May 16 #Javascript
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
详解:――如何将图片储存在数据库里
2006/12/05 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
js获取图片大小的函数代码
2011/09/20 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
JavaScript window.location对象
2014/11/14 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
详解python中index()、find()方法
2019/08/29 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
几个Linux面试题笔试题
2016/08/01 面试题
学生个人自我鉴定范文
2014/03/28 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
2014年协会工作总结
2014/11/22 职场文书
五好家庭申报材料
2014/12/20 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers