[TOC]
# 小程序超过2M限制的方法——分包加载
2017.01.09 小程序上线时,微信限制了代码包不能超过1MB 大小,(现在是2M了)限制大小是出于对小程序启动速度的考虑,希望用户在使用任何一款小程序时,都能获得一种“秒开”体验。然而,2MB 的大小也限制了小程序功能的扩展,小程序业务的发展可能需要更大的体积。
那么,能否有一种方案,在增加小程序包大小的同时,也能保持不错的启动速度呢?
为了解决这个矛盾点,微信推出了「[分包加载](https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html)」这个技术方案。
## 注意
微信 6.6.0 版本开始支持分包加载,而对于低于这个版本的客户端,我们做了兼容处理,开发者不需要对老版本微信客户端做兼容。
所以在老版本的微信客户端下,是依然采取整包加载的方式加载的,建议开发者尽量控制代码包的大小。
# 字体和图片
微信小程序不支持加载本地字体/图片
[微信小程序设置苹方字体](https://www.jianshu.com/p/5108a0a130a9)
# 微信小程序 换行 空格&连续空格 view不自动换行
换行
1、必须在 `<text/>` 里, 才能用 `\n` 来换行 ;
2、`<view>` 里的不能用 `\n` 换行,想在 `view` 里换行,只能再包含一个 `text`
换行例子:
```
<view class='outer_box'>
<text class='inner-box'>
1、第一行文字 \n
2、第二行文字
</text>
</view>
```
来源:https://blog.csdn.net/abs1004/article/details/81772176
# 背景图片
1. 使用网络图片
2. 使用base64格式
3. 使用image来装载本地的图片,然后作为 界面背景
# 为什么要用wx.checkSession()——
有时候,我们会因为 `session_key` 不正确而导致解密或者校验签名失败。有几方面的原因:
1、因为 `wx.login()` 被调用时,用户的 `session_key` 会被更新导致就 `session_key` 失效。所以,在调用 `wx.login()` 的时候应该要明确需要登录之后再调用。
2、另外,微信不会把 `session_key` 的有效期告诉我们,用户越频繁使用微信,`session_key` 的有效期就更长。
因为,就需要调用`wx.checkSession()` 来校验当前用户的 `session_key` 是否有效。
```
onLoad: function () {
wx.checkSession({
success: function(res){
console.log("处于登录态");
},
fail: function(res){
console.log("需要重新登录");
wx.login({})
}
})
}
```
> https://segmentfault.com/a/1190000009658302
# Video 组件限制
1. `custom-cache="{{false}}"`
一般缓存为一级缓存、二级缓存、和自定义缓存,换而言之`custom-cache="{{false}}"`就是不使用自定义缓存的意思。为什么用了视频组件会卡loading加载不出来呢,可能是因为微信设置的自定义缓存的位置有容量限制,因此将它关闭了以后会自动使用系统缓存,可能就没有这个问题了。
# 微信小程序的一些限制
1. 不支持HTML、没有 Dom。网页用的 JS、CSS 基本要全部重写,WXML 的语法和 HTML 差异还挺大,基本是一个个照着手册的属性去改。**CSS 选择器不支持级联**。
2. 小程序源码打包后的大小限制为1M,超大传不上去。单次通过 wx.request传输的数据最大也是1M。
3. MINA 框架实现的 tab bar,最多5个 tab;通过 wx. navigateTo 推入后台的页面最多5层,超过会无法打开新页面。
4. 小程序没有 webview 控件,自带的 view 和 text 又不支持图文混排,还不能动态 set WXML …… 所以小程序上的富文本也就只能做到固定焦点图+纯文本+emoji了 [二哈]
5. 不支持 a 标签,无法打开普通网页。
整体上来讲,小程序本身被设计为处理简单逻辑的「工具型」应用;同时具有很强的内容封闭性。
# 解决小程序页面路径最多只能十层限制
小程序[文档](https://developers.weixin.qq.com/miniprogram/dev/api/wx.navigateTo.html)里跳转路径的方法。
讲一下业务背景吧!随着项目越来越大,页面的跳转也越来越多,使用 `navigateTo` 方法添加的页面栈也越来越多了,不知不觉可能就到了十层了 再用 `navigateTo`去跳转就跳不动了,这个时候需要 `redirectTo` **当前页面栈删除**来跳转或者用`reLaunch`**删除所有页面栈**来跳转 用那就要看业务场景了。
## 页面栈的处理:
| 路由方式 | 页面栈表现 | API |
| --- | --- | --- |
| 初始化 | 新页面入栈 | 初次进入,首页打开 |
| 打开新页面 | 新页面入栈 | `navigateTo` |
| 页面重定向 | 当前页面出栈,新页面入栈 |`redirectTo` |
| 页面返回 | 页面不断出栈 ,直到目标返回页,新页面入栈 | `navigateBack` |
| Tab 切换 | 页面全部出栈,只留下新的 Tab 页面 | `switchTab` |
| 重加载 | 页面全部出栈,只留下新的页面 | `reLanch` |
## 什么时候到了十层了呢?
这个时候关键的 api [`getCurrentPages()`](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#getcurrentpages) 来了!它返回的是一个数组,那么就可以获取它的 `length` 来做判断了!
[小程序无限层级路由方案(无框架依赖)](https://juejin.im/post/5c09d82e51882517165dd485)