文档安全与部署
性能
nx start 默认执行什么操作、打开什么以及测量什么。
默认值
| 关注 | 默认 | 改变它 |
|---|---|---|
| 流程 | Linux 和 macOS 上每个 CPU 一名 Uvicorn 工作人员,Windows 上一名工作人员 | nx start 通过 Uvicorn 运行应用程序 |
| 压缩 | 关闭 | 配置 中的 useGZip = {"minimum_size": 1000},或在反向代理处压缩 |
| 静态文件 | 与 ETag 和 Last-Modified 一起食用,没有 Cache-Control |
在反向代理或 CDN 上为散列包设置长期缓存 |
| HTML 页面 | 按请求渲染,无缓存 | ISR 和 revalidate = N |
| API文档 | 上 | useDocs = False 生产中 |
| 运行时的节点 | 无 | nx build 预渲染客户端组件 |
nexyconfig.py中的表和页中的ISR的两个开关:
from nexy.core.models import NexyConfigModel class NexyConfig(NexyConfigModel): useGZip = {"minimum_size": 1000} useDocs = Falserevalidate = 60<h1>Rendered at most once per minute</h1>ISR 是一种文件页面模式:控制器返回的视图在每个请求上呈现。
测量的
本地运行,一个 Uvicorn 工作线程,Windows,Python 3.13,来自同一计算机上的 Python 负载生成器的保持活动连接。将这些数字视为比较变化的基线,而不是作为其他框架的基准。
表的 Nexy JSON 路由是这个文件:
async def GET(): return {"ok": True}from nexy.decorators import Controller @Controller("/api/ping")class PingController: async def get(self): return {"ok": True}下面的数字是用文件路径测量的。在使用控制器之前,请以相同的方式对其进行测量。
| 路线 | 并发性 | 每秒请求数 | p50 | p99 |
|---|---|---|---|---|
| 裸 FastAPI JSON 路由 | 16 | 〜4,500 | 3.4毫秒 | 5.1毫秒 |
Nexy JSON 路由 (src/routes/api/ping.py) |
16 | 〜2,900 | 5.2毫秒 | 9.8 毫秒 |
| Nexy SSR 页面(16 KB,16 个组件) | 1 | 〜500 | 1.9 毫秒 | 3.0毫秒 |
| Nexy SSR 页面(16 KB,16 个组件) | 64 | 〜670 | 94毫秒 | 126 毫秒 |
读表:
- Nexy 自己的层(路径上下文、中间件)消耗的吞吐量约为裸 FastAPI 路由的三分之一。
- 服务器渲染的页面大约需要 2 毫秒的 CPU 时间,分布在大约 16 个模板渲染上(每个组件一个)。组件较少的页面相应地更便宜。
- 吞吐量随工人而变化。在 Linux 上,
nx start已经为每个 CPU 启动一个。
实用建议
- 将 Nginx、Caddy 或您平台的优势放在前面:TLS、HTTP/2、Brotli 和
/__nexy__/client/资产的长期缓存是它们的优势。请参阅部署。 - 对于每分钟更改次数少于一次的页面,请使用 ISR。
- 使用岛屿 懒惰地水合,因此第一批货物运输较少 JavaScript。
- 保持每页的
.nexy组件数量合理:每个组件都是一个单独的模板渲染。 - 测量自己的路线。保持连接活动的本地负载生成器足以比较页面的两个版本。
Nginx 的建议 1:散列客户端包缓存一年,其余的交给 Nexy。
server { listen 443 ssl http2; server_name example.com; location /__nexy__/client/ { proxy_pass http://127.0.0.1:3000; add_header Cache-Control "public, max-age=31536000, immutable"; } location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; }}