webpack代码构建-VueJS 和 Webpack 代码拆分的三种形式

2023-08-29 0 7,785 百度已收录

代码分割是提高单页应用程序加载率的好方法。 用户不必等到所有代码加载一次即可快速查看页面并与之交互。 这尤其会改善中国联通这边的用户体验,也能得到很好的SEO,因为Google会降低加载缓慢的网站的权重。

上周我写了一篇关于如何使用Webpack分离Vue.js应用程序代码的文章(注:比较简单,不需要梯子)。 简而言之,单个文件组件中包含的所有内容都可以轻松分离。 由于 Webpack 可以在导出模块时创建分离点,因此 Vue 可以轻松愉快地异步读取组件

我相信,让代码分离跑起来并不难,难的是理解何时何地使用它。 甚至可以说,在设计你的应用程序时,你需要一个架构思想来分离代码。

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

注:原文发表于

1. 按页

页面拆分是显而易见的,这个简单的计数器示例中有三个页面:

一旦我们确认每个页面都对应了自己的单页面组件,例如:Home.vue、About.vue、Contact.vue等,那么我们就可以利用Webpack的动态导入方式将它们分别分离成独立的生成文件一。 当用户访问不同的页面时,Webpack会异步读取所需的页面文件。

如果您使用 vue-router,这更容易实现,因为您的页面已经是一个单独的组件。

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.js的打包文件,里面包含了所有异步加载的公共代码和其他文件逻辑,无论用户访问什么路由都需要加载它。

webpack代码构建-VueJS 和 Webpack 代码拆分的三种形式

例如,现在我通过地址读取“联系方式”页面。 当我切换到ChromeNetwork选项卡时,我会发现以下文件已经加载:

注意其中的build_main.js启动器是index,这意味着index.html需要脚本,这正是我们想要的。 而build_1.js的启动器是bootstrap_a877...这是Webpack负责异步读取文件的脚本。 当使用Webpack的动态导入方式时,会手动生成这个脚本。 重点是 build_1.js 不会抑制初始页面加载。 2. 彩页下

“折叠”下方是页面最初加载时在窗口中不可见的页面部分。 由于用户在下拉之前通常会花一两秒钟的时间阅读“文件夹”上的内容,因此可以异步读取该内容,特别是当他们第一次访问该网站时。

在此示例中webpack代码构建,我假设“文件夹”的“折叠线”位于标题下方webpack代码构建,导航栏和标题将在页面开头加载,下面的所有内容将在前面加载。 现在创建一个名为 BelowFold 的组件并相应地进行一些代表性标记:

首页.vue:


  

Jumbotron heading

...
const BelowFold = () => import( /* webpackChunkName: "below-fold" */ './BelowFold.vue' ); export default { ... components: { BelowFold } }

下面折叠.vue:


  

Subheading

Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

...
...

我们发现打包后,下面的fold块会有独立的文件:

注意:下折叠块是如此之小(1.36kB),以至于似乎不值得将其分开。 这只是因为这是一个内容很少的演示。 在真实的应用中,页面上的大量内容都会位于“文件夹”中,这些内容可能是包括CSS或JS文件在内的大量子组件。

3.条件内容

代码分离的另一个不错的选择是有条件地显示内容。 如模态窗口、选项卡、下拉菜单等。

单击“今天登录”按钮后,以下应用程序将出现一个模式窗口:

像往常一样,我们看一下这个单文件组件的代码:

首页.vue:


  
...
const BelowFold = () => import( /* webpackChunkName: "below-fold" */ './BelowFold.vue' ); const HomeModal = () => import( /* webpackChunkName: "modal" */ './HomeModal.vue' ); export default { data() { return { show: false } }, components: { HomeModal, BelowFold } }

HomeModal.vue:


    ...


  import Modal from 'vue-strap/src/Modal.vue';
  export default {
    props: ['show'],
    components: {
        Modal
    }
  }

请注意,我已经将 v-if 放置在模态中。 布尔值 show 控制模态的开/关状态,并且它还有条件地渲染模态组件。 由于页面将其读取为 false,因此仅当模式打开时才会加载代码。

很酷不是吗? 如果用户没有打开模式,他们将永远不会下载此代码。 只是一些小的用户体验缺点:用户必须等到按下按钮才能加载代码。

重新生成后,会有如下输出信息:

另一个~5kB 为什么我们应该尽早加载它。推理

这是构建应用程序时代码分离的三个想法。 相信在你的想象力的帮助下你会找到其他的方法。

点击获取最新的Vue.js文章、教程和热门项目(其实已经404了)

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 webpack webpack代码构建-VueJS 和 Webpack 代码拆分的三种形式 https://www.wkzy.net/game/179855.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务