freecdn-publib

0.1.2 • Public • Published

项目简介

本项目为 freecdn 提供公共资源 Hash/URL 存储、查询和导出功能。

数据来源

公共资源 URL 列表来源于 cdnjs,其收录了数千个前端开源项目,并提供数百万个资源 URL。

cdnjs 存在诸多镜像站点,例如官方提供的站点(以 jquery 文件为例):

cdnjs 所在的 GitHub 项目,可通过 jsdelivr 加速:

国内的镜像:

有些站点较长时间未更新,所以不完整;有些站点对 JS、CSS、图片进行了压缩,导致 Hash 和官方版本不一致。这些缺失或损坏的资源未收录。

此外,有些站点虽不是 cdnjs 的镜像,但资源路径的格式和 cdnjs 一致:

这些站点的资源数量不多,只有几千至几万个。

也有些站点不仅不是 cdnjs 的镜像,并且路径格式也不一致:

为了节省存储空间,本项目只存储 cdnjs 格式的路径,对于不一致但存在转换规律的路径,使用 rewrite 方案进行转换。

还有些站点只用于特定项目,例如:

这些站点也被采纳,可为特定项目的资源加速。(同样使用路径 rewrite 方案)

数据筛选

本项目排除了一些不常用的文件,例如 .map.ts.scss 等开发文件,例如已被禁用的 .swf 文件。

对于内容相同的文件,只需选择其中一个即可。目前的选择策略是:

  1. 站点越多越好(备用 URL 更多,稳定性更高)

  2. 项目越流行越好(排名根据 cdnjs libraries 的顺序)

  3. 版本号越小越好(版本号会升级,但最旧的版本号是固定的)

  4. 站点越流行越好(排名靠前的站点大多是 cdnjs 的镜像。顺序参考 db/sites.txt

  5. 路径越短越好(节省空间)

  6. 按路径字符串排序(以上都相同时,使用路径区分。因为路径是唯一的)

细节参考 db/gen.sql。去重后可减少 80% 以上的记录,大幅节省存储空间。

存储格式

本项目使用自定义的格式编码数据,总共不到 50MB,直接打包在 NPM 包里。(相比 SQLite 可节省需数百 MB 空间)

数据存放在 assets 目录:

  • hash-prefixes.br Hash 前缀(4 字节)集合,已排序,存在重复。已压缩

  • hash-suffixes Hash 后缀(28 字节)集合,对应 prefixes 的顺序

  • data.br 文件路径及站点 bits 集合,对应 prefixes 的顺序。已压缩

查询时根据 Hash 的前缀,通过 prefixes 快速找到位置;然后 seek suffixes 文件到相应位置,校验 Hash 后缀是否相同;最后从 data 相应位置获取 URL 列表。

更新日志

CHANGELOG.md

Readme

Keywords

none

Package Sidebar

Install

npm i freecdn-publib

Weekly Downloads

9

Version

0.1.2

License

MIT

Unpacked Size

56.1 MB

Total Files

10

Last publish

Collaborators

  • freecdn