11.前端工程化

简介: Webpack是模块打包工具,支持ES6、code-splitting与全局分析,区别于Grunt/Gulp等构建工具。v4新增mode模式,优化打包策略,支持Tree-shaking、splitChunks提取公共代码,提升构建效率与性能。
  1. webpack3和webpack4的区别?
    1
    mode/–mode参数: 新增了mode/--mode参数来表示是开发还是生产(development/production); production 侧重于打包后的文件大小,development侧重于构建速度
    2
    移除loaders,必须使用rules(在3版本的时候loaders和rules 是共存的但是到4的时候只允许使用rules)
    3
    移除了CommonsChunkPlugin (提取公共代码),用optimization.splitChunks和optimization.runtimeChunk来代替
    4
    支持es6的方式导入JSON文件,并且可以过滤无用的代码
  2. 什么是webpack,和grunt和gulp有什么不同?
    1
    Webpack是一个模块打包器,他可以递归的打包项目中的所有模块,最终生成几个打包后的文件。
    2
    他和其他的工具最大的不同在于他支持code-splitting、模块化(AMD,ESM,CommonJs)、全局分析。
  3. 什么是bundle,什么是chunk,什么是module?
    1
    bundle是由webpack打包出来的文件
    2
    chunk是指webpack在进行模块的依赖分析的时候,代码分割出来的代码块
    3
    module是开发中的单个模块。
  4. 什么是Loader?什么是Plugin?
    1
    loader是使wenbpack拥有加载和解析非js文件的能力
    2
    plugin 可以扩展webpack的功能,使得webpack更加灵活。可以在构建的过程中通过webpack的api改变输出的结果
  5. Webpack的构建流程?
    1
    初始化参数,从配置文件和shell语句中读到的参数合并,得到最后的参数
    2
    开始编译:用合并得到的参数初始化complier对象,加载是所有配置的插件,执行run方法开始编译
    3
    确定入口,通过entry找到入口文件
    4
    编译模块,从入口文件出发,调用所有配置的loader对模块进行解析翻译,在找到该模块依赖的模块进行处理
    5
    完成模块编译,得到每个模块被翻译之后的最终的内容和依赖关系
    6
    输出资源,根据入口和模块之间的依赖关系,组装成一个个包含多个模块的chunk,在把每个chunk转换成一个单独的文件加载到输出列表
    7
    输出完成,确定输出的路径和文件名,把内容写到文件系统中
  6. 如何利用webpack来优化前端性能
    1
    提取公共代码。webpack4移除了CommonsChunkPlugin (提取公共代码),用optimization.splitChunks和optimization.runtimeChunk来代替
    2
    压缩代码。(development和production)
    3
    使用loader的时候,使用exclude排除node_modules中的文件
    4
    配置extractTextWebpackPlugin插件
    5
    使用TreeShaking插件:Tree-shaking 概念最早由Rollup.js 提出,后来在webpack2中被引入进来,但是这个这一特性能够被支持得益于ES6 modules的静态特性。ES6的模块声明相比于传统CommonJS的同步require有着本质区别。这种modules设计保证了依赖关系是提前确定的,使得静态分析成为了可能,与运行时无关。(除那些引用的但却没有使用的代码)
    Plain Text
    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 一、.babelrc 中添加
    "presets": [
    [
    "es2015", {
    "modules": false,
    }
    ],
    "stage-2"
    ],
    // 或者在babel loader中的options里面添加同样的代码, modules:false 表示的是不对ES6进行处理

// 二、使用uglifyjs-webpack-plugin
plugins: [
new UglifyJsPlugin(),
...
]
Copy
Note
想要代码配置tree-shaking,必须采用es6的模块语法,因为es6的模块采用的是静态分析,也就是从字面量对代码进行分析。之前的require是动态分析,必须代码执行到才知道引用的什么模块。

  1. 如何可以自动生成webpack配置?
    答案: webpack-cli /vue-cli /etc ...脚手架工具
  2. webpack-dev-server和http服务器如nginx有什么区别?
    1
    webpack-dev-server使用内存来存储webpack开发环境下的打包文件
    2
    并且可以使用模块热更新
    3
    他比传统的http服务对开发更加简单高效。
  3. 什么是模块热更新?
    答案:模块热更新是webpack的一个功能,他可以使得代码修改过后不用刷新浏览器就可以更新,是高级版的自动刷新浏览器。
  4. 什么是长缓存?在webpack中如何做到长缓存优化?
    答案:
    1
    浏览器在用户访问页面的时候,为了加快加载速度,会对用户访问的静态资源进行存储,但是每一次代码升级或是更新,都需要浏览器去下载新的代码,最方便和简单的更新方式就是引入新的文件名称。
    2
    在webpack中可以在output纵输出的文件指定chunkhash,并且分离经常更新的代码和框架代码。
    3
    通过NameModulesPlugin或是HashedModuleIdsPlugin使再次打包文件名不变。
  5. 什么是Tree-shaking?CSS可以Tree-shaking吗?
    答案:
    1
    Tree-shaking是指在打包中去除那些引入了,但是在代码中没有被用到的那些死代码。
    2
    在webpack中Tree-shaking是通过uglifySPlugin来Tree-shaking JS
    3
    Css需要使用Purify-CSS。
相关文章
|
7月前
|
存储 负载均衡 Java
第九章 SpringCloud框架
Nacos实现服务注册与发现,支持心跳检测、负载均衡及配置管理;Eureka功能类似但仅限注册中心。两者均支持AP模式集群,而Nacos提供更灵活的分级存储模型。OpenFeign结合LoadBalancer实现服务调用,Sentinel用于限流熔断,Gateway则通过路由断言与过滤器实现请求路由、鉴权、限流等网关功能。
157 0
|
存储 SQL 关系型数据库
MySQL 动态分区管理:自动化与优化实践
本文介绍了如何利用 MySQL 的存储过程与事件调度器实现动态分区管理,自动化应对数据增长,提升查询性能与数据管理效率,并详细解析了分区创建、冲突避免及实际应用中的关键注意事项。
504 0
|
7月前
|
NoSQL Java 数据库连接
第七章 SpringBoot框架
SpringBoot简化了Spring应用开发,核心功能包括:starter起步依赖简化配置、自动配置根据条件加载Bean、内嵌服务器支持jar包运行。通过@SpringBootApplication实现自动化配置,自定义starter可封装通用功能,配置优先级为:命令行参数 > 系统属性 > properties > yml/yaml文件。
377 0
|
7月前
|
机器学习/深度学习 存储 数据采集
高频面试题汇总
本文系统梳理大模型核心技术,涵盖Transformer自注意力机制、多头注意力、位置编码原理,详解LLaMA与GPT架构差异,解析LoRA、ZeRO优化策略,介绍FlashAttention内存优化,并提供显存与训练时间估算方法,覆盖训练、推理、部署全流程关键技术点。
1163 0
|
7月前
|
存储 人工智能 NoSQL
RAG技术
RAG(检索增强生成)通过结合外部知识库与大模型,提升回答准确性,缓解知识过时与幻觉问题。核心架构含检索器、生成器与向量数据库,支持密集、混合检索,常用FAISS、Pinecone等工具,广泛应用于问答系统与AI面试场景。(238字)
245 0
|
7月前
|
存储 机器学习/深度学习 编解码
预训练技巧
预训练是大模型能力的核心,涵盖混合精度、分布式训练等关键技术。混合精度通过FP16/BF16加速计算并节省显存;分布式训练采用数据、模型、流水线并行提升效率,结合All-Reduce等通信策略实现高效同步;DeepSpeed的ZeRO技术分区优化器状态、梯度与参数,显著降低显存占用;FlashAttention优化注意力机制,提升速度与内存效率;学习率策略如warmup与余弦退火助力稳定收敛。
523 0
|
7月前
|
机器学习/深度学习 算法 关系型数据库
强化学习
强化学习(RL)是一种通过智能体与环境交互来学习最优策略的机器学习方法,核心是最大化长期累积奖励。其关键概念包括状态、动作、奖励、策略与价值函数,依赖试错和延迟奖励机制。常用方法有基于值的Q-learning、基于策略的Policy Gradient,以及结合两者的Actor-Critic框架。PPO、DPO等算法在实际中广泛应用,尤其在RLHF中优化语言模型。该领域持续发展,追求高效、稳定与实用的决策智能。
605 0
|
7月前
|
机器学习/深度学习 存储 知识图谱
知识蒸馏
知识蒸馏是一种模型压缩技术,通过将大模型(教师)的知识迁移到小模型(学生)中,在降低计算成本的同时提升小模型性能。核心思想是让学生模仿教师的输出分布或中间特征。常用方法包括基于软标签的Hinton蒸馏(引入温度提升泛化信息)、特征蒸馏(对齐中间层表示)。按信息访问程度分为黑盒(仅输出)与白盒(含内部结构)。广泛用于加速推理与模型轻量化。
377 0
|
7月前
|
缓存 算法 C++
模型推理加速
大模型推理加速关键技术包括KV-Cache优化、连续批处理、投机解码与模型并行等,涵盖算法、系统与硬件协同优化。vLLM等框架通过PagedAttention提升效率,助力高并发、低延迟场景落地。
409 0
|
7月前
|
自然语言处理
主流大模型结构
本文系统梳理主流大模型架构:Encoder-Decoder(如T5)、Decoder-Only(如GPT)、Encoder-Only(如BERT)和Prefix-Decoder(如GLM),详解GPT、LLaMA及中文模型发展,对比参数、上下文与特性,助力理解架构差异与选型策略,涵盖面试核心要点。
580 0