前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我是如何用 Webpack 虐待代码尺寸的 (第三回合)

我是如何用 Webpack 虐待代码尺寸的 (第三回合)

作者头像
普通程序员
发布2019-10-23 11:58:24
4600
发布2019-10-23 11:58:24
举报
文章被收录于专栏:普通程序员普通程序员

上文说第二次重构...

解释一下, 原因是 im 这个项目希望可以做到平台化, 具体来说就是, 这个项目拆成两个部分, 一部分是基础功能, 比如正常的聊天, 头像, 表情等, 另一部分是定制化的, 比如不同的业务加入不同的卡片(定制样式和功能的消息, 并且可以自带操作), 不同的流程处理, 以及各种根据业务定制的功能

所以这一次做了一个项目拆分, 将一个项目拆成了两个项目, 一个是公共项目, 一个是业务项目。再通过一个壳桥接两个项目, 分别构建然后利用 window 全局变量进行沟通。

项目拆分 230K -> 392K(247K +145K)

由于是两个项目分别构建, 下面的分析图会有两份

公共项目

业务项目

重构说明

主要拆分了公共项目和业务项目, 并且新增了vConsole, Raven 等调试和查错工具, 以及部分功能的新增。

分析

经过项目拆分后可以很明显发现很多公共库出现了两份, 导致整个项目尺寸增大

vConsole 被误打入到代码里

联合编译392K(247K + 145K) ->292K

修改编译方式, 合并到同一个项目, 并且拆分chunk, 去掉生产库中的 vconsole

分析

mint-ui 占用过多, 但项目中只用了一个 toast

图片占用过大影响了首屏展示速度

业务增长292K -> 319K

随着业务增长, 又增加了30K+ ...

增加了runtimeChunk, 为了固定chunk 的 hash, 减少线上更新带来的加载消耗, 具体不多少, 关于runtimeChunk 的说明就让更专业的人来吧~~

话说回来 , 问题依然是之前的问题

页面前置代码到达300K+对于移动端来讲已经岌岌可危了, 还是动手精简吧

inline-manifest-webpack-plugin manifest 很小, 没有必要单独请求阻塞后面 js 的加载, 直接打入到html 中。

去掉mint-ui 319K -> 279K

mint-ui 可以通过 babel 插件实现按需引入, 但是由于 ui 更新, 重新做了toast, 不需要mint-ui 了

imagemin-webpack 279K -> 244k

引入 imagemin 压缩图片, 并且使用有损压缩的算法

压缩后肉眼在手机上查看几乎和原图一样

好了, 目前看来这个项目比较明显的优化点已经不多了, 细致的优化还有protobuf 改用 light 版, 拆分异步模块以加快首屏加载速度, 以及 pwa 等

这些就慢慢优化吧

总结一下

目前用到的优化方法

  • uglify 压缩
  • lodash 按需引入
  • 升级webpack 4
  • imagemin
  • manifest-inline
  • runtimeChunk
  • 去掉不需要的库
  • 减少公共库重复
  • 精简代码

总之, "没有银弹",需要根据实际项目针对分析, 才能找到可优化的点

这里只是抛砖引玉记录了这个项目的优化过程, 希望对各位前端同学有些帮助

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 普通程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档