几行代码,网站图片访问速度 100ms 飙升到 20ms!
大家好,我是二哥!
很早之前,就有小伙伴给我反馈说《Java 程序员进阶之路》经常有图片不显示或者加载缓慢。
但由于白嫖(GitHub 图床+jsdelivr CDN)的力量实在是太过强大了(狗头),再加上我本人没有遇到过这个问题,所以就一直拖延着,迟迟没有行动。
直到某一天,我神秘的流量用光了,上不去了谷歌,访问不了 X 网,我才发现,原来我的网站加载图片这样慢啊!!!!经常是一蹦一蹦出来的,肉眼(带近视镜)可见的慢。
事没到自己头上,显然高高挂起,可一旦事搁到自己头上,就受不了了呀!
于是我打开站长工具检测了一下图片的访问速度,好家伙,我直接好家伙!国内的访问速度能飙到 100ms,国外的确实快,只有 14.7ms,
要知道,网站面对的用户群体大多数都是国内的小伙伴,这速度,真的是劝退用户!
再加上我今天看到小林把自己的网站也升级了自己的图床,所以我就也按捺不住了。
怎么办?
不可能一个个手动替换啊,《Java 程序员进阶之路》上少说也有 200 篇文章,一篇文章平均 5 张图片的话,也得 1000 张吧,全部替换下来还不得疯!
由于我本地已经分门别类的保存了所有的图片,就只剩下:
第一步,把图片上传到某云厂商
第二步,批量替换所有文章中的图片链接为新图床的地址
替换链接的思路也比较简单,就是读取所有 md 文件,找到其中的图片地址,按照下图的方式替换即可。
第一步,上传图库到云厂商
直接选择扫描文件夹就可以把所有的图片上传到新的图床里。
PS:这里有个坑,不知道有眼尖的小伙伴看出来了没?
第二步,开启 CDN
只使用 OSS 的话,除了流量计费比较高一点外,就是图片没有进行加速服务,所以我就顺带开启了 CDN 服务。开启方法非常简单,只需要将域名回源到 OSS 就可以了。
第三步,编写 Java 代码批量转链
思路非常简单,也没有多少行代码:
通过 hutool 的
FileUtil.loopFiles()
方法递归遍历目录以及子目录中的所有文件;通过
Executors.newCachedThreadPool()
创建一个缓存线程池,由于最多 1087 个文件,所以不用担心线程池资源耗尽;也就不用严格按照阿里手册上强制要求的不能使用 Executors 创建线程池,因地制宜;循环遍历所有文件,通过
FileNameUtil.isType()
过滤掉不是 md 的文件;通过 FileReader 读取文件内容,并通过 String 类的
replaceAll()
方法替换原有的图片链接;通过 FileWriter 重新写入文件;
来看一下执行日志:
基本上不到一秒钟就完成了,因为有 GitHub 作为版本仓库,所以我们可以放心大胆地执行,不用担心出错,大不了重来就是了。
大概检查几个文件后,发现 OK,就可以把修改后的文件提交到版本库了。
重新部署网站后,打开站长工具重新测试了一下图片的访问速度,这次就快多了,国内基本上都是在 20ms 左右,这比原来的 100ms 快了五分之四啊!
早知道这样子,我就早切换链接了!
小插曲
本地图片上传 OSS 的时候一点没注意,多了一个 images 的目录,就导致我构建网站后,发现图片全部挂了!
人慌了好一阵子,OSS 也没提供移动资源的功能,索性就只能在 md 文件中多加了一个 images 目录,这下只能将错就错了。
充了 100 块钱,不知道能用多久,OSS+CDN,链接中没敢用 HTTPS,因为 HTTPS 也收费,就先用 HTTP 了。
好了,今天是五一劳动节后第一天上班(昨天全员核酸),大早上起来我就在星球里制定了五月份的学习计划,不少球友都响应了,也制订了自己的学习计划。
药卷一起卷(狗头)
强烈推荐一波 GitHub 上星标 2k+ star 的开源专栏《Java 程序员进阶之路》,据说每一个优秀的 Java 程序员都喜欢她,风趣幽默、通俗易懂。内容包括 Java 基础、Java 并发编程、Java 虚拟机、Java 企业级开发、Java 面试等核心知识点。学 Java,就认准 Java 程序员进阶之路😄。
https://github.com/itwanger/toBeBetterJavaer
star 了这个仓库就等于你拥有了成为了一名优秀 Java 工程师的潜力。
没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
版权声明: 本文为 InfoQ 作者【沉默王二】的原创文章。
原文链接:【http://xie.infoq.cn/article/766b11eca091a18c6e7d25473】。文章转载请联系作者。
评论