博客图片的 WebP 之路
在主流浏览器都支持的情况下,我趁着文章还少,把所有文章的图片全部转换为WebP格式,以寻求更快的加载速度和丝滑的体验
这篇文章同样有很多不完善的地方,而且由于要写的比较详细的话,可能需要很多截图,而事实上这篇文章不会被太多人看到,所以有需要再进行更新
WebP转换
个人呢,不喜欢为了这简单的事去下载一个专门的软件,所以必定是找了很久,在搜索引擎和论坛看评论,以及综合个人使用经验,推荐以下平台
- 没广告,做该做的事
- 参数可调整
图床
网上的那些知名图床好是好,但就会偷偷删你文件,所以黑人问号,小众稳定的还是少
不过备案了的话白嫖就很简单
自动化
自动合并配置部分
自动合并配置部分
The Configuration File
Mergify applies rules to your pull requests. To do that, you need to create a Mergify configuration in each repository where Mergify is used.
The configuration file should be created in the root directory of the repository and named either .mergify.yml or .mergify/config.yml or .github/mergify.yml.
As the file name implies, the configuration file format is based on YAML, a simplistic file format for data. The configuration file format is entirely documented in 🔖 Configuration File.
上面官方文档给出了三种创建配置文件的目录,当然我是用第一种(越懒越好)直接根目录创建.mergify.yml文件,文件中的内容如下
mergify官方给出的例子其中包括了imgbot,代码如下
1 | pull_request_rules: |
你如果没使用Travis CI,可以删掉那行,仅满足提交人为imgbot这个条件即可即可
刚才的截图告诉我们,自动合并后,imgbot将自动删除由它创建的imgbot分支,所以这里我们无需额外配置,我只是放在这里看看,假如imgbot不会自动删除分支呢
由于此种方式不是通过fork创建的pr,而是通过新建分支,所以必然需要删除无用的分支,别担心,这些都为你想到了,官方文档这么写道
Some users create pull request from the same repository by using different branches — rather than creating a pull request from a fork. That’s fine, but it tends to leave a lot of useless branch behind when the pull request is merged.
Mergify allows to delete those branches once the pull request has been merged:
1 | pull_request_rules: |
实际上Github提供了自动删除分支选项,你可以去配置里打开它(如果以后在别的项目需要的话
其他更多高级个性化配置可前往官方文档查看,万一以后需要自动合并指定人提交的PR,还有上面的开启打标签合并选项等操作,再去配置相应的就行了(所以推荐记住这个平台)
关于使用Actions,如果已经了解并比较熟练的掌握的话推荐使用别人编写好的actions,你只要use即可,配置建议查看自动合并PR Actions仓库,详情可以去看README,但我建议自动合并PR的话两种方式选一种即可,不然万一报错邮件是我们不希望看到的
而这个actions也能实现上面一样的效果,配置MERGE_FILTER_AUTHOR即可: When set, only pull requests raised by this author will be merged automatically.
稍微复制粘贴,照着README配置即可,actions教程网上也很多,请自行查看,或者直接查阅官方文档
README示例代码如下
1 | name: automerge |
关于这个GITHUB_TOKEN,在前文中配置Picgo提到过,用一样的即可,我们在项目仓库中添加secrets即可,当然按照官方文档配置的话,这个名字得叫GITHUB_TOKEN
在 workflow 文档流里我们可以用${{ secrets.GITHUB_TOKEN }}做权限认证,是一个默认存在的变量,并不需要我们去添加 ACCESS_TOKEN,不过要是跨仓库还是要使用手动生成的TOKEN,关于这点,可以查看官方文档相关内容
要实现自动合并imgbot提交的PR,我的workflow这么配置
使用GitHub Actions,每天定时压缩
这有个好处就是由于是本仓库文件,所以省去了Secrects配置,直接push就行,也比较省心,同时图片压缩质量是通过调整参数可控的,当然也可以再每次博客写完,图片上传完毕后手动压缩一次,达到可控效果,毕竟我们并不希望上传一张照片自动压缩一次,浪费资源哦
自动压缩配置部分
自动压缩配置部分
我的workflow这么配置的
1 | name: Compress Image |
但你们需要替换一下这部分内容(因为没有package.json)
1 | - name: Install Dependencies |
同时根目录需要有gulpfile.js,来完成配置
1 | var gulp = require('gulp') |
这种老的配置方法主要是任务执行时间比较短,反正也是白嫖,执行个一个小时也不为过?
那你可以替换为新版配置
1 | const gulp = require('gulp'); // 基础库 |
请不要无脑复制,自行整合,开启关闭需要的,按照官方配置即可
自动转换配置部分
自动转换配置部分
和自动压缩差不多,但我们说了,那是之前的解决方案,现在我们是要让博客使用WebP,因此必须要向前看,自动转换为WebP,同时jsd链接后缀也得自动改或者手动改,这我还在研究中
- 其中图片使用
gulp imagemin压缩 - (之后考虑加入
WebP转换👍,gulp作者貌似不考虑适配,虽然imagemin测试成功了,但是还是等等再说)
为什么这么说,已经配置了gulpfile.js,我不想再配置imagemin.js,少一个文件是一个文件
还是用到了gulp,所以gulp还是要装
配置差不多,用到的插件是
1 | npm install --save-dev gulp gulp-WebP |
gulpfile.js配置如下
1 | const gulp = require('gulp'); |
至于怎么编写actions工作流文件,你应该会了
不过还是不能不考虑imagemin自己的插件,那是真好用
具体可查看官方
https://github.com/imagemin/imagemin
https://github.com/imagemin/imagemin-gif2WebP
如果是压缩jpg,png,安装插件
1 | npm install imagemin imagemin-jpegtran imagemin-pngquant |
配置文件写在imagemin.js文件里面,说真的不错啊,命令是node imagemin.js
1 | const imagemin = require('imagemin'); |
但我们显然要转成WebP,
1 | npm install imagemin imagemin-WebP |
具体配置如下,效果比较好
1 | const imageminWebP = require('imagemin-WebP'); |
官方的话,给了一个区间
1 | const imagemin = require('imagemin'); |
下面是gif转WebP,我还没本地测试,不知道是否是能转成和gif差不多的动图而不是静态WebP
1 | npm install --save imagemin imagemin-gif2WebP |
1 | const imagemin = require('imagemin'); |
或者也可以去官方仓库看看别的插件,配置用法,反正我觉得imagemin本身还是挺好用的(相比于gulp)
这里是一个早期的例子,现在有些已经过时
1 | npm i imagemin imagemin-giflossy imagemin-mozjpeg imagemin-pngquant imagemin-svgo imagemin-WebP |
1 | // 安装依赖:npm i imagemin imagemin-giflossy imagemin-mozjpeg imagemin-pngquant imagemin-svgo imagemin-WebP |
我们原来还在顾忌WebP的支持问题,考虑自适应,加入判断,又拍云,https://WebP.sh/ 也提供这样的功能,但现在我的态度是,你看不到我博客的图片是你我无缘
视频(题外话)
关联阅读
CDN 解决方案
拿又拍云来说,图像处理,URL作图 是个不错的解决方案







