前端面试练习24.3.5

这篇具有很好参考价值的文章主要介绍了前端面试练习24.3.5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

webpack相关

项目使用webpack流程

  1. 进入一个初始化好的vue项目
  2. 下载安装webpack相关依赖包/插件
    1. npm install --save-dev webpack webpack-cli webpack-dev-server
    2. 安装一些相关的loader,比如vue-loader,babel-loader,css-loader等
  3. 创建webpack.config.js文件,进行相关配置
  4. 文件内容如下
const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
  mode: 'development', // 设置为开发模式
  entry: './src/main.js', // 入口文件
  output: {
    path: path.resolve(__dirname, 'dist'), // 输出目录
    filename: 'bundle.js', // 输出文件名
    publicPath: '/dist/' // 公共路径
  },
  module: {
    rules: [
      {
        test: /\.vue$/, // 处理.vue文件
        loader: 'vue-loader'
      },
      {
        test: /\.js$/, // 处理.js文件
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader'
        }
      },
      {
        test: /\.css$/, // 处理.css文件
        use: ['vue-style-loader', 'css-loader']
      },
      {
        test: /\.(png|jpe?g|gif)$/i, // 处理图片文件
        use: [
          {
            loader: 'file-loader',
            options: {
              outputPath: 'images' // 输出目录
            }
          }
        ]
      }
    ]
  },
  resolve: {
    extensions: ['.js', '.vue', '.json'], // 解析文件扩展名
    alias: {
      'vue$': 'vue/dist/vue.esm.js', // 指定Vue版本
      '@': path.resolve(__dirname, 'src') // 设置@符号指向src目录
    }
  },
  plugins: [
    new VueLoaderPlugin() // Vue Loader插件
  ],
  devServer: {
    contentBase: path.resolve(__dirname, 'public'), // 设置服务器根目录
    publicPath: '/dist/', // 公共路径
    port: 8080, // 端口号
    open: true // 自动打开浏览器
  }
};

1.webpack的构建流程

  1. 初始化参数:从配置⽂件和 Shell 语句中读取与合并参数,得出最终的参数;
  2. 开始编译:⽤上⼀步得到的参数初始化 Compiler 对象,加载所有配置的插件,执⾏对象的 run ⽅法开始执⾏编译;
  3. 确定⼊⼝:根据配置中的 entry 找出所有的⼊⼝⽂件;
  4. 编译模块:从⼊⼝⽂件出发,调⽤所有配置的 Loader 对模块进⾏翻译,再找出该模块依赖的模块,再递归本步骤直到所有⼊⼝依赖的⽂件都经过了本步骤的处理;
  5. 完成模块编译:在经过第4步使⽤ Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系;
  6. 输出资源:根据⼊⼝和模块之间的依赖关系,组装成⼀个个包含多个模块的 Chunk,再把每个 Chunk 转换成⼀个单独的⽂件加⼊到输出列表,这步是可以修改输出内容的最后机会;
  7. 输出完成:在确定好输出内容后,根据配置确定输出的路径和⽂件名,把⽂件内容写⼊到⽂件系统。

2.webpack的优势

webpack适⽤于⼤型复杂的前端站点构建:

webpack有强⼤的loader和插件⽣态,打包后的⽂件实际上就是⼀个⽴即执⾏函数,这个⽴即执⾏函数接收⼀个参数,这个参数是模块对象,键为各个模块的路径,值为模块内容。⽴即执⾏函数内部则处理模块之间的引⽤,执⾏模块等,这种情况更适合⽂件依赖复杂的应⽤开发。

3.webpack的热更新是怎么做的

Webpack的热更新(Hot Module Replacement,HMR)是一项功能,它允许在不刷新整个页面的情况下替换、添加或删除模块。这使得开发者可以在保持应用程序状态的同时进行快速的开发和调试。

  1. 运行时更新模块

    • 当Webpack监听到源代码发生变化时,它会在后台重新编译修改过的模块,但并不会重新加载整个页面。
    • 更新的模块以及其依赖项会被标记为"热"(hot)。
  2. 模块热替换(Hot Module Replacement)

    • 当新的模块编译完成后,Webpack会使用WebSocket或者XHR等方式通知在运行时的应用程序。
    • 应用程序会接收到这些更新,并通过一种叫做"热更新中间件"的工具来处理这些更新。
  3. 应用程序响应更新

    • 应用程序会根据更新的类型(替换、添加或删除模块)来执行相应的操作。
    • 替换模块时,应用程序会尽可能保留当前模块的状态,例如组件的状态或者页面的滚动位置。
    • 如果一个模块无法热更新,那么整个页面就会被重新加载。
  4. 完成热更新

    • 一旦应用程序完成更新,它会发送一个消息给Webpack,告诉Webpack热更新已经完成。
    • 在完成更新之后,Webpack会重新编译其他模块,以确保它们与最新的代码保持同步。

4.webpack的性能优化是怎么做的

⽤webpack优化前端性能是指优化webpack的输出结果,让打包的最终结果在浏览器运⾏快速⾼效。文章来源地址https://www.toymoban.com/news/detail-837943.html

  • 压缩代码:删除多余的代码、注释、简化代码的写法等等⽅式。可以利⽤webpack的 UglifyJsPlugin 和 ParallelUglifyPlugin 来压缩JS⽂件, 利⽤ cssnano (css-loader?minimize)来压缩css
  • 利⽤CDN加速: 在构建过程中,将引⽤的静态资源路径修改为CDN上对应的路径。可以利⽤webpack对于 output 参数和各loader的 publicPath 参数来修改资源路径
  • Tree Shaking: 将代码中永远不会⾛到的⽚段删除掉。可以通过在启动webpack时追加参数 --optimize-minimize 来实现
  • Code Splitting: 将代码按路由维度或者组件分块(chunk),这样做到按需加载,同时可以充分利⽤浏览器缓存
  • 提取公共第三⽅库: SplitChunksPlugin插件来进⾏公共模块抽取,利⽤浏览器缓存可以⻓期缓存这些⽆需频繁变动的公共代码

5.webpack treeShaking机制的原理

  • treeShaking也叫摇树优化,是一种通过移除多于代码,来优化打包体积的,生产环境默认开启。
  • 可以在代码不运行的状态下,分析出不需要的代码;
  • 利用es6模块的规范
    • ES6 Module引入进行静态分析,故而编译的时候正确判断到底加载了那些模块
    • 静态分析程序流,判断那些模块和变量未被使用或者引用,进而删除对应代码

6.一些常见Loader

  • file-loader:把⽂件输出到⼀个⽂件夹中,在代码中通过相对 URL 去引⽤输出的⽂件
  • url-loader:和 file-loader 类似,但是能在⽂件很⼩的情况下以 base64 的⽅式把⽂件内容注⼊到代码中去
  • source-map-loader:加载额外的 Source Map ⽂件,以⽅便断点调试
  • image-loader:加载并且压缩图⽚⽂件
  • babel-loader:把 ES6 转换成 ES5
  • css-loader:加载 CSS,⽀持模块化、压缩、⽂件导⼊等特性
  • style-loader:把 CSS 代码注⼊到 JavaScript 中,通过 DOM 操作去加载 CSS。
  • eslint-loader:通过 ESLint 检查 JavaScript 代码

到了这里,关于前端面试练习24.3.5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【职业人生】如何有效的在职场当中避免工作失误和提高个人发展

         《左传·宣公二年》:“人谁无过,过而能改,善莫大焉。”古往今来,多少人犯过错误。强大如“智绝”的诸葛孔明,也有街亭之失。职场人更是难免会在工作中出现失误。     在职场生涯当中避免不了在工作当中带来的失误,在这过程当中,我们应当要学会怎么去

    2024年02月08日
    浏览(43)
  • [office] excel成绩表格数据排名次的教程 #职场发展#知识分享#媒体

    excel成绩表格数据排名次的教程 Excel 中经常需要使用到 排名 次的技巧,成绩表格数据具体该如何排名呢?接下来是小编为大家带来的excel成绩表格数据排名次的教程,供大家参考。 步骤1:不管在学校还是各个统计领域,排名应用随处可见,如果排序会打乱原有次序,那么好多

    2024年02月21日
    浏览(39)
  • 突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》

    就业形势堪忧,什么最有保障?考个“国家级”证书傍身吧! 工信部教考中心作为中国领先的行业技能认证机构,其颁发的认证证书不仅代表了个人在信息技术领域的专业能力,更可以录入工业和信息化技术技能人才数据库,这是一个重要的信息资源平台,它可以帮助企业和

    2024年02月05日
    浏览(44)
  • [office] Excel中函数进行计算两个日期参数差值的方法 #职场发展#学习方法#媒体

    Excel中函数进行计算两个日期参数差值的方法 在excel使用中,如果想计算两个日期参数的差值,该用什么函数和如何使用呢?今天,小编就教大家在Excel中函数进行计算两个日期参数差值的方法。 Excel中函数进行计算两个日期参数差值的步骤 在excel中计算两个日期参数的差值,

    2024年02月20日
    浏览(47)
  • 专项练习24

    目录 一、选择题     1、JavaScript 中的数字在计算机内存中占多少个Byte?     2、请问以下JS代码会输出什么 二、编程题     1、以数字的形式返回数字参数向下取整的结果 1、JavaScript 中的数字在计算机内存中占多少个Byte? A、2 Byte B、4Byte C、8Byte D、16Byte 正确答案:C   

    2024年02月13日
    浏览(28)
  • Python基础合集 练习24 (程序调试)

    def num_ca(): book = int(input(\\\'请输入图书数量: \\\')) student = int(input(\\\'请输入学生数量: \\\')) assert book = student, ‘图书数量太少不能均分。’ if book 0 or student 0: print(‘不能输入小于0的数,请输入大于0的数’) result = book // student remainder_book = book - result * student if remainder_book = 0: print(book, ‘本

    2024年02月03日
    浏览(39)
  • 程序员在职场中如何让自己的技能快速提高,WEB前端开发工程师如何让自己快速成为团队的核心开发人员?

    今天聊一聊 就是我们在工作中就实际的 工资里面 写代码的过程中怎么提高自己的 一些技能 以及我们怎么样快速成为 就是一个团队的核心开发人 包括我以前 其实我也是一个小迷弟 后来就是慢慢慢慢 包括经历一些项目什么东西 其实现在已经慢慢成为核心开发人员 就是分享

    2023年04月16日
    浏览(62)
  • java面试题(24)

    1、对称性: 如果 x.equals(y) 返回是“true”,那么 y.equals(x) 也应该返回是 “true”。 2、自反性: x.equals(x) 必须返回是“true”。 3、传递性: 如果 x.equalsl(y) 返回是“true”,而且 y.equals(z) 返回是“true”,那么 z.equals(x) 也应该返回是“true”。 4、一致性: 如

    2024年02月13日
    浏览(47)
  • 力扣[24、19、面试题02.07、142]

    递归:自己的 两两交换两个节点,也就是说是成对的交换!每次交换两个,下一次交换的时候,就要从第三个开始。 然后如上图可以看出来:我们可以将链表分为三个部分,已经交换的部分,和接下来准备交换的两个节点! 那么不难想到递归,递归处理两个交换的节点,每

    2024年02月15日
    浏览(39)
  • 【LeetCode: 面试题 17.24. 最大子矩阵 | 动态规划 】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月06日
    浏览(72)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包