uni微信小程序优化,几行代码就能省100kb的主包空间?
不是标题党,我们公司的项目确确实实是省下了100kb的主包空间,而且还是在没有牺牲任何的性能和业务的前提下实现的。
但是100kb是根据项目大小,所以你用这个插件可能省下超过100kb或者更少。
直接上代码看效果
一个名为fixMiniCssPlugin的插件,在vue.config.js使用它
class fixMiniCssPlugin {
constructor() {}
apply(compiler) {
compiler.hooks.thisCompilation.tap('remo', compilation => {
const {
mainTemplate
} = compilation;
mainTemplate.hooks.localVars.intercept({
register: (tapInfo) => {
if (tapInfo.name === 'mini-css-extract-plugin') {
tapInfo.fn = function (params) {};
}
return tapInfo;
}
});
mainTemplate.hooks.requireEnsure.intercept({
register: (tapInfo) => {
if (tapInfo.name === 'mini-css-extract-plugin') {
tapInfo.fn = function (params) {};
}
return tapInfo;
}
});
});
}
}
module.exports = fixMiniCssPlugin;
vue.config.js直接引用这个插件就可以打包看看项目的主包节省了多少kb
var minicss = require('./src/plugins/fix-mini-css-plugin');
module.exports = {
chainWebpack: config => {
config
.plugin('minicss')
.use(minicss)
},
}
打包如果确实省下了不少的主包空间,你可能还有一些疑问。
是什么原理能省下这么大的空间?
这个插件安不安全,uni官方都没有省下的空间,用这个插件会不会有什么隐藏的问题?
插件实现原理
插件节省的空间来源于dist\build\mp-weixin\common\runtime.js文件,这个文件是webpack运行时使用的文件。
为什么项目里的runtime文件会比uni新建的项目模板里的大很多?看了之后发现是mini-css-extract-plugin往里面插入了大量的组件路径。
不管是主包的还是分包的组件只要写了样式代码都会加入到runtime,所以项目里的组件越多,组件路径越长,runtime越大。
插件安全性
runtime里大量的组件路径到底能不能删?
我通过了以下几点来确认是可以删除的。
1 先在runtime里使用路径的地方打断点,看断点是否生效,如果生效了那就没必要写这个文章了。。。
2 把插入路径的mini-css-extract-plugin这个插件的代码读一遍,这个需要对webpack有一定的了解,
大概的原理是uni把我们平时写的同步import利用ast改写成为异步import,作用是为了让页面和组件不会同时打包成一个文件,
但是也导致了一些副作用,比如说mini-css-extract-plugin这个插件有针对异步css做处理的,所以就把路径加入到了runtime中。
3 把runtime里使用路径的代码读一下,也就是mini-css-extract-plugin插件如何处理异步css的,跟处理异步js是一样的方法,
网上有很多文章我就不扩展了,关键字有document.createElement,看到这里基本就可以确定这段是没用的了,因为微信小程序里
是没用document的,它的加载方式跟网页不一样是分包加载的,所以断点才没进去。
更好的方案
知道了路径可以删除,如何更简单安全的删除我做了一些研究,最后得出的结论就是这个插件方案最好,不感兴趣可以不接着看了。
1 简单粗暴直接利用vue-cli的css.extract配置把mini-css-extract-plugin这个插件关了就好,
结果是uni利用了vue-cli的插件强制把mini-css-extract-plugin打开
2 不信邪,我也写了个vue-cli的插件强制把css.extract配置关闭,结果是确实关闭了mini-css-extract-plugin插件,
但是导致微信的wxss没有了(后面才知道uni是利用这个插件生成wxss),看了uni强制打开的配置是有原因的。。。
3 注释mini-css-extract-plugin的相关源码,自己一个人开发倒是可以,但是团队开发确实不太建议。
uni微信小程序优化,几行代码就能省100kb的主包空间?的更多相关文章
- uni微信小程序优化,多个分包在用的公共代码该放在哪?
公共的代码包括公用的vue组件和js代码,从维护性的角度来说应该放到主包才对, 但是主包有大小限制,如果把2个分包都在用的代码放到主包里面那2M很快就满了. 所以该放在哪?我的方案是从维护的角度放在主 ...
- uni微信小程序优化,打包后的import vue路径是可删除的
这次的优化我公司项目主包只减小了32kb,但是减小的不仅仅是主包,所有分包均在没有改动任何业务代码的情况下完成了压缩空间的优化. 主包分包压缩空间的优化都要视项目而定,32kb只是我公司的小程序项目. ...
- 微信小程序优化
setData setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口.在介绍常见的错误用法前,先简单介绍一下 setData 背后的工作原理. 工作原理 小程序的视图层目前使用 ...
- 微信小程序「官方示例代码」浅析【上】
从某个微信群里,拿到了这个IDE的下载地址,然后就有了这个: 根本登不上去,怎么办,怎么办呢? 看代码啊... 反正我又没有保密协议,解压缩一看NodeWebkit + React: 好啦 ,逛逛呗, ...
- 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法
最近在学习微信小程序时遇到了个问题:官方的背景音乐的api实例代码中的音乐src不管用(可能有期限,后面的方法获取的src同样可能有期限),因此本人只能自己去寻找办法获取src,现将方法记录在下面.( ...
- 微信小程序模板消息后端代码
利用spring 事件发送模板消息 1.定义事件 import com.ruoyi.project.salerauth.domain.TemplateMessage; import org.sprin ...
- 微信小程序开发——上传代码片段到git仓库
微信开发者工具除了自带的git版本管理(本地服务)之外,还可以推送到在线git仓库中去,这样别人也可以通过git来拉取你的代码片段或小程序. 一.1.登录git 一.2.点击创建项目 一.3.填写项 ...
- 微信小程序上传图片(附后端代码)
几乎每个程序都需要用到图片. 在小程序中我们可以通过image组件显示图片. 当然小程序也是可以上传图片的,微信小程序文档也写的很清楚. 上传图片 首先选择图片 通过wx.chooseImage(OB ...
- 微信小程序 实现多行文字 超出部分省略号显示
在开发小程序: 澳买 的 时候 遇到一个棘手的问题: 当搜索澳洲产品,获取产品列表的时候,有时候产品的名称翻译成中文特别长 我们不能全部在有限的列表里面把产品名都显示出来,这样格式不好控制,显示 出来 ...
随机推荐
- 小试国产开源HTAP分布式NewSQL数据库TiDB-v5.3.0
概述 定义 TiDB官网 https://pingcap.com/zh/ 最新版本为5.3.0 TiDB GitHub源码 https://github.com/pingcap/tidb TiDB是由 ...
- vue安装使用v-chart时报错解决方案
npm i v-charts echarts -S 1.在main.js中使用报以下错 liquidFill echarts/lib/visual/dataColor 找不到 出现此原因是因为版本问题 ...
- Window/Linux下Mysql的安装步骤
Windows下Mysql安装教程 首先讲一下Windows环境下安装Mysql,我使用的安装包版本是mysql-8.0.26-winx64 下载地址:MySQL下载 1.点击上面的下载地址得到zip ...
- 最详细的git使用教程
git的安装可以参考我的博客:https://www.cnblogs.com/shanfeng1000/p/10969116.html 一.工作流程 Git 工作流程一般是: 克隆 Git 资源作为工 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Linux查看进程启动时间和运行多长时间
Linux 查看进程启动时间和运行多长时间 启动时间 ps -eo lstart 运行多长时间 ps -eo etime -bash-4.1$ ps -eo pid,lstart,etime | gr ...
- 拓展 Array 方法
为 Array 对象扩展了一个迭代器之后,就可以利用这个法代器进一步拓展 Array 的方法,使其能够完成更多的实用功能. Array.prototype.each = function( f ) { ...
- IntelliJ IDEA最新破解方法
IntelliJ IDEA最新破解方法 首先说下,本人使用idea版本是2021.2.3. 一.下载IDEA(推荐从官网下载) 官网地址:https://www.jetbrains.com/idea/ ...
- python客户端和Appium服务端联调出现的问题解决办法
按照安装文档搭建完移动端自动化测试环境,包括:SDK.JDK.Node.js.Appium及客户端后,appium-doctor可以成功的检测到各配套版本.如下图: 可是,运行from appium ...
- java基础04-数据类型扩展及面试题
java基础04-数据类型扩展及面试题讲解 public class demo02 { public static void main(String[] args){ // 一.整数拓展: 进制 二进 ...