[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)