摘要:雖然一直有做相關的優化,按需加載分離服務端渲染,但是從來沒有從路由代碼分割這一塊入手過,昨天在本地開發時沒有測試成功,今天又搞了下,已經部署到線上環境了,今天就這個記錄一下。
雖然一直有做 react 相關的優化,按需加載、dll 分離、服務端渲染,但是從來沒有從路由代碼分割這一塊入手過,昨天在本地開發時沒有測試成功,今天又搞了下,已經部署到線上環境了,今天就這個記錄一下。
修改配置開發環境:webpack@v3 、react-router@v4
安裝依賴:
$ yarn add babel-plugin-syntax-dynamic-import -dev
修改 .babelrc 文件:在 plugins 中添加 "syntax-dynamic-import"
改造項目代碼
安裝依賴:
$ yarn add react-loadable
根據 react-loadable 文檔提示,我們需要提供一個載入新頁面時的 Loading 組件,同時對加載和超時狀態進行區別提示:
import React from "react"; import { Icon } from "antd"; const Loading = ({ pastDelay, timedOut, error }) => { if (pastDelay) { return; } else if (timedOut) { returnTaking a long time...; } else if (error) { returnError!; } return null; };
更改頁面組件導入方法:
import React from "react"; import Loadable from "react-loadable"; import { Route, Switch } from "react-router-dom"; const Home = Loadable({ loader: () => import("../Home"), loading: Loading, timeout: 10000 }); const EditArticle = Loadable({ loader: () => import("../EditArticle"), loading: Loading, timeout: 10000 }); ...
然后打包結果就會分離出各頁面代碼:
在頁面中我們只需要載入入口文件 app.js ,其他腳本在訪問到對應頁面時都會經由這個文件載入。
驗證結果在將靜態資源上傳到 cdn 之后,在頁面中加載 app.css 和 app.js ,運行之后訪問各個頁面就會依次加載對應腳本,結果如圖:
可以看到,在訪問第一個頁面時加載的頁面腳本經 gzip 壓縮后僅有 21.8KB !!!當然這與頁面復雜度也有關,但是相較于加載全部腳本,已經是大幅減少了,這種優化對訪問目標性很強的用戶感受起來尤為明顯。
這么做的另一個好處就是當我們只更改項目中某些頁面的業務代碼時,其他頁面的代碼依然是不變的,所以這個時候其他頁面用的是客戶端緩存,從另一個層面又做了一次優化。
Tipsreact-loadable 還有其他配置選項,可以按需配置;
這里還需要注意的一點是:webpack 中的 output.publicPath 選項,這個配置會影響 app.js 從何處加載頁面腳本,正確的寫法應該是腳本文件載入的前綴地址,例如: 0.js 的遠程鏈接為 http://static.domain.com/rele... ,那么這個應該配置為 http://static.domain.com/rele... 。
該文章首發于我的博客https://blog.bingqichen.me/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93942.html
摘要:或者的,都會對其進行分析。舒適的開發體驗,有助于提高我們的開發效率,優化開發體驗也至關重要組件熱刷新熱刷新自從推出熱刷新后,前端開發者在開環境下體驗大幅提高。實現熱調試后,調試流程大幅縮短,和普通非直出模式調試體驗保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的資源 不知道不...
摘要:或者的,都會對其進行分析。舒適的開發體驗,有助于提高我們的開發效率,優化開發體驗也至關重要組件熱刷新熱刷新自從推出熱刷新后,前端開發者在開環境下體驗大幅提高。實現熱調試后,調試流程大幅縮短,和普通非直出模式調試體驗保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的資源 不知道不...
摘要:或者的,都會對其進行分析。舒適的開發體驗,有助于提高我們的開發效率,優化開發體驗也至關重要組件熱刷新熱刷新自從推出熱刷新后,前端開發者在開環境下體驗大幅提高。實現熱調試后,調試流程大幅縮短,和普通非直出模式調試體驗保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的資源 不知道不...
摘要:注意使用的版本不同,可能會導致打包出的結果不一樣。完整的優化代碼見有用的文章分離第三方庫及公用文件 現在的 web 應用,內容一般都很豐富,站點需要加載的資源也特別多,尤其要加載很多 js 文件。js 文件從服務端獲取,體積大小決定了傳輸的快慢;瀏覽器端拿到 js 文件之后,還需要經過解壓縮、解析、編譯、執行操作,所以,控制 js 代碼的體積以及按需加載對前端性能以及用戶體驗是十分的重...
閱讀 877·2021-10-13 09:39
閱讀 3531·2021-09-26 10:16
閱讀 2860·2019-08-30 15:54
閱讀 1037·2019-08-30 14:22
閱讀 2885·2019-08-29 15:39
閱讀 3253·2019-08-27 10:52
閱讀 809·2019-08-26 13:59
閱讀 1702·2019-08-26 12:20