1.路由懶載入:
(1)說明
路由懶載入是指路由的JS資源只有在被訪問的時候才會被動態獲取,是為了最佳化專案首次開啟的時間。
(2)配置
- 把路由修改為由React提供的lazy函式進行動態匯入
import {Suspense, lazy} from 'react' //lazy函式對元件進行匯入 const Board = lazy(()=>import('@/page/Board')) const About = lazy(()=>import('@/page/About'))
- 使用React內建的Suspense元件包裹路由中的element選項對應的元件
const router = createBrowserRouter([ { path : '/', element : <Layout></Layout>, children :[{ index:true, element : <Suspense fallback={'load'}><Board></Board></Suspense> }, { path : '/about', element : <Suspense fallback={'load'}><About></About></Suspense> }] }, ])
2.包體積視覺化分析
(1)下載依賴包
npm i source-map-explorer
(2)配置命令 package.json
"scripts": { "start": "craco start", "build": "craco build", "test": "react-scripts test", "eject": "react-scripts eject", "analyze" : "source-map-explorer 'build/static/js/*.js'" },
3.CDN最佳化
(1)說明:CDN是一種內容分發網路服務,當使用者請求網站內容時,由離使用者最近的伺服器將快取的資源內容傳遞給使用者
(2)哪些資源可以放到CDN伺服器?
- 體積比較大的非業務JS 檔案,比如react、react-dom,需要利用CDN檔案在瀏覽器的快取特性,加快載入時間
- 非業務JS,不需要經常做變動,CDN不用頻繁更新
(3)最佳化操作
- 把需要做CDN快取的檔案排除在打包之外
- 以CDN的方式重新引入資源
const path = require('path') const {whenProd,getPlugin,pluginByName} = require('@craco/craco') // const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { webpack : { alias : { //別名配置 '@' : path.resolve(__dirname,'src') } }, //配置webpack configure : (webpackConfig)=>{ let cdn; whenProd(()=>{ webpackConfig.externals = { react : 'React', 'react-dom' : 'ReactDOM' } cdn = { js : [ 'https://unpkg.com/react@latest/umd/react.development.js', 'https://unpkg.com/react-dom@latest/umd/react-dom.development.js' ] } }) const {isFound,match} = getPlugin( webpackConfig, pluginByName('HtmlWebpackPlugin') ) if(isFound) { match.userOptions.cdn = cdn } return webpackConfig } }