1.懶加載是什么?
在ionic2中所有的組件、模塊、服務、管道等都堆積在app.module.ts模塊中,在頁面初始化的時候會一次性加載所有的資源,導致資源過大,頁面渲染緩慢,也導致app.module.ts混亂,不美觀,不易維護,不適用於結構繁多、業務復雜的項目。
懶加載的出現,使得在跳轉到對應頁面的時候加載對應頁面的js、css、html,這樣每個頁面都是一個模塊,只有在需要的時候才會加載,大大緩解了首屏的壓力。
2.懶加載的使用:
https://ionicframework.com/docs/api/navigation/IonicPage/
3.實戰項目的結構:
app.module.ts中並沒有導入任何頁面模塊或申明頁面組件。每個頁面都應用了一個懶加載模塊。直接通過push導入模塊就可以了。
4.打包后的結構:
build文件下的js文件是每個頁面懶加載編譯后的js,跳轉到對應頁面才會引用對應的js文件,可以在控制台中network中觀察。
5.問題來了!
index.html
index.html文件中引用的js加版本號可有效清除對應js 的緩存。
但因為build下的一堆數字js是系統編譯后自動生成的,沒法加版本號,導致被瀏覽器或服務器緩存。
出現一個情況:man.js、vendor.js、polyfills.js是請求最新的,build下的js從緩存中讀取,所以項目在跳轉對應頁面,加載引用的js時,會找不到。
6.花式嘗試方法
服務器不做緩存,無效。
找出頁面模塊編譯后引用js的地方,解決了頁面應用js的問題,但導致polyfills.js報錯,混淆的代碼,已經沒有了可讀性。
使用meta不做瀏覽器緩存,無效
7.解決辦法,去掉懶加載,使用首屏全部加載,混淆代碼,極致壓縮。
網上很少有對應的資源,因為ionic3基本上用來做app開發,資料很少。因為已經上了正式服,無奈要趕緊解決,全部去掉了懶加載。
去掉懶加載后的打包
只剩下暴露在index.html中引用的js了,加版本號可解決緩存。
8.自動化混淆代碼,每次打包修改文件名,達到清除緩存的作用
npm install map-replace -D
npm install hashmark -D
package.json scripts加:
"hashcb": "hashmark -l 8 -r --cwd www/build \"*.{js,css}\" {name}.{hash}{ext} | map-replace -m \"<[^>]+>\" www/index.html",
"dist": "npm run clean && shx rm -rf www/* && npm run build --prod && npm run hashcb && workbox injectManifest"
打包: npm run dist
取www/目錄下的文件,放棄ionic cordobva build browser --prod 的方式。
9.后續跟進懶加載緩存問題的解決,問題主要還是在ios蘋果端的強緩存。。。。