欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

react 實(shí)現(xiàn)頁面代碼分割、按需加載的方法

 更新時(shí)間:2018年04月03日 13:52:15   作者:BingqiChen  
本篇文章主要介紹了react 實(shí)現(xiàn)頁面代碼分割、按需加載的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

雖然一直有做 react 相關(guān)的優(yōu)化,按需加載、dll 分離、服務(wù)端渲染,但是從來沒有從路由代碼分割這一塊入手過,昨天在本地開發(fā)時(shí)沒有測試成功,今天又搞了下,已經(jīng)部署到線上環(huán)境了,今天就這個(gè)記錄一下。

修改配置

開發(fā)環(huán)境:webpack@v3 、react-router@v4

安裝依賴:

$ yarn add babel-plugin-syntax-dynamic-import -dev

修改 .babelrc 文件:在 plugins 中添加 "syntax-dynamic-import"

改造項(xiàng)目代碼

安裝依賴:

$ yarn add react-loadable

根據(jù) react-loadable 文檔提示,我們需要提供一個(gè)載入新頁面時(shí)的 Loading 組件,同時(shí)對加載和超時(shí)狀態(tài)進(jìn)行區(qū)別提示:

import React from 'react';
import { Icon } from 'antd';

const Loading = ({ pastDelay, timedOut, error }) => {
 if (pastDelay) {
 return <div><Icon type="loading" /></div>;
 } else if (timedOut) {
 return <div>Taking a long time...</div>;
 } else if (error) {
 return <div>Error!</div>;
 }
 return null;
};

更改頁面組件導(dǎo)入方法:

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
});

...

<Switch>
 <Route exact path="/home" component={Home} />
 <Route path="/editarticle" component={EditArticle} />
</Switch>

然后打包結(jié)果就會分離出各頁面代碼:

在頁面中我們只需要載入入口文件 app.js ,其他腳本在訪問到對應(yīng)頁面時(shí)都會經(jīng)由這個(gè)文件載入。

驗(yàn)證結(jié)果

在將靜態(tài)資源上傳到 cdn 之后,在頁面中加載 app.css 和 app.js ,運(yùn)行之后訪問各個(gè)頁面就會依次加載對應(yīng)腳本,結(jié)果如圖:

可以看到,在訪問第一個(gè)頁面時(shí)加載的頁面腳本經(jīng) gzip 壓縮后僅有 21.8KB ?。。‘?dāng)然這與頁面復(fù)雜度也有關(guān),但是相較于加載全部腳本,已經(jīng)是大幅減少了,這種優(yōu)化對訪問目標(biāo)性很強(qiáng)的用戶感受起來尤為明顯。

這么做的另一個(gè)好處就是當(dāng)我們只更改項(xiàng)目中某些頁面的業(yè)務(wù)代碼時(shí),其他頁面的代碼依然是不變的,所以這個(gè)時(shí)候其他頁面用的是客戶端緩存,從另一個(gè)層面又做了一次優(yōu)化。

Tips

react-loadable 還有其他配置選項(xiàng),可以按需配置;

這里還需要注意的一點(diǎn)是:webpack 中的 output.publicPath 選項(xiàng),這個(gè)配置會影響 app.js 從何處加載頁面腳本,正確的寫法應(yīng)該是腳本文件載入的前綴地址,例如: 0.js 的遠(yuǎn)程鏈接為 http://static.domain.com/release/0.js ,那么這個(gè)應(yīng)該配置為http://static.domain.com/release/。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React Native仿美團(tuán)下拉菜單的實(shí)例代碼

    React Native仿美團(tuán)下拉菜單的實(shí)例代碼

    本篇文章主要介紹了React Native仿美團(tuán)下拉菜單的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • React中實(shí)現(xiàn)父組件調(diào)用子組件的三種方法

    React中實(shí)現(xiàn)父組件調(diào)用子組件的三種方法

    在React中,組件之間的通信是一個(gè)常見的需求,有時(shí),我們需要從父組件調(diào)用子組件的方法,這可以通過幾種不同的方式實(shí)現(xiàn),需要的朋友可以參考下
    2024-04-04
  • React中useCallback useMemo到底該怎么用

    React中useCallback useMemo到底該怎么用

    在React函數(shù)組件中,當(dāng)組件中的props發(fā)生變化時(shí),默認(rèn)情況下整個(gè)組件都會重新渲染。換句話說,如果組件中的任何值更新,整個(gè)組件將重新渲染,包括沒有更改values/props的函數(shù)/組件。在react中,我們可以通過memo,useMemo以及useCallback來防止子組件的rerender
    2023-02-02
  • react 項(xiàng)目中引入圖片的幾種方式

    react 項(xiàng)目中引入圖片的幾種方式

    本文主要介紹了react 項(xiàng)目中引入圖片,本文詳細(xì)的介紹了幾種方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • React中的axios模塊及使用方法

    React中的axios模塊及使用方法

    axios 是一個(gè)基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中,本文給大家分享React中axios模塊的使用方法,感興趣的朋友一起看看吧
    2022-03-03
  • 瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼

    瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼

    這篇文章主要給大家介紹了關(guān)于瀏覽器中視頻播放器實(shí)現(xiàn)的基本思路與代碼,并且詳細(xì)總結(jié)了瀏覽器中的音視頻知識,對大家的理解和學(xué)習(xí)非常有幫助,需要的朋友可以參考下
    2021-08-08
  • 每天一個(gè)hooks學(xué)習(xí)之useUpdateEffect

    每天一個(gè)hooks學(xué)習(xí)之useUpdateEffect

    這篇文章主要為大家介紹了每天一個(gè)hooks學(xué)習(xí)之useUpdateEffect使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 淺談react-router HashRouter和BrowserRouter的使用

    淺談react-router HashRouter和BrowserRouter的使用

    本篇文章主要介紹了淺談react-router HashRouter和BrowserRouter的使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-12-12
  • react中通過props實(shí)現(xiàn)父子組件間通信的使用示例

    react中通過props實(shí)現(xiàn)父子組件間通信的使用示例

    在React中,父組件可以通過props屬性向子組件傳遞數(shù)據(jù),子組件可以通過props屬性接收父組件傳遞過來的數(shù)據(jù),本文就來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • React如何通過@craco/craco代理接口

    React如何通過@craco/craco代理接口

    這篇文章主要介紹了React如何通過@craco/craco代理接口問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論