datasette-hashed-urls 作者:simonw

星标

README 源代码

datasette-hashed-urls

PyPI Changelog Tests License

在缓存代理后面优化 Datasette 性能

使用 -i 选项以不可变模式打开数据库文件时,Datasette 会在启动时计算该文件内容的 SHA-256 哈希值。

然后,可以选择使用此内容哈希值创建 URL,以确保当文件内容在将来发生更改时,URL 也会随之更改。

结果是页面可以被浏览器和缓存代理无限期缓存 - 从而显著提升性能。

演示

此插件的演示正在运行,地址是 https://datasette-hashed-urls.vercel.app/

安装

请在与 Datasette 相同的环境中安装此插件。

$ datasette install datasette-hashed-urls

用法

安装后,此插件将作用于加载到 Datasette 中的任何不可变数据库文件

datasette -i fixtures.db

数据库将自动重命名以包含 SQLite 文件内容的哈希值 - 因此上述数据库将以以下方式提供

http://127.0.0.1:8001/fixtures-aa7318b

访问该数据库的每个页面(包括 JSON 端点)都将附带以下远期缓存过期头

cache-control: max-age=31536000, public

此处 max-age=31536000 是一年中的秒数。

然后可以使用诸如 Cloudflare 之类的缓存代理来缓存和加速 Datasette 提供的内容。

当数据库文件更新并重新启动服务器时,哈希值将更改,并且内容将从新的 URL 提供。对先前哈希 URL 的任何访问都将自动重定向。

如果您使用 --crossdb 选项运行 Datasette 以启用 跨数据库查询,则 _memory 数据库的 URL 中也将添加一个哈希值 - 在这种情况下,哈希值将是其他附加数据库哈希值的组合。

配置

您可以使用 max_age 插件配置设置来更改 cache-control HTTP 头中指定的缓存持续时间。

要将缓存过期时间设置为一小时,您可以将其添加到 Datasette 的 metadata.json 配置文件中

{
    "plugins": {
        "datasette-hashed-urls": {
            "max_age": 3600
        }
    }
}

历史

此功能曾作为 Datasette 本身的一部分发布,称为 哈希 URL 模式

该功能已被弃用,并将在 Datasette 1.0 中移除。应使用此插件作为替代方案。

开发

要在本地设置此插件,首先请检出代码。然后创建一个新的虚拟环境

cd datasette-hashed-urls
python3 -mvenv venv
source venv/bin/activate

或者如果您正在使用 pipenv

pipenv shell

现在安装依赖项和测试依赖项

pip install -e '.[test]'

运行测试

pytest