本文是基于微信小程序官网及网上的一些文章做的总结, 一些内容比较抽象主要用于复习巩固,对于没有小程序开发经验的同学还是推荐先阅读小程序官方文档,写写案例。
- 2016年,应用号 -> 小程序,1月张小龙提出应用号,11月微信小程序开发公测
- 2017年,1月微信小程序正式发布
- 2018年,1月大量企业、开发者、资本、运营入场;3月,十家手机厂商推出快应用;9月支付宝小程序正式上线、百度小程序入场、头条小程序入场,10月抖音小程序入场
- 2022年,微信小程序日活用户超5亿
公众号模式有哪些问题?
根本原因:
直接原因:
首先介绍下三种UI渲染技术
- Native原生渲染:流畅可访问系统api 高留存;高成本、更新体验差
- Web技术渲染:成本低、跨平台;无法使用系统功能、低留存
- Hybrid混合渲染、web+native (
cordova
、h5+
)
采用Hybrid技术有一下优势
首先了解下双线程模型
- 为什么不使用浏览器线程模型?
- 为什么不使用 Web Worker?
不使用浏览器线程模型主要有两个原因
不使用WebWorker的原因
也是从安全管控的要求考虑,不直接提供HTML的能力(如你不能使用<a>
标签任意跳转);
微信设计一套组件框架——Exparser
。基于这个框架,内置了一套组件,以涵盖小程序的基础功能,便于开发者快速搭建出任何界面。同时也提供了自定义组件的能力,开发者可以自行扩展更多的组件,以实现代码复用。
Exparser的组件模型与WebComponents标准中的ShadowDOM高度相似。
定义内置组件的原则: 没有这个组件的话,在小程序架构里无法实现或者实现不好某类功能。
open-data
组件提供展示群名称、用户信息button
组件里open-type
属性WXML
属性值传递 父到子selectComponent
相当于vue
的$ref
relations
类似vue
的provide
/inject
pages
页面目录
app.js
全局入口文件app.json
全局配置文件app.wxss
全局样式文件project.config.json
项目配置文件sitemap.json
微信索引配置文件window
、document
等浏览器对象wx
对象,提供一些移动端的能力及微信自身的能力App Service
App()
注册程序Page()
注册页面getApp()
获取 APP 实例getCurrentPages()
获取当前页面栈API
wx.xxx()
wx.navigateTo
/ redirectTo
、wx.switchTab
/ reLaunch
、wx.navigateBack
路由跳转wx.showToast
/ showLoading
/ showModal
显示消息提示、加载提示、模态窗wx.request
/ downloadFile
/ uploadFile
网络请求、文件下载、文件上传wx.setStorage
/ getStorage
缓存数据存取wx.login
/ authorize
/ getUserInfo
登录、授权、获取用户信息wx.createSelectorQuery
获取节点信息
- WXML (WeiXin Markup lauguage):描述页面结构
- WXSS (WeiXin Style Sheet):描述页面样式
- WXS (WeiXin Script):小程序脚本语言
wxml
动态数据来自 Page
中的 data
Mustache
语法 {{ }}
为运算标记,内部为表达式wx:if
/ wx:for
/ model:value
<import>
引入目标文件的 template
模板<include>
引入目标文件除 template
与 wxs
以外代码(相当于代码直接拷贝到该标签位置)rpx
(responsive pixel)
@import
bind:[eventName]
冒泡事件capture-bind:[eventName]
捕获事件catch:[eventName]
冒泡事件(阻止事件继续冒泡)capture-catch:[eventName]
捕获事件(阻止事件继续捕获、冒泡)mut-bind:[eventName]
互斥事件data-[dataName]
view
、text
、image
、button
、icon
、web-view…
textarea
、video
、canvas
、map
、camera
、live-player/pusher
、input
WebView
层渲染
WKWebView
的原生组件 WKChildScrollView
DOM
节点并设置 overflow: scroll
(内核创建 WKChildScrollView)WKChildScrollView
WKChildScrollView
容器Chromium
的 WebPlugin
插件机制
<embed>
DOM 节点并指定组件类型(内核创建 WebPlugin
实例,生成 RenderLayer
)RenderLayer
绑定的 SurfaceTexture
Chromium
渲染该 RenderLayer
、渲染 embed
节点setData
频率 nextTick
策略this.setData({'obj.list.0.name':'差量更新'})
wxs
IntersectionObserver
监听元素曝光WXML
数量和层级onHide
/onUnload
中执行耗时逻辑,如同步接口调用、setData
等cover-view
可覆盖原生组件的视图容器 cover-view
需要多强调几句,uni-app
的非h5端的video
、map
、canvas
、textarea
是原生组件ecma
规范,标准js
语法和api
都支持 ,运行环境从浏览器变成v8
引擎DOM
、BOM
没有了js api
发生变更
alert
/comfirm
==> wx.showModel
ajax
==> wx.request
cookie
/session
没有了 用localStorage
实现body
==> body
rpx
flex
setData
在uni-app
里并不存在,因为vue
是自动双向数据绑定的。直接通过赋值方式修改数据,如果数据绑定到界面上,界面会自动更新渲染
this.data.reason
vue
triggerEvent
$ref
props
传递或控制子组件样式 或者子组件类名前面加上父组件类名h5
、app
、快应用uni-app
推荐使用flex
布局,这个布局思路和传统流式布局有点区别。但flex
的特色在于,不管是什么技术都支持这种排版,web
、小程序/快应用、weex
/rn
、原生的iOS
、Android
开发,全都支持flex
。它是通吃所有端的新一代布局方案。app.json
被分成两段 page.json
、mainfest.json
app.js
和app.wxss
被合并到了app.vue
中参考资料 白话uni-app 【也是html、vue、小程序的区别】 vue和微信小程序的区别、比较
参考资料:
本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!