改善 GitHub Pages 阅读体验:Quick Docs

一个不到 10MB 的小工具,来提供本地、快速的文档访问,来改善开发过程中,阅读在线文档体验糟糕的问题。

以及,介绍如何快速制作一个利于分发使用的,离线文档工具包。

写在前面

即使现在 AI 辅助编码和 Chat Bot 类的产品已经非常多,写代码的体验已经变的非常好,但是日常 Coding 过程中,我们难免还需要翻阅开源产品的文档。

因为各种原因,包括部署在 GitHub Pages 上的文档的访问体验都一言难尽。在浏览文档的时候,浏览器时不时转圈圈非常影响连续的思路,以及非常的浪费时间。

尤其是在《你的网站或许不需要前端构建(二)》这篇文章中,我提到了多款非常不错的前端框架和工具,它们的文档都托管在 GitHub 上。

而且,单纯是将这些文档下载到本地,也并不完全能够解决访问慢的问题,因为文档中可能还引用了一些外部的 API 接口或者互联网小组件,这些小组件加载好之前,页面可能都是“白页”。

所以,结合今年早先时候的文章《完善 Golang Gin 框架的静态中间件:Gin-Static》折腾了一个小工具,来提供本地、快速的文档访问,来改善开发过程中,阅读在线文档体验糟糕的问题。

项目开源在 soulteary/docker-quick-docs,欢迎一键三连,或有需要的代码自取。

将在线文档转换为本地文档

我们以 baidu/san 部署在 GitHub Pages 上的在线文档为例,来将它变为可以快速访问的本地文档。

获取文档数据

类似这个项目部署在 GitHub Pages 上的内容,通常都会在项目的 gh-pages 分支上,所以我们有两种方式来获取文档内容,第一种是在页面中,先切换项目分支到 gh-pages,然后点击下载代码的按钮,得到源码压缩包。

方式一:从网页上直接下载压缩包

不过这种方式,我们更新代码内容比较麻烦,所以我更推荐第二种方法,使用 git clone 携带参数来下载指定目录的代码,并尽量少的进行 clone

git clone http://github.com/baidu/san --depth 1 --branch=gh-pages

代码执行后,我们就能相对快速的从仓库中得到可更新的文档数据了:

# git clone http://github.com/baidu/san --depth 1 --branch=gh-pages
Cloning into 'san'...
warning: redirecting to https://github.com/baidu/san/
remote: Enumerating objects: 405, done.
remote: Counting objects: 100% (405/405), done.
remote: Compressing objects: 100% (197/197), done.
remote: Total 405 (delta 154), reused 303 (delta 65), pack-reused 0
Receiving objects: 100% (405/405), 2.17 MiB | 5.18 MiB/s, done.
Resolving deltas: 100% (154/154), done.

如果后续想更新代码,只需要进入目录,执行 git pull

# cd san
# git pull
Already up to date.

启动 Quick Docs

使用 Quick Docs 有两种方法,一种是从 GitHub 发布页面 下载适合你系统的二进制文件,然后直接执行它。

./quick-docs

默认情况下,它将在目录中自动创建 docs 目录,将我们准备好的文档都保存在这个目录中,就可以来做本地体验了,默认的端口是 8080

如果你想调整端口,可以设置命令中的环境变量 PORT,比如想要在 9000 端口运行,我们可以这样做:

PORT=9000 ./quick-docs

当然,如果你是 Docker 爱好者,我们有更“绿色环保”的方案:

# 下载工具
docker pull soulteary/docker-quick-docs:v0.1.2
# 使用工具启动文档
docker run --rm -it -v `pwd`/docs:/app/docs -p 8080:8080 soulteary/docker-quick-docs:v0.1.2

当程序执行完毕,我们将能够看到类似下面的输出结果:

2024/01/04 11:39:54 Quick Docs v0.1.2

这个时候,我们访问 http://localhost:8080 就能够看到有哪些目录可以被浏览了。

默认的首页

因为我们只存放了 san 一个项目的文档,所以在打开浏览器之后,我们暂时就只有这一个目录可访问。如果你想访问更多的文档,只需要将不同的文档都放到 docs 目录,然后启动程序即可。

点击目录,我们就能够看到 san 的本地部署文档啦:

San 的离线文档

不同与 GitHub 慢吞吞的,本地部署的文档访问速度提升非常明显,如果你经常访问某些开源软件的文档,这个方案一定可以为你节约大量的时间。

一般情况下,做到这一步,文档的本地化访问就已经搞定了。不过,相信追求极致的你一定希望本地的页面能够打开的更快,甚至完全离线可访问,那么我们继续来折腾。

高级功能:文档内容重写

我们继续以 san 的文档为例,我们打开网络调试工具,再次刷新页面,能够看到有两个很明显的加载比较慢的请求。

文档中缓慢的网络请求

想要解决这个问题,我们可以使用工具支持的“内容重写功能”。

简单重写

以上面的内容为例,上面页面中比较慢的请求地址分别是:

https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css
https://ghbtns.com/github-btn.html?user=baidu&repo=san&type=star&count=true&size=large

比如,我们可以将上面的请求改写为“空”,来避免慢请求:

[{"from": "https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css","to": ""},{"from": "https://ghbtns.com/github-btn.html","to": "about:blank"}
]

我们将上面的内容保存为 config.json,如果你是使用可执行文件运行程序,那么重启程序,程序就会自动加载并应用配置文件了。

如果你是 Docker 用户,那么我们需要调整命令,将这个配置文件映射到容器内:

docker run --rm -it -v `pwd`/docs2:/app/docs -v `pwd`/config.json:/app/config.json  -p 8080:8080 soulteary/docker-quick-docs:v0.1.2

当程序执行完毕,我们将看到类似下面的输出:

2024/01/04 12:06:57 Quick Docs v0.1.2
2024/01/04 12:06:57 未设置环境变量 `PORT`,使用默认端口:8080
2024/01/04 12:06:57 解析配置文件成功,规则数量: 2

此时再打开页面,刷新网页,我们就能看到所有的请求都来自本地,以及感受到页面请求速度更快啦。

清除掉的文档中的慢请求

只要你想,你可以放任意数量的文档在 docs 目录中,来改善你的开发文档阅读体验。

更高性能的重写

不过,倘若我们有很多文档目录,也有非常多的重写规则,那么一定会造成不必要的性能损失,即使程序本身足够简单,现代硬件的性能也足够高。

但如果你的 Quick Docs 是运行在使用电池支持的笔记本上,或者单核心的小主机上,能省则省嘛。

我们只需要在上面的重写规则下面添加 dir 字段,来限制重写规则的生效范围即可,如果你想更进一步的进行限制,还可以设置重写内容的类型 type

[{"from": "https://ecomfe.github.io/san/","to": "/san/","type": "html","dir": "/san/"},{"from": "https://github.com/baidu/san-router","to": "/san-router/"},{"from": "https://ecomfe.github.io/santd/","to": "/santd/"}
]

默认情况下,如果我们不设置 dir 或者 type,那么程序将对所有目录下的 html 文件生效。

目前支持处理的文件类型包括 htmljscssjson,对于离线的文档站来说,应该是足够使用了吧?如果你觉得不够用,欢迎在项目 issue 中提出你的看法。

好了,如果你有很多文档需要本地托管,看到这里也足够应对啦。

构建利于分发的单程序文档

文档的开头,我提到了如何制作一个利于分发使用的,离线文档工具包。这里主要是复用早些时候发的文章《完善 Golang Gin 框架的静态中间件:Gin-Static》中的中间件的能力。

想要制作单文件的离线工具包,我们需要先下载项目代码:

git clone https://github.com/soulteary/docker-quick-docs.git

然后和上文一样,将我们想固化在程序中的文档放在 docs 目录中。

执行程序构建命令:

go build -o quick-docs

程序执行完毕,我们在当前目录就能够得到“内置”了文档的程序了,它可以脱离之前的 docs 目录运行。

我们的离线文档程序也就折腾好了,运行的时候,需要携带一个参数 EMBED=on 来激活 Embeded 功能:

EMBED=on ./quick-docs

程序的使用和上文中提到的没有任何差别。

最后

好了,写到这里,Quick Docs 的所有用法就都介绍完毕啦。

我们下篇文章再见。

–EOF


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年01月04日
统计字数: 4924字
阅读时间: 10分钟阅读
本文链接: https://soulteary.com/2024/01/04/improving-the-github-pages-reading-experience-quick-docs.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/321949.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】线程同步+基于BlockingQueue的生产者消费者模型

线程同步基于BlockingQueue的生产者消费者模型 1.线程同步2.生产者消费者模型3.基于BlockingQueue的生产者消费者模型 喜欢的点赞,收藏,关注一下把! 1.线程同步 在线程互斥写了一份抢票的代码,我们发现虽然加锁解决了抢到负数票的…

大数据StarRocks(三) StarRocks数据表设计

1. 列式存储 1.1 列式存储方式有以下几个优点: 1.快速的数据查询 由于数据是按照列进行存储的,所以查询某个列时只需要读取该列所在的块,而不是整行数据,从而大大提高了查询效率。 2.压缩效率高 由于列式存储的数据块中只有一…

Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】

文章目录 一、前言二、有关git的相关历史介绍三、Git版本管理1、感性理解 —— 大学生实验报告2、程序员与产品经理3、张三的CEO之路 —— 版本管理工具的诞生 四、如何在Linux上使用Git1、创建仓库2、将仓库克隆到本地3、git三板斧① git add② git commit③ git push 4、有关…

时代新威受邀出席2023年ISC2亚太安全峰会

2023年ISC2亚太安全峰会(Secure Asia Pacific)近日在新加坡滨海湾金沙会议中心成功举办。 该活动由认证网络安全专业网络的全球领导者ISC2组织,旨在解决亚太地区和全球面临的紧迫网络安全挑战。会议为期两天,于2023年12月6日至7日…

Clion STM32 开发环境配置教程

Clion STM32 开发环境配置教程 STM32 CubeMX(6.5) 下载固件库 若固件库还未下载,可在启动界面点击,INSTALL/REMOVE下载所需要的固件库 选中对应固件库,点击Install即可 Clion(2023.3.1) 略 …

4.快速实现增删改查,模糊查询功能

打开springboot项目,在com.example下建包common,在common下新建Result.java 4.1封装统一的返回数据结构 1.在Result.java中编写如下代码: private static final String *SUCCESS*"0"; private static final String *ERROR*"-1"; p…

立仪科技光谱共焦位移传感器:应用领域的广泛性

在科技日新月异的今天,光谱共焦位移传感器以其精确、稳定的特性,在各个领域得到了广泛的应用。本文将详细介绍光谱共焦位移传感器的应用情况,以期让大家对其有更深入的了解。我们来理解一下什么是光谱共焦位移传感器。 它是一种通过测量物体表…

2023APMCM亚太数学建模C题 - 中国新能源汽车的发展趋势(2)

五.问题二模型建立和求解 5.1 问题二模型建立和求解 针对题目二,题目要求收集中国新能源电动汽车行业发展数据,建立数学模型描述,并预测未来十年的发展。由于在第一文中,我们已经收集了一定的新能源行业发展数据&…

安卓逆向-dex文件反编译【接上一篇】

dex2jar - Browse Files at SourceForge.net【dex2jar下载地址】这是一个反编译工具将dex文件反编译为jar文件,进而进行下一步,源码重现。 下载好以后直接cmd到d2j-dex2jar.bat文件下面,把上一步脱壳生成的dex文件拖到这个路径下或者d2j-dex…

第11课 实现桌面与摄像头叠加

在上一节,我们实现了桌面捕获功能,并成功把桌面图像和麦克风声音发送给对方。在实际应用中,有时候会需要把桌面与摄像头图像叠加在一起发送,这节课我们就来看下如何实现这一功能。 1.备份与修改 备份demo10并修改demo10为demo11…

linux 使用iniparser读取.ini文件的配置信息

为什么要用项目配置文件 对于很多程序中要用的参数如果是可变的,那么最好的处理方式就是通过main(int argc,char **argv) 函数参数传递,或者从别的地方去获取,这其中之一就是配置文件,但是在一个成熟和架构完善的系统&#xff0c…

模拟器怎么代理IP?代理IP对手机设置模拟器有哪些影响?

一、代理IP的基本概念和作用流冠代理IP是一种网络服务,可以帮助用户隐藏自己的真实IP地址,通过代理服务器进行网络请求,从而保护用户的隐私和安全。在模拟器中,代理IP的作用也是如此,可以帮助模拟器隐藏真实的IP地址&a…