1. 程式人生 > >程式碼分割和懶載入(一)

程式碼分割和懶載入(一)

為什麼需要程式碼分割?簡單來說:就是讓使用者在最快的速度拿到想要獲取的內容。

程式碼分割不在webpack的配置用。而是內建在webpack的方法中:

1、require.ensure方法/require.include

2、es5 loader spll

先來說說require.ensure方法

接受四個引數,分別如下

        []:dependencies  依賴

        callback:回掉函式,require ensure 執行程式碼

        erro callback: 錯的的回撥,不常用

        chunkName: 指定chunk的名字

使用場景:分離業務程式碼,業務公共程式碼,第三方依賴&分離首次載入和訪問後加載程式碼

1、分割lodash

import * as _ from 'lodash';

修改成這樣:

require.ensure([], function() {
    var _ = require('lodash');
    _.join(['1', '2'], '3');
},'vender')

2、分割公共程式碼

import './subpageA.js';
import './subPageB';

修改成這樣:

if (page === pageA) {
    require.ensure(['./subpageA'], function() {
        var subpageA = ['./subpageA']
    },'subpageA')
} else if (page === pageB) {
    require.ensure(['./subpageB'], function() {
        var subpageA = ['./subpageB']
    },'subpageB')
}

3、sunpageA和subpageB同時依賴moduleA

      而pageA依賴subpageA和subpageB

    這時候,可以在pageA中提前引入moduleA

require.include('./moduleA')

打包後結果如下:

  vender.chunk.js     541 kB       0  [emitted]  [big]  vender
subpageB.chunk.js  368 bytes       1  [emitted]         subpageB
subpageA.chunk.js  368 bytes       2  [emitted]         subpageA

  pageA.bundle.js    6.93 kB       3  [emitted]         pageA

而未提前引入moduleA的打包結果如下:

vender.chunk.js     541 kB       0  [emitted]  [big]  vender
subpageB.chunk.js  580 bytes       1  [emitted]         subpageB
subpageA.chunk.js  580 bytes       2  [emitted]         subpageA
  pageA.bundle.js     6.7 kB       3  [emitted]         pageA

很明顯。提前引入moduleA,得到的subpageA和subpageB要小很多。

-------------------------------------------------------------------------

使用動態import

把require.ensure 換成 import

程式碼如下:

if (page === 'pageA') {
    import(/*webpackChunkName:'subPageA'*/'./subPageA').then(function(subpageA) {
       console.log(subpageA);
    })
} else if (page === 'pageB') {
    import(/*webpackChunkName:'subPageA'*/'./subPageB').then(function(subPageB) {
        console.log(subPageB);
    })
}
/*webpackChunkName:'subPageA'*/   這是魔法註釋,新增chunkname的方法。

此時,雖然只引入了一個js,webpack卻幫我們把分割的js也引入了。


到此,學習結束。


相關推薦

程式碼分割載入

為什麼需要程式碼分割?簡單來說:就是讓使用者在最快的速度拿到想要獲取的內容。程式碼分割不在webpack的配置用。而是內建在webpack的方法中:1、require.ensure方法/require.include2、es5 loader spll先來說說require.e

深入理解並行程式設計-分割同步設計

原文連結     作者:paul    譯者:謝寶友,魯陽,陳渝 在商用計算機中,多核系統已經越來越常見了,本章將描述如何設計能更好利用多核優勢的軟體。我們將介紹一些習語,或者叫“設計模式”,來幫助您權衡效能、可擴充套件性和響應時間。在上一章我們說過,您在編寫並行軟體時最重要的考慮是如何進行分

webpack4 系列教程(四): 單頁面解決方案--程式碼分割載入

本節課講解webpack4打包單頁應用過程中的程式碼分割和程式碼懶載入。不同於多頁面應用的提取公共程式碼,單頁面的程式碼分割和懶載入不是通過webpack配置來實現的,而是通過webpack的寫法和內建函式實現的。 目前webpack針對此項功能提供

webpack基礎--程式碼分割載入

程式碼分割和懶載入 內建方法和Loader require.ensure() 內建方法:require.ensure([dependencies], callback,errorCalback,chunkName) 動態載入程式碼 引數: depend

webpack系類之程式碼分割載入

webpack實現程式碼方式是主要是通過模組的引入方式 1.require.ensure //進行程式碼分割 require.ensure(['lodash'],function(){ var _ = require('lodash');//

使用Webpack的程式碼分離實現Vue載入譯文

當一個Vue的專案體積變得十分龐大的時候,使用Webpack的程式碼分離功能將Vue Components,routes或Vuex的程式碼進行分離並按需載入,會極大的提高App的首屏載入速度。 在Vue的專案中,我們可以在三種不同的情況下使用懶載入和程式碼分離功能: Vue元

Spring原始碼深度解析總結3—— 配置檔案的讀取Bean的載入

上一篇總結了Spring利用Resource介面對配置檔案的封裝,接下來我們要看看Spring對封裝好的資源是如何解析的,以及如何利用解析出的資訊載入Bean的。BeanFactory bf = new XmlBeanFactory(new ClassPathResoure(

基於android的網路音樂播放器-本地音樂的載入後臺播放

作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網路音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也

tensorflow-模型儲存載入

模型儲存和載入(一)TensorFlow的模型格式有很多種,針對不同場景可以使用不同的格式。格式簡介Checkpoint用於儲存模型的權重,主要用於模型訓練過程中引數的備份和模型訓練熱啟動。GraphD

JVM——深入解析原理執行機制載入過程

       隔了好久終於把這篇文章補上了,最近在看《深入理解Java虛擬機器》,一本很不錯的書,必須值得一看。        由於本人對Java類的載入過程一直是一知半解,所以優先看了一下

JVM——深入解析原理執行機制載入

      上次我們說了一下jvm中類載入的過程,大概有載入,連線(驗證,準備,解析),初始化這麼幾個步驟,當然要實現這些功能就需要有載入器,今天我們就來說說jvm中的類載入器。 一、分類

JS函數對象

inf ack bsp 用法 .cn 求和 封裝 obj [0 在本文章中,將對JS中的函數和對象進行一些講解,不對之處還請之處 一.JS中的函數 1.1無參函數 其形式如下代碼所示 function box(){ alert("我是一個函數,只有被調用才會執行

python學習筆記表達式運算符

python表達式和運算符什麽是表達式?1+2*3 就是一個表達式,這裏的加號和乘號叫做運算符,1、2、3叫做操作數。1+2*3 經過計算後得到的結果是7,就1+2*3 = 7。我們可以將計算結果保存在一個變量裏,ret = 1-2*3 。 所以表達式就是由操作數和運算符組成的一句代碼或語句,表達式可以求值,

Java數據結構算法——簡介

技術 其他 高程 度量 得出 rsh 基本功 represent 介紹 本系列博客我們將學習數據結構和算法,為什麽要學習數據結構和算法,這裏我舉個簡單的例子。   編程好比是一輛汽車,而數據結構和算法是汽車內部的變速箱。一個開車的人不懂變速箱的原理也是能開車的,同理一個不

配置管理Zabbix

trigge zabbix serve 名稱 net rep accept discover 不同的 四、添加監控客戶端1、監控Linux服務器首先安裝zabbix-agent客戶端CentOS6客戶端: # rpm -ivh http://repo.zabbix.com/

微服務之springClouddocker-Eureka

決策 config snap service 每次 entry eas pen end 前言 本文記錄怎麽搭建服務註冊中心eureka,然後打包成docker鏡像,用docker swarm部署eureka集群 1、環境spring boot 1.5.1.RELEASE,是

大話設計模式——裝飾模式代理模式

區別 接口 需要 構圖 技術分享 開閉 tro 可能 code 1、是什麽? 裝飾模式:動態地給一個對象添加額外的職責。 代理模式:其他對象通過對象A去訪問對象B。 2、為什麽用? 裝飾模式:1、遵循開閉原則,盡量不去修改原有的類。2、裝飾對象一般都是添加額外的

Spring整合Struts2Hibernate+Maven之Maven專案建立

趁著畢設的功夫,寫一些東西。也算是記錄個人平時畢設完成的過程。 建立專案 工具:intellij idea+JDK1.6+Maven 第一步:New Project ->點選左側maven ->勾選Create fromarchetype 後選擇maven-archet

理解Web應用程式的程式碼結構執行原理3

1、理解Web應用程式的執行原理和機制        Web應用程式是基於瀏覽器/伺服器模式(也稱B/S架構)的應用程式,它開發完成後,需要部署到Web伺服器上才能正常執行,與使用者互動的客戶端是網頁瀏覽器。 瀏覽器負責顯示來自伺服器的資料和接受使用者的輸入資料,也

Web框架——XWAF的程式碼結構執行機制4

    XWAF是一套基於Servlet和java反射技術的Web應用程式框架,它利用Servlet執行機制在伺服器上載入和執行,接管客戶端請求,依靠ServletRequest物件獲取使用者請求資訊,使用ServletResponse物件返回處理結果。