DokuSicherheit und Bereitstellung
Leistung
Was nx start standardmäßig tut, was eingeschaltet werden soll und was gemessen wurde.
Standardeinstellungen
| Sorge | Standard | Ändere es |
|---|---|---|
| Prozesse | ein Uvicorn Worker pro CPU unter Linux und macOS, einer unter Windows | nx start führt die App durch Uvicorn |
| Komprimierung | aus | useGZip = {"minimum_size": 1000} in Konfiguration oder komprimieren Sie am Reverse-Proxy |
| Statische Dateien | serviert mit ETag und Last-Modified, nein Cache-Control |
Legen Sie langlebiges Caching am Reverse-Proxy oder CDN für Hash-Bundles fest |
| HTML-Seiten | Wird pro Anfrage gerendert, kein Cache | ISR mit revalidate = N |
| API-Dokumente | auf | useDocs = False in der Produktion |
| Knoten zur Laufzeit | keine | nx build rendert Clientkomponenten vorab |
Die beiden Schalter der Tabelle in nexyconfig.py und ISR auf einer Seite:
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 ist ein Modus für Dateiseiten: Eine Ansicht, die ein Controller zurückgibt, wird bei jeder Anfrage gerendert.
Gemessen
Eine lokale Ausführung, ein Uvicorn Worker, Windows, Python 3.13, Keep-Alive-Verbindungen von einem Python Lastgenerator auf demselben Computer. Behandeln Sie die Zahlen als Grundlage für den Vergleich von Änderungen und nicht als Maßstab für andere Frameworks.
Die Nexy-JSON-Route der Tabelle ist diese Datei:
async def GET(): return {"ok": True}from nexy.decorators import Controller @Controller("/api/ping")class PingController: async def get(self): return {"ok": True}Die folgenden Zahlen wurden mit der Dateiroute gemessen. Messen Sie einen Controller auf die gleiche Weise, bevor Sie sich darauf verlassen.
| Route | Parallelität | Anfragen pro Sekunde | S. 50 | S. 99 |
|---|---|---|---|---|
| Nackte FastAPI JSON-Route | 16 | ~4.500 | 3,4 ms | 5,1 ms |
Nexy-JSON-Route (src/routes/api/ping.py) |
16 | ~2.900 | 5,2 ms | 9,8 ms |
| Nexy SSR-Seite (16 KB, 16 Komponenten) | 1 | ~500 | 1,9 ms | 3,0 ms |
| Nexy SSR-Seite (16 KB, 16 Komponenten) | 64 | ~670 | 94 ms | 126 ms |
Lesen der Tabelle:
- Nexys eigene Schichten (Pfadkontext, Middleware) kosten etwa ein Drittel des Durchsatzes einer bloßen FastAPI-Route.
- Eine vom Server gerenderte Seite kostet etwa 2 ms CPU, verteilt auf etwa 16 Vorlagen-Renderings (eines pro Komponente). Seiten mit weniger Komponenten sind proportional günstiger.
- Der Durchsatz skaliert mit den Arbeitern. Unter Linux startet
nx startbereits einen pro CPU.
Praktische Ratschläge
- Stellen Sie Nginx, Caddy oder den Edge Ihrer Plattform in den Vordergrund: TLS, HTTP/2, Brotli und langlebiges Caching für
/__nexy__/client/Assets sind ihre Stärken. Siehe Bereitstellen. - Verwenden Sie ISR für Seiten, die sich weniger als einmal pro Minute ändern.
- Hydratieren Sie langsam mit Inseln, damit die erste Ladung weniger versendet JavaScript.
- Halten Sie die Anzahl der
.nexyKomponenten pro Seite angemessen: Jede davon ist ein separates Vorlagenrendering. - Messen Sie Ihre eigenen Routen. Ein lokaler Lastgenerator, der die Verbindungen aufrechterhält, reicht aus, um zwei Versionen einer Seite zu vergleichen.
Tipp 1 mit Nginx: Die gehashten Client-Bundles werden ein Jahr lang zwischengespeichert, der Rest geht an 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; }}