用于VueJS和Webpack的代码分割模式

2023-05-16

拆分单个页面应用程序的代码是提高其初始加载速度的一个很好的方法。由于用户不必一次性下载所有代码,他们将能够更快地看到页面并与页面进行交互。这将提高用户体验,特别是在移动领域,这是搜索引擎优化的一个胜利,因为谷歌惩罚加载缓慢的网站。

任何封装在单个文件组件中的东西都可以很容易地进行代码拆分,因为Webpack可以在导入模块时创建一个拆分点,而Vue很乐意异步加载组件。

我认为代码分割最困难的部分不是让它工作,而是知道在哪里和什么时候工作。我想说的是,在设计应用程序时,代码分割需要成为架构上的考虑因素。

在这篇文章中,我将介绍三种代码分割Vue.js单页应用程序的模式:

  • 按页面

  • 按页折叠

  • 按条件

1 (2).jpg1、按页

按页分割代码是一个明显的起点。以这个简单的应用程序为例,它有三个页面:

2.jpg如果我们确保每个页面都由它自己的单个文件组件表示,例如Home。vue,。vue和联系。然后,我们可以使用Webpack的动态导入函数将每个文件分割成一个单独的构建文件。然后,当用户访问另一个页面时,Webpack将异步加载请求页面的文件。

如果您正在使用vue-router,这一点实现起来很简单,因为您的页面已经需要放在单独的组件中。

routes.js

const Home = () = >import(
/* webpackChunkName: "home" */
'./Home.vue');
const About = () = >import(
/* webpackChunkName: "about" */
'./About.vue');
const Contact = () = >import(
/* webpackChunkName: "contact" */
'./Contact.vue');

const routes = [{
    path: '/',
    name: 'home',
    component: Home
},
{
    path: '/about',
    name: 'about',
    component: About
},
{
    path: '/contact',
    name: 'contact',
    component: Contact
}];

查看在构建此代码时生成的统计数据。每个页面都在自己的文件中,但是还要注意有一个名为build_main的主包文件。它包含任何公共代码以及异步加载其他文件的逻辑。无论用户访问哪条路由,都需要加载它。

3.jpg现在,假设我从URL http://localhost:8080/#/ Contact加载联系人页面。当我检查网络选项卡,我看到以下文件已加载:

4.jpg注意build_main.js的启动程序是(index)。这意味着index.html请求脚本,这正是我们所期望的。但是build_1.js的发起者是bootstrap_a877…

这是负责异步加载文件的Webpack脚本。当您使用Webpack的动态导入函数时,此脚本将自动添加到构建中。重要的一点是build_1.js没有阻塞初始页面加载。

2、折叠以下

在“折叠”下面是页面的任何部分,当页面初始加载时,这些部分在viewport中是不可见的。您可以异步加载此内容,因为用户通常会在向下滚动之前花一两秒钟来阅读上面的内容,尤其是在他们第一次访问站点时。

5.jpg在这个示例应用程序中,我认为折线就在报头下面。因此,让我们在初始页面加载时包括导航栏和报头,但之后可以加载下面的任何内容。现在我将创建一个名为BelowFold的组件,并将相关的标记抽象为:

Home.vue

<template>
  <div>
    <div class="jumbotron">
      <h1>Jumbotron heading</h1>...</div>
    <below-fold></below-fold>
    <!--All the code below here has been put into-->
    <!--into the above component-->
    <!--<div class="row marketing">
    <div class="col-lg-6">
    <h4>Subheading</h4>
    <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>
    ...
    </div>
    ...
    </div>-->
  </div>
</template>
<script>const BelowFold = () = >import(
  /* webpackChunkName: "below-fold" */
  './BelowFold.vue');

  export
default {...components:
    {
      BelowFold
    }
  }</script>

BelowFold.vue

<template>
  <div class="row marketing">
    <div class="col-lg-6">
      <h4>Subheading</h4>
      <p>Donec id elit non mi porta gravida at eget metus. 
      Maecenas faucibus mollis interdum.</p>...</div>...</div>
</template>

现在我们将看到下面的块在它自己的单独文件,当我们捆绑代码:

6.jpg注意:下面的块非常小(1.36kB),似乎不值得将其拆分。但那只是因为这是一个只有很少内容的演示应用程序。在一个真正的应用程序中,页面的大部分可能在折叠下面,因此可能有大量的代码,包括用于任何子组件的CSS和JS文件。

3.条件内容

代码分割的另一个很好的候选对象是有条件显示的任何内容。例如模式窗口、制表符、下拉菜单等。

这款应用程序有一个模式窗口,当你按下“今日注册”按钮时打开:

7.jpg和之前一样,我们只是将模态代码移动到它自己的单个文件组件中:

Home.vue

<template>
  <div>
    <div class="jumbotron">...</div>
    <below-fold></below-fold>
    <home-modal v-if="show" :show="show"></home-modal>
  </div>
</template>
<script>const BelowFold = () = >import(
  /* webpackChunkName: "below-fold" */
  './BelowFold.vue');
  const HomeModal = () = >import(
  /* webpackChunkName: "modal" */
  './HomeModal.vue');

  export
default {
    data() {
      return {
        show:
        false
      }
    },
    components: {
      HomeModal,
      BelowFold
    }
  }</script>

HomeModal.vue

<template>
  <modal v-model="show" effect="fade">...</modal></template>
<script>import Modal from 'vue-strap/src/Modal.vue';

  export
default {
    props:
    ['show'],
    components: {
      Modal
    }
  }</script>

请注意,我已经v-if在模态上加了一个。布尔值show控制模态的打开/关闭,但它也会有条件地渲染模态组件本身。由于在页面加载时它是错误的,因此只有在打开模态时才会下载代码。

这很酷,因为如果用户从未打开过模态,他们就不必下载代码。唯一的缺点是它的UX成本很小:用户必须在按下按钮之后等待文件下载。

在我们再次构建之后,下面是我们现在的输出:

8.jpg

结论

这些是构建用于代码拆分的应用程序的三个想法。如果你运用想象力,我相信还有其他办法可以做到!

想要了解更多相关知识,可访问 前端学习网站!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于VueJS和Webpack的代码分割模式 的相关文章

随机推荐

  • EKF(扩展卡尔曼滤波)参数理解

    EKF VELNE NOISE xff1a 速度在坐标轴 NE 方向上的噪声 通常是在 0 上下波动 设置方法 xff1a 将飞机上电静置若干分钟 xff08 时间尽量长一点 xff09 记录飞 行日志 xff0c 由 EKF3 的 IVN
  • 详解HTML文档声明(DOCTYPE)

    HTML文档通常以类型声明开始 xff0c 该声明将帮助浏览器确定其尝试解析和显示的HTML文档类型 本文将详细介绍文档声明DOCTYPE 特点 文档声明必须是HTML文档的第一行 且顶格显示 xff0c 对大小写不敏感 因为任何放在DOC
  • CSS 不定宽高的垂直水平居中(9种方法)

    垂直居中 xff0c 在 CSS 中是一个老生常谈的问题 xff0c 面试的时候也会时常被提及 所以 xff0c 今天我们就来聊聊 9 种不同的居中方法 有常见的 flex transform absolute 等等 也有 CSS3 的网格
  • html5不常用标签应用场景

    作为一个前端开发 xff0c 在浏览别人家的页面时总是会习惯性的查看他们页面的源码 xff0c 发现大多数网站的页面 xff0c 包括我自己写的页面中用到的最多的布局元素无外乎就是div p span ul dl ol li dt dd s
  • HTML的16个全局属性介绍

    在HTML中 xff0c 属性能表达相当丰富的语义 xff0c 而且属性也会额外提供很多实用的功能 xff0c HTML共支持16个常见的全局属性 HTML原有属性 accesskey 作用 xff1a 浏览器用来创建激活或聚焦元素的快捷键
  • 聊聊JavaScript作用域

    几乎所有的语言都有作用域的概念 xff0c 简单的说 xff0c 作用域就是变量和函数的可访问范围 xff0c 即作用域控制在变量和函数的可见性和生命周期 变量作用域 是程序源代码中定义这个变量的区域 1 全局变量拥有全局作用域 xff0c
  • CSS布局方案大全【整理】

    我们在日常开发中经常遇到布局问题 xff0c 下面罗列几种常用的css布局方案话不多说 xff0c 上代码 xff01 居中布局 以下居中布局均以不定宽为前提 xff0c 定宽情况包含其中 1 水平居中 a inline block 43
  • 你必须知道的一些HTML优化技巧

    如何提升Web页面的性能 xff0c 很多开发人员从多个方面来下手如JavaScript 图像优化 服务器配置 xff0c 文件压缩或是调整CSS 很显然HTML 已经达到了一个瓶颈 xff0c 尽管它是开发Web 界面必备的核心语言 HT
  • 常见的CSS图形绘制合集

    展示40多个常见的纯CSS绘制图形 xff0c 效果实时 xff0c 含源代码 xff0c 想要什么效果直接复制粘贴就好了 就算项目用不到 xff0c 看看别人代码怎么写的也有助于提高CSS的基本功 以下这些造型简单的图形都是纯CSS外加一
  • 扩展Vue.js组件

    您的Vue应用程序中是否有共享类似选项的组件 xff0c 甚至模板标记 使用公共选项和标记创建基本组件 xff0c 然后扩展基本组件以创建子组件 xff0c 这是一个好主意 这样的体系结构将帮助您在代码中应用DRY原则 不要重复您自己 xf
  • Node.js日志记录指南

    当你开始用 JavaScript 进行开发时 xff0c 可能学到的第一件事就是如何用 console log 将内容记录到控制台 如果你去搜索如何调试 JavaScript xff0c 会发现数百篇博文和 StackOverflow 文章
  • 软件测试的测试方法及测试流程

    一 测试方法 xff1a 白盒测试 xff1a 把软件比作一个打开的盒子 xff0c 可以看到软件代码的实现 xff0c 针对代码的实现验证代码是否存在问题 单元测试阶段采用的测试方法 灰盒测试 xff1a 介于白盒和黑盒测试之间 灰盒测试
  • 18个用于创建漂亮图表的JavaScript库推荐

    几乎不可能想象没有图形和图表的任何仪表盘 它们快速有效地呈现复杂的统计数据 此外 xff0c 一个好的图表还可以增强网站的整体设计 在本文中 xff0c 我将向您展示一些用于图形和图表的最佳JavaScript库 这些库将帮助您为将来的项目
  • JavaScript基础--引用数据类型 (对象)

    本文主要讲述了JavaScript对象的属性和对象的引用 xff0c 以及对象的读取 赋值 删除和获取对象键名的操作 1 对象 对象就是一组 键值对 xff08 key value xff09 的集合 xff0c 是一种无序的复合数据集合
  • javascript面向对象设计

    javascript和java语言不一样 xff0c 它没有类这个说法 xff0c 更没有子类父类一说 xff0c 所以它所谓的继承机制 xff0c 也是和其他语言完全不同的 创建对象三种方式 1 最简单的方式 xff0c 创建一个obje
  • 关键CSS和Webpack:自动最小化渲染阻止CSS

    消除渲染阻止的JavaScript和CSS 这是我始终坚持使用的Google Page Speed Insights建议 Google建议您在页面加载准备就绪时将最初需要的CSS 内插 CSS内嵌并加载CSS的其余部分 当访问web页面时
  • 如何用SASS编写可重用的CSS

    Sass是一个CSS预处理程序 xff0c 它在前端工程师的工具箱中变得至关重要 Sass之所以流行 xff0c 是因为它修复了几个CSS缺陷 相关推荐 xff1a css在线手册 这也是Bootstrap 4运行的基础 这意味着为了理解如
  • JS 变量的作用域及闭包

    与闭包有关的概念 xff1a 变量的作用域和变量的生存周期 下面本篇文章就来给大家介绍一下JS中变量的作用域及闭包 xff0c 有一定的参考价值 xff0c 有需要的朋友可以参考一下 xff0c 希望对大家有所帮助 一 变量的作用域 1 变
  • 理解JavaScript中的变量、范围和提升

    变量是许多编程语言的基本组成部分 xff0c 也是新手需要学习的第一个也是最重要的概念 JavaScript中有许多不同的变量属性 xff0c 以及命名变量时必须遵循的一些规则 在JavaScript中 xff0c 有三个关键字用于声明变量
  • 用于VueJS和Webpack的代码分割模式

    拆分单个页面应用程序的代码是提高其初始加载速度的一个很好的方法 由于用户不必一次性下载所有代码 xff0c 他们将能够更快地看到页面并与页面进行交互 这将提高用户体验 xff0c 特别是在移动领域 xff0c 这是搜索引擎优化的一个胜利 x