在缓存代理后面优化 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