Vue 3.0中Treeshaking

作者: 抽疯的稻草绳 | 来源:发表于2021-02-04 11:27 被阅读0次
图片

一、是什么

Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code elimination

简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码

如果把代码打包比作制作蛋糕,传统的方式是把鸡蛋(带壳)全部丢进去搅拌,然后放入烤箱,最后把(没有用的)蛋壳全部挑选并剔除出去

treeshaking则是一开始就把有用的蛋白蛋黄(import)放入搅拌,最后直接作出蛋糕

也就是说 ,tree shaking 其实是找出使用的代码

Vue2中,无论我们使用什么功能,它们最终都会出现在生产代码中。主要原因是Vue实例在项目中是单例的,捆绑程序无法检测到该对象的哪些属性在代码中被使用到

import Vue from 'vue' Vue.nextTick(() => {})

Vue3源码引入tree shaking特性,将全局 API 进行分块。如果你不使用其某些功能,它们将不会包含在你的基础包中

import { nextTick, observable } from 'vue'

nextTick(() => {})

二、如何做

Tree shaking是基于ES6模板语法(importexports),主要是借助ES6模块的静态编译思想,在编译时就能确定模块的依赖关系,以及输入和输出的变量

Tree shaking无非就是做了两件事:

  • 编译阶段利用ES6 Module判断哪些模块已经加载
  • 判断那些模块和变量未被使用或者引用,进而删除对应代码

下面就来举个例子:

通过脚手架vue-cli安装Vue2Vue3项目

vue create vue-demo

Vue2 项目

组件中使用data属性

    export default {
        data: () => ({
            count: 1,
        }),
    };
</script>

对项目进行打包,体积如下图

图片

为组件设置其他属性(comptedwatch

export default {
    data: () => ({
        question:"", 
        count: 1,
    }),
    computed: {
        double: function () {
            return this.count * 2;
        },
    },
    watch: {
        question: function (newQuestion, oldQuestion) {
            this.answer = 'xxxx'
        }
};

再一次打包,发现打包出来的体积并没有变化

图片

Vue3 项目

组件中简单使用

import { reactive, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const state = reactive({
      count: 1,
    });
    return {
      state,
    };
  },
});

将项目进行打包

图片

在组件中引入computedwatch

export default defineComponent({
  setup() {
    const state = reactive({
      count: 1,
    });
    const double = computed(() => {
      return state.count * 2;
    });

    watch(
      () => state.count,
      (count, preCount) => {
        console.log(count);
        console.log(preCount);
      }
    );
    return {
      state,
      double,
    };
  },
});

再次对项目进行打包,可以看到在引入computerwatch之后,项目整体体积变大了

图片

三、作用

通过Tree shakingVue3给我们带来的好处是:

  • 减少程序体积(更小)
  • 减少程序执行时间(更快)
  • 便于将来对程序架构进行优化(更友好)

相关文章

  • Vue 3.0中Treeshaking

    一、是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead c...

  • Vue 3.0中的Treeshaking特性?举例说明一下?

    1:目的:目的是Vue团队希望帮助开发者减小web应用体积2:什么是Treeshaking   TreeShaki...

  • treeShaking和sideEffects详解

    什么是treeShaking? treeShaking 是一个术语,通常用于描述移除 JavaScript 上下文...

  • ES6 相关 lesson 6 2021-5-11

    import 和 require的区别 treeshaking机制 ES Module 有tree shaking...

  • Webpack 之 treeShaking

    来源:easonyqgithub.com/easonyq/easonyq.github.io/blob/maste...

  • 12.TreeShaking

    1.treeShaking只支持静态import模块引入 commonJs动态模块require引入不支持 con...

  • TreeShaking是什么?

    Tree Shaking 值的就是当我引入一个模块的时候,我不引入这个模块的所有代码,我只引入我需要的代码,这就需...

  • treeshking

    用es6 静态引入 webpack.config.js package.json 剔除不需要treeShaking...

  • webpack实际使用

    treeshaking tree shaking 本质上用于移除js 上下文中未引用代码 使用 ES 2015模块...

  • webpack学习(二)高级用法

    webpack进阶 treeshaking 作用是在打包时只引入我们依赖的代码,只能作用于import这种静态引入...

网友评论

    本文标题:Vue 3.0中Treeshaking

    本文链接:https://www.haomeiwen.com/subject/ofdqtltx.html