「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?

这篇具有很好参考价值的文章主要介绍了「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?,Vue3面试题系列,vue.js,前端,javascript

一、是什么

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属性

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

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

「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?,Vue3面试题系列,vue.js,前端,javascript

为组件设置其他属性(comptedwatch

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

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

「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?,Vue3面试题系列,vue.js,前端,javascript

Vue3 项目

组件中简单使用

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

将项目进行打包

「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?,Vue3面试题系列,vue.js,前端,javascript

在组件中引入computedwatch

import { reactive, defineComponent, computed, watch } from "vue";
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之后,项目整体体积变大了

「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?,Vue3面试题系列,vue.js,前端,javascript

三、作用

通过Tree shakingVue3给我们带来的好处是:文章来源地址https://www.toymoban.com/news/detail-789309.html

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

参考文献

  • https://segmentfault.com/a/1190000038962700

到了这里,关于「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue 3.0中的Treeshaking?

    Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code elimination 简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码 如果把代码打包比作制作蛋糕,传统的方式是把鸡蛋(带壳)全部丢进去搅拌,然后放入烤箱,最后把(没有

    2024年02月13日
    浏览(80)
  • Vue 3.0 学习 新特性

    1. 简介 Vue.js 作者兼核心开发者 尤雨溪 宣布 Vue 3.0 进入 Beta 阶段。 已合并所有计划内的 RFC 已实现所有被合并的 RFC Vue CLI 现在通过 vue-cli-plugin-vue-next 提供了实验性支持 2. 新特性 重点关注: 更快更省 Object.defineProperty —— Proxy 重构 Virtual DOM 完全的TypeScript 团队开发更轻松

    2024年02月07日
    浏览(35)
  • 前端经典面试题 | 吊打面试官系列 之 Vue2和Vue3的区别

    🖥️ 前端经典面试题 吊打面试官 专栏:Vue2和Vue3的区别 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、回答点 二、深入回答 监测机制

    2024年01月16日
    浏览(46)
  • Vue 3.0 事件处理 【Vue3 从零开始】

    我们可以使用  v-on  指令 (通常缩写为  @  符号) 来监听 DOM 事件,并在触发事件时执行一些 JavaScript。用法为  v-on:click=\\\"methodName\\\"  或使用快捷方式  @click=\\\"methodName\\\" 例如: div id=\\\"basic-event\\\" button @click=\\\"counter += 1\\\"Add 1/button pThe button above has been clicked {{ counter }} times./p /div Vue.cre

    2024年02月04日
    浏览(41)
  • uniapp + vue3.0 + uview-plus3.0搭建项目

    创建 利用工具导入插件  说明已经导入 1、先安装插件 uview-plus依赖SCSS,需要先下载sass 和 sass-loader npm install sass sass-loader@10 -D  依次安装以下插件,如果有请忽略 npm install dayjs npm install clipboard 2、配置文件 main.js import uView from \\\'@/uni_modules/uview-plus\\\'  app.use(uView) App.vue @import \\\"

    2024年02月15日
    浏览(42)
  • Vue3-01-Vue3 新特性及环境搭建

    Vue.js是一种被广泛使用的JavaScript框架,用于构建用户界面和单页面应用。Vue3是其最新的主要版本,引入了许多新特性并做了一些改进。 Vue2 和 Vue3 在数据响应性系统的实现上采用了不同的方式:Vue2 使用 Object.defineProperty,而 Vue3 则选择了 Proxy。 (1) Vue2:Object.defineProperty 在

    2024年02月07日
    浏览(48)
  • 04 - Vue3语法系统进阶 - 全面掌握Vue3特性

    Vue是基于MVVM设计模式进行实现的,视图与数据不直接进行通信,但是Vue并没有完全遵循这一原则,而是允许开发者直接进行原生DOM操作。 在Vue中可通过 ref 属性来完成这一行为,通过给标签添加 ref 属性,然后再通过 vm.$refs 来获取DOM 把 ref 属性添加给组件,可以获取到组件的

    2024年02月12日
    浏览(40)
  • vue3新特性 Ⅱ

    setup()中使用生命周期函数 在生命周期钩子前加上on来访问 并且需要保持小驼峰的命名方式, setup 中的生命周期函数 不包括 beforeCreate 和 created 。 onMounted:比以前的mounted有优势,以前生命周期函数只能存在一个,现在可以存在多个,可以根据业务需要拆分。    Provide

    2024年02月03日
    浏览(43)
  • Vue3的新特性

    Vue 3的新特性包括: Composition API:一种新的API风格,可将有关组件功能的代码逻辑封装在单独的函数中,从而更好地管理和重用代码。 Teleport:可以让组件在DOM层次结构中的任何位置渲染。 Suspense: 一种新的异步渲染模式,可以优化应用程序的性能。 更快的渲染速度:Vue

    2024年02月05日
    浏览(46)
  • 【Vue3 知识第二讲】Vue3新特性、vue-devtools 调试工具、脚手架搭建

    1.1 重写双向数据绑定 1.1.1 Vue2 基于Object.defineProperty() 实现 数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus 权限系统-商城 个人博客地址 把 Vue 中的核心方法 defineReactive 做一些简化如下: Vue通过defineReactive方法实现对需要观察的对象的每个属性进行监控。dep对象就相当于一

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包