【前端工程化面试题】使用 webpack 来优化前端性能/ webpack的功能

这个题目实际上就是来回答 webpack 是干啥的,你对webpack的理解,都是一个问题。

(1)对 webpack 的理解

webpack 为啥提出 + webpack 是啥 + webpack 的主要功能

前端开发通常是基于模块化的,为了提高开发效率,webpack 是一个基于模块的构建工具,是一个用于 js 应用程序的静态模块打包工具。

Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具,它能够将多个 JavaScript 文件打包成一个或多个文件,以及将各种资源(如样式表、图片等)转换成代码。通过合理配置,可以借助 Webpack 来优化前端性能。以下是一些优化前端性能的常见方法:

静态模块是指开发阶段,可以被 webpack 引用的资源

(2)webpack 的主要功能有

  1. 模块打包:webpack 将项目中的各种模块、文件,以及它们之间的依赖关系打包成静态资源文件,供浏览器使用
  2. 加载器【loader】:webpack 支持使用加载器来处理非js文件,如将es6/7代码转换成es5【babel-loader】、处理css 前缀【postcss-loader】等
  3. 插件系统【plugin】:webpack 有丰富的插件系统,可以实现代码压缩、文件合并、代码分割、资源优化等功能。
  4. 开发服务器:webpack 提供开发服务器,在开发过程中提供实时的热更新功能
  5. 自动化构建:可以通过配置文件来定义构建任务,实现自动化构建。
  6. 支持多种模块化规范:cjs、amd、es6
  7. 代码优化:使用插件可以实现代码压缩、去除无用代码、提取公共代码等

(3)webpack 优化性能

重点,webpack 的这些优化

  1. 都写在配置文件的 optimization 属性中
  2. 都使用插件 plugin 进行优化,处理压缩图片使用的是loader
  1. 代码拆分:webpack 支持将代码分成多个 bundle,使应用程序可以按需加载,或并行加载这些文件,提高页面加载速度,自动将重复的模块抽取到单独的块中
    1. 使用 【splitChunksPlugin】,该插件webpack 已经默认安装和集成,可以直接配置使用optimization.splitChunks.chunks :all
    2. 使用动态import:语法来指定需要拆分的模块,webpack会根据动态import的位置进行自动代码拆分,
      1. 动态 import 是一种在 JavaScript 中异步加载模块的语法,它可以让你在运行时动态地加载模块,而不是在编译时就静态地导入模块。这样可以实现按需加载,从而提高应用程序的性能和资源利用率。 
      2. import("./module").then(module => { // 使用模块 });
      3. 但是动态 import 不利于 tree-shaking
        1. 但是可以使用 魔法注释
          1. /* webpackIgnore: true */ 忽略模块的副作用,允许 tree-shaking
          2. */ webpackChunkName: "name" */**:指定动态 import 生成的 chunk 的名称
        2. babel/plugin-syntax-dynamic-import 插件可以帮助 Babel 处理动态 import 的语法,并且将其转换成适合 Tree-shaking 的形式。
    3. 按需加载路由,如果你使用了像 React Router、Vue Router 这样的路由库,你可以使用按需加载的路由配置来实现代码拆分。这样,每个路由对应的组件都可以被拆分成一个单独的块,从而实现按需加载。
    4. entry 配置多个入口虽然会实现根据入口单独打包bundle 文件,但是
      1. 如果多个入口之间存在共享的模块和库,这些共享的模块会被重复打包
      2. 缺乏动态加载的能力
  2. 内联 chunk
    1. 使用【inline-chunk-html-plugin】插件将一些 chunk 的模块内联到 html
  3. 懒加载:结合代码分割,可以将不同页面或组件的代码分割成独立的文件,按需加载,减少初始化加载时间,提升页面响应速度,webpack 如何实现懒加载。
  4. 代码压缩 :js/css/html 代码
    1. 【terser-webpack-plugin】 js 压缩丑化js
    2. 【css-minimizer-webpack-plugin】css,去除无用空格等
    3. 【html-webpack-plugin】html,配置minify 属性,实际会使用另一个插件html-minifier-terse
  5. 文件大小压缩:对文件大小进行压缩,减少 http 传输中的宽带损耗
    1. 图片压缩:使用【image-webpack-loader】注意这个是 loader
    2. 对js/css等压缩:使用【compression-webpack-plugin】
  6. Tree Shaking:  特性来剔除未使用的代码,减少打包后文件的大小
    1. js 的有两种方案
      1. usedExports:true,通过标记某些函数是否被使用,之后通过 terser /ˈtersər来进行优化【这个terser 就是上面上到的压缩js的插件terser-webpack-plugin】
      2. sideEffects: false,跳过整个模块/文件,直接查看该文件是否有副作用
    2. css Tree Shaking: 使用【purgecss-plugin-webpack】

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端工程化相关面试题大全及答案如下: 1. 什么是前端工程化前端工程化是指利用软件工程的技术和方法,对前端开发中的流程、工具、框架、规范等方面进行优化和改进,提高前端开发效率、质量和可维护性的过程。 2. 前端开发中常用的自动化构建工具有哪些?它们有什么区别? 常用的自动化构建工具有Grunt、Gulp、Webpack和Rollup等。它们的主要区别在于构建方式、插件生态和适用场景等方面。Grunt和Gulp主要基于任务(Task)进行构建Webpack和Rollup则更关注模块化打包和代码分割等方面。 3. 什么是模块化开发?CommonJS和ES6模块化有什么区别? 模块化开发是指将一个复杂的系统或程序按功能或特性拆分为若干个相对独立的模块进行开发和维护。CommonJS是一种模块化规范,适用于后端Node.js开发,采用同步的方式加载模块。ES6模块化则是ES6标准中新增的模块化规范,支持异步加载和静态编译优化等特性。 4. 什么是Webpack?它的主要功能是什么? Webpack一个模块化打包工具,主要用于处理前端资源文件,如JS、CSS、图片等。它的主要功能包括模块化打包、代码分割、静态资源管理、构建优化等。 5. 什么是前端路由?它有哪些优缺点?常用的前端路由库有哪些? 前端路由是指通过改变浏览器URL地址,实现前端页面之间的跳转和切换的技术。它的优点包括减少页面刷新、提升用户体验、降低服务器压力等,缺点包括初始化较慢、SEO不友好等。常用的前端路由库包括Vue Router、React Router等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值