首页IT科技前端工程化的理解简书(web前端工程化合集)

前端工程化的理解简书(web前端工程化合集)

时间2025-05-02 12:51:09分类IT科技浏览3784
导读:这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助...

这里给大家分享我在网上总结出来的一些知识           ,希望对大家有所帮助

⾸先要知道server端和client端都做了处理⼯作:

第⼀步                  ,在 webpack watch 模式下      ,⽂件系统中某⼀个⽂件发⽣修改           ,webpack 监听到⽂件变化                 ,根据配置⽂

件对模块重新编译打包      ,并将打包后的代码通过简单的 JavaScript 对象保存在内存中            。

第⼆步是 webpack-dev-server webpack 之间的接⼝交互      ,⽽在这⼀步                 ,主要是 dev-server 的中间件 webpack- dev-middleware webpack 之间的交互            ,webpack-dev-middleware 调⽤ webpack 暴露的 API对代码变化进⾏监 控      ,并且告诉 webpack                 ,将代码打包到内存中                 。 第三步是 webpack-dev-server 对⽂件变化的⼀个监控            ,这⼀步不同于第⼀步,并不是监控代码变化重新打包      。当我们在配置⽂件中配置了devServer.watchContentBase true 的时候                 ,Server 会监听这些配置⽂件夹中静态⽂件的变化                  ,变化后会通知浏览器端对应⽤进⾏ live reload      。注意,这⼉是浏览器刷新           ,和 HMR 是两个概念                 。 第四步也是 webpack-dev-server 代码的⼯作                  ,该步骤主要是通过 sockjswebpack-dev-server 的依赖)在浏览器端和服务端之间建⽴⼀个 websocket ⻓连接      ,将 webpack 编译打包的各个阶段的状态信息告知浏览器端           ,同时也包括第三步中 Server 监听静态⽂件变化的信息           。浏览器端根据这些 socket 消息进⾏不同的操作      。当然服务端传递的最主要信息还是新模块的 hash 值                 ,后⾯的步骤根据这⼀ hash 值来进⾏模块热替换                  。 webpack-dev-server/client 端并不能够请求更新的代码      ,也不会执⾏热更模块操作      ,⽽把这些⼯作⼜交回给了webpack                 ,webpack/hot/dev-server 的⼯作就是根据 webpack-dev-server/client 传给它的信息以及 dev-server 的配置决定是刷新浏览器呢还是进⾏模块热更新           。当然如果仅仅是刷新浏览器            ,也就没有后⾯那些步骤了。 HotModuleReplacement.runtime 是客户端 HMR 的中枢      ,它接收到上⼀步传递给他的新模块的 hash 值                 ,它通过JsonpMainTemplate.runtime server 端发送 Ajax 请求            ,服务端返回⼀个 json,该 json 包含了所有要更新的模块的 hash 值                 ,获取到更新列表后                  ,该模块再次通过 jsonp 请求,获取到最新的模块代码                  。这就是上图中 7            、8                 、9 步骤                 。 ⽽第 10 步是决定 HMR 成功与否的关键步骤           ,在该步骤中                  ,HotModulePlugin 将会对新旧模块进⾏对⽐      ,决定是否更新模块           ,在决定更新模块后                 ,检查模块之间的依赖关系      ,更新模块的同时更新模块间的依赖引⽤。 最后⼀步      ,当 HMR 失败后                 ,回退到 live reload 操作            ,也就是进⾏浏览器刷新来获取最新打包代码            。

10. 如何⽤webpack来优化前端性能?

webpack优化前端性能是指优化webpack的输出结果      ,让打包的最终结果在浏览器运⾏快速⾼效                 。

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

11. 如何提⾼webpack的打包速度?

happypack: 利⽤进程并⾏编译loader,利⽤缓存来使得 rebuild 更快,遗憾的是作者表示已经不会继续开发此项⽬,类似的替代者是thread-loader 外部扩展(externals): 将不怎么需要更新的第三⽅库脱离webpack打包,不被打⼊bundle中                 ,从⽽减少打包时间                  ,⽐如jQueryscript标签引⼊ dll: 采⽤webpackDllPlugin DllReferencePlugin 引⼊dll,让⼀些基本不会改动的代码先打包成静态资源           ,避免反复编译浪费时间 利⽤缓存: webpack.cache                  、babel-loader.cacheDirectory           、 HappyPack.cache 都可以利⽤缓存提⾼rebuild效率缩⼩⽂件搜索范围: ⽐如babel-loader插件,如果你的⽂件仅存在于src,那么可以 include: path.resolve(__dirname,src) ,当然绝⼤多数情况下这种操作的提升有限                  ,除⾮不⼩⼼buildnode_modules⽂件

12. 如何提⾼webpack的构建速度?

多⼊⼝情况下      ,使⽤ CommonsChunkPlugin 来提取公共代码 通过 externals 配置来提取常⽤库 利⽤ DllPlugin DllReferencePlugin 预编译资源模块 通过 DllPlugin 来对那些我们引⽤但是绝对不会修改的npm包来进⾏预编译           ,再通过 DllReferencePlugin 将预编译的模块加载进来      。 使⽤ Happypack 实现多线程加速编译 使⽤ webpack-uglify-parallel 来提升 uglifyPlugin 的压缩速度      。 原理上 webpack-uglify-parallel 采⽤了多核并⾏压缩来提升压缩速度 使⽤ Tree-shaking Scope Hoisting 来剔除多余代码

13. 怎么配置单⻚应⽤?怎么配置多⻚应⽤?

单⻚应⽤可以理解为webpack的标准模式                 ,直接在 entry 中指定单⻚应⽤的⼊⼝即可      ,这⾥不再赘述多⻚应⽤的话      ,可以使⽤webpackAutoWebPlugin 来完成简单⾃动化的构建                 ,但是前提是项⽬的⽬录结构必须遵守他预设的规范                 。 多⻚应⽤中要注意的是:

每个⻚⾯都有公共的代码            ,可以将这些代码抽离出来      ,避免重复的加载           。⽐如                 ,每个⻚⾯都引⽤了同⼀套css样式表 随着业务的不断扩展            ,⻚⾯可能会不断的追加,所以⼀定要让⼊⼝的配置⾜够灵活                 ,避免每次添加新⻚⾯还需要修改构建配置

三      、其他

1. Babel的原理是什么?

babel 的转译过程也分为三个阶段                  ,这三步具体是:

解析 Parse: 将代码解析⽣成抽象语法树(AST),即词法分析与语法分析的过程; 转换 Transform: 对于 AST 进⾏变换⼀系列的操作           ,babel 接受得到 AST 并通过 babel-traverse 对其进⾏遍历                  ,在此过程中进⾏添加                  、更新及移除等操作; ⽣成 Generate: 将变换后的 AST 再转换为 JS 代码, 使⽤到的模块是 babel-generator      。

如果对您有所帮助      ,欢迎您点个关注           ,我会定时更新技术文档                 ,大家一起讨论学习      ,一起进步                  。

声明:本站所有文章      ,如无特殊说明或标注                 ,均为本站原创发布           。任何个人或组织            ,在未征得本站同意时      ,禁止复制           、盗用、采集                  、发布本站内容到任何网站                 、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益                 ,可联系我们进行处理                  。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
mac os下载更新出错(使用Mac App Store更新、下载软件时出现未知错误的解决方法) ios公测版多久更新一次(OS X Yosemite 公测版兑换码获取教程)