共计 1796 个字符,预计需要花费 5 分钟才能阅读完成。
微信小程序
小程序前端 Hybrid 解决方案, 渲染线程与脚本线程 (逻辑层) 是分开, 环境包括 IOS 和 Android 的微信客户端, 以及开发者工具. 缺点: 不能订阅, 不能转发朋友圈, 不能主动推送消息. 检索具有局限性, 不能模糊搜索. 小程序的代码组成:index.wxml 和 index.wxss 和 index.wxs 和 index.json 和 index.jsWXML: 一种标签语言, 结合组件, 事件, 构建出页面结构. 所有的 wxml 标签都支持的属性有 id,class,style,hidden,data,bind/catchWXSS:rpx 作为尺寸单位,@import url(‘.//.a.wxss’)实现样式引用。支持.class #id element:after:beforeJSON: 一种数据格式, 静态配置. 语法: {“pages”: [], “window”: {}}, 注意在 JSON 中无法使用注释 JavaScript:ECMAScriptScript(语法 + 类型 + 语句 + 关键字 + 操作符 + 对象)+ 小程序框架 + 小程序 API</p> 小程序的宿主环境:分为逻辑层(JS)与渲染层(WXML+WXSS),页面由组件,API,事件,兼容性构成。</p> 小程序的 API:宿主环境提供丰富的 API,所有的 API 都挂在 wx 对象下(除了 Page/APP 等特殊的处理器)。
wx.set* 开头的 API 是写入数据到宿主环境的接口。
wx.get* 开头的 API 是获取数据到宿主环境的接口。
小程序要求开发者服务器提供 HTTPS 服务的接口
接口回调说明:success 成功 fail 失败 complete 接口调用结束的回调函数
小程序的场景应用:Flex 布局 界面的交互反馈 微信登录 本地数据缓存 设备能力
微信登录: wx.login 生成一个带有时效性的凭证, 发送 code 到服务器, 到微信服务器获取微信用户身份 id, 绑定微信用户身份和业务用户身份, 业务登录凭证返回 SessionId
小程序目录:
app.json(小程序公共配置)当前小程序的全局配置, 包括小程序所有页面路径, 界面表现, 网络超时时间, 底部 tab 等.
app 字段 – 用于描述当前小程序所有页面路径.
window 字段 – 定义小程序所有页面的顶部颜色, 文字颜色等.
project.config.json(工具配置): 配置开发者工具.
page.json(页面配置): 用来表示 pages/logs 目录下的 logs.json 这类和小程序页面相关的配置.
app.js(必需), 小程序逻辑
app.wxss(非必需): 小程序公共样式表
page 页面:
.json 后缀的 JSON 配置文件 , 提供页面配置. 非必须.
.wxml 必需文件, 采用 MVVM 的开发模式,JS 管理状态, 通过一种模板语法来描述状态和界面结果的关系.
.wxss 后缀的 Wxss 样式文件 , 采用大部分 CSS 特性, 仅支持部分 css 选择器, 在底层支持尺寸单位 rpx, 提供全局样式 (app.wxss) 和局部样式(page.wxss), 非必须.
.js 后缀的 JS 脚本逻辑文件, 必需文件.
可上传的的文件白名单:wxss png jpg jpeg gif svg json cer mp3 aac m4a mp4 wav ogg slik
逻辑层(App Service)
– 小程序框架的逻辑层, 采用 JavaScript 引擎为开发者提供 JavaScriptd 代码的运行环境以及微信小程序的特有功能(如: 增加 APPh 和 Page 方法), 逻辑层将数据处理后发送给视图层且接受视图层的反馈.
–API
– 模块化
– 路由
– 注册页面
– 场景值 注册程序
视图层: 由于 WXML 和 WXSS 和 WXS 和组件展示, 由组件来进行展示, 主要作用是将逻辑层的数据反应成视图, 同时将视图层的事件发送给逻辑层. 事件:touchstart touchmove touchcancel touchend tap longpress longtap 宿主环境: 小程序的运行环境分成渲染层 (WXML 和 WXSS) 和逻辑层 (JavaScript) 分别由两个线程管理, 渲染层的界面使用 WebView 继续渲染, 逻辑层使用 JSCore 线程运行脚本. 小程序会有多个页面, 也就有多个 WebVIew 线程. 所有线程的通信经由微信客户端做中转. 所有页面的脚本逻辑都跑同一个 JsCore 线程, 页面使用 setTimeout 或者 setInterval 的定时器, 跳转其他页面时, 这些定时器并没有被消除.