Code Monkey home page Code Monkey logo

freecdn-publib's Introduction

npm version

项目简介

本项目为 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% 以上的记录,大幅节省存储空间。

存储格式

本项目使用自定义的格式编码数据,直接打包在 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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.