本文是基于微信小程序官网及网上的一些文章做的总结, 一些内容比较抽象主要用于复习巩固,对于没有小程序开发经验的同学还是推荐先阅读小程序官方文档,写写案例。
- 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的$refrelations 类似vue的provide/injectpages 页面目录
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 中的 dataMustache 语法 {{ }} 为运算标记,内部为表达式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、inputWebView层渲染
WKWebView 的原生组件 WKChildScrollView
DOM 节点并设置 overflow: scroll(内核创建 WKChildScrollView)WKChildScrollViewWKChildScrollView 容器Chromium 的 WebPlugin 插件机制
<embed> DOM 节点并指定组件类型(内核创建 WebPlugin 实例,生成 RenderLayer)RenderLayer 绑定的 SurfaceTextureChromium 渲染该 RenderLayer、渲染 embed 节点setData频率 nextTick策略this.setData({'obj.list.0.name':'差量更新'})wxsIntersectionObserver监听元素曝光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.showModelajax ==> wx.requestcookie/session没有了 用localStorage实现body ==> bodyrpxflexsetData在uni-app里并不存在,因为vue是自动双向数据绑定的。直接通过赋值方式修改数据,如果数据绑定到界面上,界面会自动更新渲染
this.data.reasonvue
triggerEvent$refprops传递或控制子组件样式 或者子组件类名前面加上父组件类名h5、app、快应用uni-app推荐使用flex布局,这个布局思路和传统流式布局有点区别。但flex的特色在于,不管是什么技术都支持这种排版,web、小程序/快应用、weex/rn、原生的iOS、Android开发,全都支持flex。它是通吃所有端的新一代布局方案。app.json被分成两段 page.json、mainfest.jsonapp.js和app.wxss被合并到了app.vue中参考资料 白话uni-app 【也是html、vue、小程序的区别】 vue和微信小程序的区别、比较
参考资料:
本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!