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 ...
- 微信小程序 实现多行文字 超出部分省略号显示
在开发小程序: 澳买 的 时候 遇到一个棘手的问题: 当搜索澳洲产品,获取产品列表的时候,有时候产品的名称翻译成中文特别长 我们不能全部在有限的列表里面把产品名都显示出来,这样格式不好控制,显示 出来 ...
随机推荐
- D. Chloe and pleasant prizes
D. Chloe and pleasant prizes time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 1080 - Binary Simulation
1080 - Binary Simulation PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 64 ...
- 海康威视摄像机Java SDK拉流(二)开启关闭实时预览
本篇介绍海康威视摄像机通过SDK开启关闭实时预览接口 下篇介绍实时预览的回调函数及解码库 测试环境: 系统:Centos 7 SDK:设备网络SDK Linux64 实时预览模块流程: 图中虚线框部分 ...
- matplotlib 进阶之Legend guide
目录 matplotlib.pyplot.legend 方法1自动检测 方法2为现有的Artist添加 方3显示添加图例 控制图例的输入 为一类Artist设置图例 Legend 的位置 loc, b ...
- MD5,SHA1及SHA256等哈希加密方法实现:Java,C#,Golang,Python
哈希算法又称散列算法,它可以从任何数据中快速的创建一个凭证,而这个凭证很难被推倒出来,因为一丁点的变化会导致凭证的差别恨到,也就是说哈希算法具有不可逆性,因此它在密码数据校验方面用的很广,比如我们常用 ...
- CSS基础-3 文字知识
文字知识 一.浏览器文字默认大小为16px; 行高默认大小为18px; 行高 = 文字大小 + 文字上边距 + 文字下边距 或者是 行高 = 两条基线之间的距离 ...
- RPC框架下实现文件上传到linux服务器
一.前端使用element -ui 的upload组件 :data 表示额外传递的参数, :header 表示设置请求头参数,如,token等, action表示后台api接口的地址 二. conto ...
- Flask_上下文(六)
Flask中有两种上下文,应用上下文(application context)和请求上下文(request context) 当客户端发来请求时,请求上下文就登场了.请求上下文里包含了请求的各种信息, ...
- linux 查看历史命令 history命令
1.history命令 "history"命令就是历史记录.它显示了在终端中所执行过的所有命令的历史. history //显示终端执行过的命令 history 10 //显示最近 ...
- spring cloud --- config 配置中心 [本地、git获取配置文件]
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 spring cloud config 配置中心是什么? 为了统一管理配 ...