网站首页 > 开源技术 正文
之前写过一篇 使用 jsDelivr 免费加速 GitHub Pages 博客的静态资源,在那之后,又陆续想到并实施了几点利用 jsDelivr 进一步加速静态资源加载的措施,新起一篇作为记录和分享。
继上一轮改造过后,比较拖页面加载速度的主要有三点:
- 页面首个请求响应时间;
- 图片资源加载时间;
- 站内搜索引用的 JSON 资源加载时间。
第 1 点在页面仍然托管在 GitHub Pages 的前提下,似乎没有什么好办法能产生质的飞跃;本篇主要改善了第 2 点和第 3 点。
0x01 图片资源加速
这里所说的图片主要是指文章里引用的图片。
我一直将图片放在博客源码根目录的 images 文件夹下,引用图片的习惯写法是这样的:

如果想将这个图片地址替换为 jsDelivr 的地址,需要做的就是将 /images
替换为 https://cdn.jsdelivr.net/gh/mzlogin/mzlogin.github.io@master/images
。
一处一处替换行不行?当然也行,但后面写新文章时要引用图片,还得手动写这一长串,不方便;万一 jsDeliver 出状况,也不好一键切换回来。有没有一劳永逸的方法?当然也有,我们从 Jekyll 的 layout 机制来想办法。
Jekyll 的 layout 可以理解为页面模板,它是可以继承的,比如我的博客的所有页面模板有一个共同的祖先模板 _layouts/default.html,模板里可以使用 Liquid 语法对内容进行处理,我们可以利用这一点,来自动完成批量替换的工作。
关键代码如下:
{% assign assets_base_url = site.url %}
{% if site.cdn.jsdelivr.enabled %}
{% assign assets_base_url = "https://cdn.jsdelivr.net/gh/" | append: site.repository | append: '@master' %}
{% endif %}
{% assign assets_images_url = 'src="' | append: assets_base_url | append: "/images" %}
{% include header.html %}
{{ content | replace: 'src="/images', assets_images_url }}
{% include footer.html %}
大意就是,如果打开了启用 jsDelivr 加速的开关,就将 content
里的 src="/images"
替换为 src="https://cdn.jsdelivr.net/gh/mzlogin/mzlogin.github.io@master/images"
,否则替换为 src="https://mazhuang.org/images"
。
以上便达成了我们的目的。
0x02 站内搜索引用的 JSON 资源加速
我是使用 Simple-Jekyll-Search 这个 JavaScript 库来实现站内搜索的,它的搜索数据是来自一个动态生成的 JSON 文件。
这个 JSON 文件编译前长这样:
https://github.com/mzlogin/mzlogin.github.io/blob/master/assets/search_data.json
Jekyll 编译后长这样:
https://mazhuang.org/assets/search_data.json
这样的资源是没有办法直接通过替换网址来用 jsDelivr 加速的,因为 jsDelivr 上缓存的是编译前的文件,而我们需要的是编译后的。
那我们就想办法:
- 将博客源码编译;
- 将编译结果保存到另一个分支;
- 通过 jsDelivr 引用新分支上的这个文件。
这些步骤可以通过 GitHub 去年推出的新特性 Actions 来完成,在我们每一次向博客源码仓库 push 代码时自动触发。
关键步骤如下:
在 GitHub 新建一个 Personal access Token:
Settings --> Developer settings --> Personal access tokens --> Generate new token --> 填写 note,勾选 public_repo,生成之后复制 token 值备用。
在博客源码仓库的 Settings --> Secrets --> New secret,Name 填
ACCESS_TOKEN
,Value 填第 1 步里复制的 token 值;在博客源码根目录下新建文件 .github/workflows/ci.yml,内容如下:
name: Build and Deploy on: push: branches: [ master ] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2.3.1 with: persist-credentials: false - name: Set Ruby 2.7 uses: actions/setup-ruby@v1 with: ruby-version: 2.7 - name: Install and Build run: | gem install bundler bundle install bundle exec jekyll build - name: Deploy uses: JamesIves/github-pages-deploy-action@3.6.2 with: ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} BRANCH: built FOLDER: _site CLEAN: true
大意就是在向 master 分支 push 代码时,自动执行 checkout、初始化 ruby 环境、安装 Jekyll 并编译博客源码的工作,最后将编译生成的 _site 目录里的内容推送到 built 分支。对 GitHub Actions 感兴趣的同学可以自行参考官方说明学习。
修改引用 JSON 文件的地方,比如我的 _includes/sidebar-search.html 里的写法由:
json: '{{ site.url }}/assets/search_data.json',
改为了
{% if site.cdn.jsdelivr.enabled and site.url contains 'mazhuang.org' %} json: 'https://cdn.jsdelivr.net/gh/mzlogin/mzlogin.github.io@built/assets/search_data.json', {% else %} json: '{{ site.url }}/assets/search_data.json', {% endif %}
将以上更改推送到源码仓库,等待处理完成即可。
0x03 结语
经过以上改造,博客页面的加载速度又得到了小小的提升,所有相关源码可以在 https://github.com/mzlogin/mzlogin.github.io 找到,有相关心得或建议的朋友欢迎交流指正。
相关文章:
猜你喜欢
- 2024-09-08 vue2组件系列第四十二节:NavBar 导航栏
- 2024-09-08 从零开始学Python——使用Selenium抓取动态网页数据
- 2024-09-08 黑客突破macOS的安全防御,新型恶意软件正在偷偷的窃取你的文件
- 2024-09-08 vue2组件系列第三十六节:Lazyload 图片懒加载
- 2024-09-08 Visa|实习面试|2022 暑假(visa issues)
- 2024-09-08 消息中间件RabbitMQ入门详解(消息中间件mq作用)
- 2024-09-08 vue2组件系列第二十二节:SwitchCell 开关单元格
- 2024-09-08 vue2组件系列第二十节:按钮式单选组件
- 2024-09-08 vue2组件系列第四十节:NoticeBar 通告栏
- 2024-09-08 vue2组件系列第二十六节:PasswordInput 密码输入框
你 发表评论:
欢迎- 07-10公司网站建站选择:人工建站和源码建站分析
- 07-10多用途游戏娱乐新闻网站HTML5模板
- 07-10站长教你搭建属于自己的网站(搭建网站的步骤)
- 07-10php宝塔搭建部署实战响应式塑料封条制品企业网站模板源码
- 07-10自适应响应式汽车配件类网站源码 html5高端大气汽车网站织梦模板
- 07-10网站标签怎么设置?(网站标签怎么设置比较好)
- 07-10PageAdmin企业网站制作中踩过的坑
- 07-10豆包给我输出的html在线象棋源码(有点简单)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)