网站首页 > 技术文章 正文
小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。
一、什么是微信小程序
微信小程序,是小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
小程序和普通网页开发的区别
网页开发者需要面对的环境是各式各样的浏览器,PC 端需要面对 IE、Chrome、QQ浏览器等,在移动端需要面对Safari、Chrome以及 iOS、Android 系统中的各式 WebView 。
而小程序开发过程中需要面对的是两大操作系统 iOS 和 Android 的微信客户端,以及用于辅助开发的小程序开发者工具,小程序中三大运行环境也是有所区别的,如表所示。
运行环境 | 逻辑层 | 渲染层 |
iOS | JavaScriptCore | WKWebView |
安卓 | V8 | chromium定制内核 |
小程序开发者工具 | NWJS | Chrome WebView |
二、使用步骤
1. 进入 https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN。
2. 注册账号,任何邮箱即可。
3. 去邮箱确认即可。
4. 下载安装微信开发者工具
根据自己系统选择合适的版本。
5. 双击进入微信开发者工具,点击新建。
6. 项目配置
AppID建议用自己的,在微信公众号平台开发->开发管理->开发设置->开发者ID。
三、代码结构
小程序创建完毕,代码结构如下:
1. pages:包含小程序页面。
每个页面都有一个独立的文件夹。
每个页面包含4个文件:js页面逻辑,json页面配置,wxss页面样式,wxml页面结构。
2. app.js:全局入口文件。
3. app.json:全局配置文件。
4.app.wxss:全局样式文件。
5.project.config.json:整个项目的配置文件。
6.sitemap.json:配置小程序及其页面是否允许被微信索引。
接下来大家就可以根据自己的项目需求进行开发,一些常用的配置属性可以借鉴官方文档。我们也给大家介绍几个有代表性的功能
四、小程序运行机制
1. 小程序的生命周期。
小程序从启动到最终被销毁,会经历很多不同的状态,小程序在不同状态下会有不同的表现。
2. 小程序冷启动
冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动,即冷启动。
小程序冷启动时,如果启动时不带 path(A 类场景),默认情况下将会进入小程序的首页。在页面对应的 json 文件中(也可以全局配置在 app.json 的 window 段中),指定 restartStrategy 配置项可以改变这个默认的行为,使得从某个页面退出后,下次 A 类场景的冷启动可以回到这个页面。
代码示例:
{
"restartStrategy": "homePage"
}
3. 小程序热启动
热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。
小程序热启动时,打开的页面有以下情况:
(A 类场景)若启动的场景中不带 path,则保留上次的浏览的状态。
(B 类场景)若启动的场景中带有 path,则 reLaunch 到对应 path 的页面。
4.退出状态
每当小程序可能被销毁之前,页面回调函数 onSaveExitState 会被调用。如果想保留页面中的状态,可以在这个回调函数中“保存”一些数据,下次启动时可以通过 exitState 获得这些已保存数据。
代码示例:
{
"restartStrategy": "homePageAndLatestPage"
}
Page({
onLoad: function() {
var prevExitState = this.exitState // 尝试获得上一次退出前 onSaveExitState 保存的数据
if (prevExitState !== undefined) { // 如果是根据 restartStrategy 配置进行的冷启动,就可以获取到
prevExitState.myDataField === 'myData'
}
},
onSaveExitState: function() {
var exitState = { myDataField: 'myData' } // 需要保存的数据
return {
data: exitState,
expireTimeStamp: Date.now() + 24 * 60 * 60 * 1000 // 超时时刻
}
}
})
注意事项:
如果超过 expireTimeStamp ,保存的数据将被丢弃,且冷启动时不遵循 restartStrategy 的配置,而是直接从首页冷启动。
expireTimeStamp 有可能被自动提前,如微信客户端需要清理数据的时候。
在小程序存活期间, onSaveExitState 可能会被多次调用,此时以最后一次的调用结果作为最终结果。
在某些特殊情况下(如微信客户端直接被系统杀死),这个方法将不会被调用,下次冷启动也不遵循 restartStrategy 的配置,而是直接从首页冷启动。
五、自定义tabBar
自定义 tabBar 可以让开发者更加灵活地设置 tabBar 样式,以满足更多个性化的场景。
使用流程:
1. 配置信息。
在 app.json 中的 tabBar 项指定 custom 字段,同时其余 tabBar 相关配置也补充完整。
所有 tab 页的 json 里需声明 usingComponents 项,也可以在 app.json 全局开启。
{
"tabBar": {
"custom": true,
"color": "#000000",
"selectedColor": "#000000",
"backgroundColor": "#000000",
"list": [{
"pagePath": "page/component/index",
"text": "组件"
}, {
"pagePath": "page/API/index",
"text": "接口"
}]
},
"usingComponents": {}
}
2. 添加tabBar代码文件
在代码根目录下添加入口文件:
custom-tab-bar/index.js
custom-tab-bar/index.json
custom-tab-bar/index.wxml
custom-tab-bar/index.wxss
3. 编写tabBar代码
用自定义组件的方式编写即可,该自定义组件完全接管 tabBar 的渲染。另外,自定义组件新增 getTabBar 接口,可获取当前页面下的自定义 tabBar 组件实例。
六、微信小程序分包
微信小程序限制了代码包不能超过 2MB,限制大小是对小程序启动速度的考虑,但是2MB 大小严重限制了小程序功能的扩展,业务需求可能需要更大的体积,综合考虑微信推出了“分包加载方案”。
目前小程序分包大小有以下限制:
整个小程序所有分包大小不超过20M。
单个分包/主包大小不能超过2M。
具体方法包含:
使用分包、独立分包、分包预下载、分包异步化
我们主要介绍一下使用分包,其他方式可以参考微信官方文档。
五、使用分包
1. 配置方法
假设支持分包的小程序目录结构如下:
├── app.js
├── app.json
├── app.wxss
├── packageA
│ └── pages
│ ├── cat
│ └── dog
├── packageB
│ └── pages
│ ├── apple
│ └── banana
├── pages
│ ├── index
│ └── logs
└── utils
开发者通过在 app.json subpackages 字段声明项目分包结构:
{
"pages":[
"pages/index",
"pages/logs"
],
"subpackages": [
{
"root": "packageA",
"pages": [
"pages/cat",
"pages/dog"
]
}, {
"root": "packageB",
"name": "pack2",
"pages": [
"pages/apple",
"pages/banana"
]
}
]
}
subpackages 中,每个分包的配置有以下几项:
字段 | 类型 | 说明 |
root | String | 分包根目录 |
name | String | 分包别名,分包预下载时可以使用 |
pages | stringArray | 分包页面路径,相对于分包根目录 |
independent | Boolean | 分包是否是独立分包 |
2. 打包原则
- 声明 subpackages 后,将按 subpackages 配置路径进行打包,subpackages 配置路径外的目录将被打包到主包中。
- 主包也可以有自己的 pages,即最外层的 pages 字段。
- subpackage 的根目录不能是另外一个 subpackage 内的子目录。
- subpackage 的根目录不能是另外一个 subpackage 内的子目录。
3. 引用原则
- packageA 无法 require packageB JS 文件,但可以 require 主包、packageA 内的 JS 文件;使用 分包异步化 时不受此条限制
- packageA 无法 import packageB 的 template,但可以 require 主包、packageA 内的 template
- packageA 无法使用 packageB 的资源,但可以使用主包、packageA 内的资源
4. 低版本兼容
由微信后台编译来处理旧版本客户端的兼容,后台会编译两份代码包,一份是分包后代码,另外一份是整包的兼容代码。新客户端用分包,老客户端还是用的整包,完整包会把各个 subpackage 里面的路径放到 pages 中。
总结
小程序有如下特点:
1.无需安装随时可用。
2.触手可及。
3.用完即走,无需卸载。
猜你喜欢
- 2024-12-19 this is a test This is a test message.
- 2024-12-19 写给前端同学的Nginx配置指南 前端nginx 配置详解
- 2024-12-19 汽车大灯灯泡前有黑色的东西,会不会影响行车安全
- 2024-12-19 开源旅游小程序-前端+后端程序,源码开放,支持二次开发
- 2024-12-19 H5小游戏开发教程之基础项目搭建 h5小游戏制作软件
- 2024-12-19 PS抠形体轮廓有出现白边,快速去除小技巧
- 2024-12-19 这个交互式个人博客能让你眼前一亮??? ?
- 2024-12-19 引擎盖一边缝隙宽一边窄 汽车缝隙不均
- 2024-12-19 Node.js 知识点总结(1) node.js的理解
- 2024-12-19 2024为什么前端都应该掌握Nextjs 或 Nuxtjs
你 发表评论:
欢迎- 05-11FANUC修改前端目录教程
- 05-11前端分享-Set你不知道的事
- 05-11jq+ajax+bootstrap改了一个动态分页的表格
- 05-11千万级大表分页查询效率剧降,你会怎么办?
- 05-11Elasticsearch深度分页
- 05-11如何写一个简单的分页
- 05-11手速太快引发分页翻车?前端竞态陷阱揭秘
- 05-11「linux」Socket缓存是如何影响TCP性能的?
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端懒加载 (45)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)