@engjts/nexus 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/BENCHMARK_REPORT.md +0 -343
- package/documentation/01-getting-started.md +0 -240
- package/documentation/02-context.md +0 -335
- package/documentation/03-routing.md +0 -397
- package/documentation/04-middleware.md +0 -483
- package/documentation/05-validation.md +0 -514
- package/documentation/06-error-handling.md +0 -465
- package/documentation/07-performance.md +0 -364
- package/documentation/08-adapters.md +0 -470
- package/documentation/09-api-reference.md +0 -548
- package/documentation/10-examples.md +0 -582
- package/documentation/11-deployment.md +0 -477
- package/documentation/12-sentry.md +0 -620
- package/documentation/13-sentry-data-storage.md +0 -996
- package/documentation/14-sentry-data-reference.md +0 -457
- package/documentation/15-sentry-summary.md +0 -409
- package/documentation/16-alerts-system.md +0 -745
- package/documentation/17-alert-adapters.md +0 -696
- package/documentation/18-alerts-implementation-summary.md +0 -385
- package/documentation/19-class-based-routing.md +0 -840
- package/documentation/20-websocket-realtime.md +0 -813
- package/documentation/21-cache-system.md +0 -510
- package/documentation/22-job-queue.md +0 -772
- package/documentation/23-sentry-plugin.md +0 -551
- package/documentation/24-testing-utilities.md +0 -1287
- package/documentation/25-api-versioning.md +0 -533
- package/documentation/26-context-store.md +0 -607
- package/documentation/27-dependency-injection.md +0 -329
- package/documentation/28-lifecycle-hooks.md +0 -521
- package/documentation/29-package-structure.md +0 -196
- package/documentation/30-plugin-system.md +0 -414
- package/documentation/31-jwt-authentication.md +0 -597
- package/documentation/32-cli.md +0 -268
- package/documentation/ALERTS-COMPLETE-SUMMARY.md +0 -429
- package/documentation/ALERTS-INDEX.md +0 -330
- package/documentation/ALERTS-QUICK-REFERENCE.md +0 -286
- package/documentation/README.md +0 -178
- package/documentation/index.html +0 -34
- package/modern_framework_paper.md +0 -1870
- package/public/css/style.css +0 -87
- package/public/index.html +0 -34
- package/public/js/app.js +0 -27
- package/src/advanced/cache/InMemoryCacheStore.ts +0 -68
- package/src/advanced/cache/MultiTierCache.ts +0 -194
- package/src/advanced/cache/RedisCacheStore.ts +0 -341
- package/src/advanced/cache/index.ts +0 -5
- package/src/advanced/cache/types.ts +0 -40
- package/src/advanced/graphql/SimpleDataLoader.ts +0 -42
- package/src/advanced/graphql/index.ts +0 -22
- package/src/advanced/graphql/server.ts +0 -252
- package/src/advanced/graphql/types.ts +0 -42
- package/src/advanced/jobs/InMemoryQueueStore.ts +0 -68
- package/src/advanced/jobs/JobQueue.ts +0 -556
- package/src/advanced/jobs/RedisQueueStore.ts +0 -367
- package/src/advanced/jobs/index.ts +0 -5
- package/src/advanced/jobs/types.ts +0 -70
- package/src/advanced/observability/APMManager.ts +0 -163
- package/src/advanced/observability/AlertManager.ts +0 -109
- package/src/advanced/observability/MetricRegistry.ts +0 -151
- package/src/advanced/observability/ObservabilityCenter.ts +0 -304
- package/src/advanced/observability/StructuredLogger.ts +0 -154
- package/src/advanced/observability/TracingManager.ts +0 -117
- package/src/advanced/observability/adapters.ts +0 -304
- package/src/advanced/observability/createObservabilityMiddleware.ts +0 -63
- package/src/advanced/observability/index.ts +0 -11
- package/src/advanced/observability/types.ts +0 -174
- package/src/advanced/playground/extractPathParams.ts +0 -6
- package/src/advanced/playground/generateFieldExample.ts +0 -31
- package/src/advanced/playground/generatePlaygroundHTML.ts +0 -1956
- package/src/advanced/playground/generateSummary.ts +0 -19
- package/src/advanced/playground/getTagFromPath.ts +0 -9
- package/src/advanced/playground/index.ts +0 -8
- package/src/advanced/playground/playground.ts +0 -250
- package/src/advanced/playground/types.ts +0 -49
- package/src/advanced/playground/zodToExample.ts +0 -16
- package/src/advanced/playground/zodToParams.ts +0 -15
- package/src/advanced/postman/buildAuth.ts +0 -31
- package/src/advanced/postman/buildBody.ts +0 -15
- package/src/advanced/postman/buildQueryParams.ts +0 -27
- package/src/advanced/postman/buildRequestItem.ts +0 -36
- package/src/advanced/postman/buildResponses.ts +0 -11
- package/src/advanced/postman/buildUrl.ts +0 -33
- package/src/advanced/postman/capitalize.ts +0 -4
- package/src/advanced/postman/generateCollection.ts +0 -59
- package/src/advanced/postman/generateEnvironment.ts +0 -34
- package/src/advanced/postman/generateExampleFromZod.ts +0 -21
- package/src/advanced/postman/generateFieldExample.ts +0 -45
- package/src/advanced/postman/generateName.ts +0 -20
- package/src/advanced/postman/generateUUID.ts +0 -11
- package/src/advanced/postman/getTagFromPath.ts +0 -10
- package/src/advanced/postman/index.ts +0 -28
- package/src/advanced/postman/postman.ts +0 -156
- package/src/advanced/postman/slugify.ts +0 -7
- package/src/advanced/postman/types.ts +0 -140
- package/src/advanced/realtime/index.ts +0 -18
- package/src/advanced/realtime/websocket.ts +0 -231
- package/src/advanced/sentry/index.ts +0 -1236
- package/src/advanced/sentry/types.ts +0 -355
- package/src/advanced/static/generateDirectoryListing.ts +0 -47
- package/src/advanced/static/generateETag.ts +0 -7
- package/src/advanced/static/getMimeType.ts +0 -9
- package/src/advanced/static/index.ts +0 -32
- package/src/advanced/static/isSafePath.ts +0 -13
- package/src/advanced/static/publicDir.ts +0 -21
- package/src/advanced/static/serveStatic.ts +0 -225
- package/src/advanced/static/spa.ts +0 -24
- package/src/advanced/static/types.ts +0 -159
- package/src/advanced/swagger/SwaggerGenerator.ts +0 -66
- package/src/advanced/swagger/buildOperation.ts +0 -61
- package/src/advanced/swagger/buildParameters.ts +0 -61
- package/src/advanced/swagger/buildRequestBody.ts +0 -21
- package/src/advanced/swagger/buildResponses.ts +0 -54
- package/src/advanced/swagger/capitalize.ts +0 -5
- package/src/advanced/swagger/convertPath.ts +0 -9
- package/src/advanced/swagger/createSwagger.ts +0 -12
- package/src/advanced/swagger/generateOperationId.ts +0 -21
- package/src/advanced/swagger/generateSpec.ts +0 -105
- package/src/advanced/swagger/generateSummary.ts +0 -24
- package/src/advanced/swagger/generateSwaggerUI.ts +0 -70
- package/src/advanced/swagger/generateThemeCss.ts +0 -53
- package/src/advanced/swagger/index.ts +0 -25
- package/src/advanced/swagger/swagger.ts +0 -237
- package/src/advanced/swagger/types.ts +0 -206
- package/src/advanced/swagger/zodFieldToOpenAPI.ts +0 -94
- package/src/advanced/swagger/zodSchemaToOpenAPI.ts +0 -50
- package/src/advanced/swagger/zodToOpenAPI.ts +0 -22
- package/src/advanced/testing/factory.ts +0 -509
- package/src/advanced/testing/harness.ts +0 -612
- package/src/advanced/testing/index.ts +0 -430
- package/src/advanced/testing/load-test.ts +0 -618
- package/src/advanced/testing/mock-server.ts +0 -498
- package/src/advanced/testing/mock.ts +0 -670
- package/src/cli/bin.ts +0 -9
- package/src/cli/cli.ts +0 -158
- package/src/cli/commands/add.ts +0 -178
- package/src/cli/commands/build.ts +0 -73
- package/src/cli/commands/create.ts +0 -166
- package/src/cli/commands/dev.ts +0 -85
- package/src/cli/commands/generate.ts +0 -99
- package/src/cli/commands/help.ts +0 -95
- package/src/cli/commands/init.ts +0 -91
- package/src/cli/commands/version.ts +0 -38
- package/src/cli/index.ts +0 -6
- package/src/cli/templates/generators.ts +0 -359
- package/src/cli/templates/index.ts +0 -680
- package/src/cli/utils/exec.ts +0 -52
- package/src/cli/utils/file-system.ts +0 -78
- package/src/cli/utils/logger.ts +0 -111
- package/src/core/adapter.ts +0 -88
- package/src/core/application.ts +0 -1453
- package/src/core/context-pool.ts +0 -79
- package/src/core/context.ts +0 -856
- package/src/core/index.ts +0 -94
- package/src/core/middleware.ts +0 -272
- package/src/core/performance/buffer-pool.ts +0 -108
- package/src/core/performance/middleware-optimizer.ts +0 -162
- package/src/core/plugin/PluginManager.ts +0 -435
- package/src/core/plugin/builder.ts +0 -358
- package/src/core/plugin/index.ts +0 -50
- package/src/core/plugin/types.ts +0 -214
- package/src/core/router/file-router.ts +0 -623
- package/src/core/router/index.ts +0 -260
- package/src/core/router/radix-tree.ts +0 -242
- package/src/core/serializer.ts +0 -397
- package/src/core/store/index.ts +0 -30
- package/src/core/store/registry.ts +0 -178
- package/src/core/store/request-store.ts +0 -240
- package/src/core/store/types.ts +0 -233
- package/src/core/types.ts +0 -616
- package/src/database/adapter.ts +0 -35
- package/src/database/adapters/index.ts +0 -1
- package/src/database/adapters/mysql.ts +0 -669
- package/src/database/database.ts +0 -70
- package/src/database/dialect.ts +0 -388
- package/src/database/index.ts +0 -12
- package/src/database/migrations.ts +0 -86
- package/src/database/optimizer.ts +0 -125
- package/src/database/query-builder.ts +0 -404
- package/src/database/realtime.ts +0 -53
- package/src/database/schema.ts +0 -71
- package/src/database/transactions.ts +0 -56
- package/src/database/types.ts +0 -87
- package/src/deployment/cluster.ts +0 -471
- package/src/deployment/config.ts +0 -454
- package/src/deployment/docker.ts +0 -599
- package/src/deployment/graceful-shutdown.ts +0 -373
- package/src/deployment/index.ts +0 -56
- package/src/index.ts +0 -281
- package/src/security/adapter.ts +0 -318
- package/src/security/auth/JWTPlugin.ts +0 -234
- package/src/security/auth/JWTProvider.ts +0 -316
- package/src/security/auth/adapter.ts +0 -12
- package/src/security/auth/jwt.ts +0 -234
- package/src/security/auth/middleware.ts +0 -188
- package/src/security/csrf.ts +0 -220
- package/src/security/headers.ts +0 -108
- package/src/security/index.ts +0 -60
- package/src/security/rate-limit/adapter.ts +0 -7
- package/src/security/rate-limit/memory.ts +0 -108
- package/src/security/rate-limit/middleware.ts +0 -181
- package/src/security/sanitization.ts +0 -75
- package/src/security/types.ts +0 -240
- package/src/security/utils.ts +0 -52
- package/tsconfig.json +0 -39
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
# Performance Optimization
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Nexus is built for performance from the ground up with **object pooling**, **zero-copy buffers**, and **JIT compilation**.
|
|
6
|
-
|
|
7
|
-
## Context Pooling
|
|
8
|
-
|
|
9
|
-
### How It Works
|
|
10
|
-
|
|
11
|
-
Context objects are automatically pooled and reused across requests, reducing GC pressure by 60-80%.
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
const app = createApp({
|
|
15
|
-
contextPoolSize: 100 // Default pool size
|
|
16
|
-
});
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
### Monitor Pool Performance
|
|
20
|
-
|
|
21
|
-
```typescript
|
|
22
|
-
const stats = app.getPoolStats();
|
|
23
|
-
console.log(stats);
|
|
24
|
-
// {
|
|
25
|
-
// poolSize: 50, // Currently in pool
|
|
26
|
-
// maxSize: 100, // Maximum pool size
|
|
27
|
-
// created: 150, // Total contexts created
|
|
28
|
-
// reused: 100, // Contexts reused from pool
|
|
29
|
-
// hitRate: 0.67 // Pool hit rate (67%)
|
|
30
|
-
// }
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Tuning Pool Size
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
// High-traffic applications
|
|
37
|
-
const app = createApp({
|
|
38
|
-
contextPoolSize: 200
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
// Low-traffic applications
|
|
42
|
-
const app = createApp({
|
|
43
|
-
contextPoolSize: 50
|
|
44
|
-
});
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## JIT Compilation
|
|
48
|
-
|
|
49
|
-
### Enable JIT Optimization
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
const app = createApp({
|
|
53
|
-
enableJIT: true // Enabled by default
|
|
54
|
-
});
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### How JIT Works
|
|
58
|
-
|
|
59
|
-
- **Hot Path Detection** - Identifies frequently called routes
|
|
60
|
-
- **Handler Compilation** - Optimizes handler functions
|
|
61
|
-
- **Middleware Inlining** - Reduces function call overhead
|
|
62
|
-
|
|
63
|
-
### Performance Impact
|
|
64
|
-
|
|
65
|
-
- ~15-30% faster route execution for hot paths
|
|
66
|
-
- Reduced call stack depth
|
|
67
|
-
- Better V8 optimization
|
|
68
|
-
|
|
69
|
-
## Buffer Pooling
|
|
70
|
-
|
|
71
|
-
### Zero-Copy Stream Handling
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
import { createReadStream } from 'fs';
|
|
75
|
-
|
|
76
|
-
app.get('/download', async (ctx) => {
|
|
77
|
-
// Efficient streaming without buffer copying
|
|
78
|
-
const stream = createReadStream('./large-file.zip');
|
|
79
|
-
return ctx.stream(stream);
|
|
80
|
-
});
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Buffer Pool Configuration
|
|
84
|
-
|
|
85
|
-
```typescript
|
|
86
|
-
import { BufferPool } from './nexus';
|
|
87
|
-
|
|
88
|
-
const bufferPool = new BufferPool(
|
|
89
|
-
8192, // Buffer size in bytes
|
|
90
|
-
50 // Max pool size
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
// Get pool stats
|
|
94
|
-
const stats = bufferPool.getStats();
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Routing Performance
|
|
98
|
-
|
|
99
|
-
### Radix Tree Benefits
|
|
100
|
-
|
|
101
|
-
Nexus uses a Radix Tree for O(log n) route lookup:
|
|
102
|
-
|
|
103
|
-
```typescript
|
|
104
|
-
// Fast lookup even with 1000+ routes
|
|
105
|
-
app.get('/api/v1/users/:id', ...); // ~0.001ms
|
|
106
|
-
app.get('/api/v1/users/:id/posts', ...); // ~0.001ms
|
|
107
|
-
app.get('/api/v1/posts/:postId', ...); // ~0.001ms
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### vs Linear Search (Express.js)
|
|
111
|
-
|
|
112
|
-
| Routes | Express (O(n)) | Nexus (O(log n)) |
|
|
113
|
-
|--------|---------------|------------------|
|
|
114
|
-
| 10 | 0.01ms | 0.001ms |
|
|
115
|
-
| 100 | 0.10ms | 0.003ms |
|
|
116
|
-
| 1000 | 1.00ms | 0.006ms |
|
|
117
|
-
|
|
118
|
-
## Middleware Optimization
|
|
119
|
-
|
|
120
|
-
### Middleware Chain Inlining
|
|
121
|
-
|
|
122
|
-
Nexus automatically inlines middleware chains for better performance:
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
// Multiple middleware are inlined
|
|
126
|
-
app.get('/api/data', {
|
|
127
|
-
middlewares: [auth, validate, rateLimit],
|
|
128
|
-
handler: async (ctx) => { ... }
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// Results in optimized execution without repeated function calls
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Compiled Middleware
|
|
135
|
-
|
|
136
|
-
```typescript
|
|
137
|
-
import { MiddlewareOptimizer } from './nexus';
|
|
138
|
-
|
|
139
|
-
const optimizer = new MiddlewareOptimizer();
|
|
140
|
-
const optimizedMiddleware = optimizer.compose([
|
|
141
|
-
auth,
|
|
142
|
-
validate,
|
|
143
|
-
rateLimit
|
|
144
|
-
]);
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Response Optimization
|
|
148
|
-
|
|
149
|
-
### Direct Returns
|
|
150
|
-
|
|
151
|
-
Fastest - directly return data:
|
|
152
|
-
|
|
153
|
-
```typescript
|
|
154
|
-
app.get('/users', async (ctx) => {
|
|
155
|
-
return { users: [] }; // Auto-serialized
|
|
156
|
-
});
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Streaming Large Responses
|
|
160
|
-
|
|
161
|
-
For large data, use streaming:
|
|
162
|
-
|
|
163
|
-
```typescript
|
|
164
|
-
app.get('/export', async (ctx) => {
|
|
165
|
-
const stream = createLargeDataStream();
|
|
166
|
-
return ctx.stream(stream);
|
|
167
|
-
});
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Compression
|
|
171
|
-
|
|
172
|
-
Add compression middleware for reduced bandwidth:
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
import compression from 'compression';
|
|
176
|
-
|
|
177
|
-
// Note: Would need to implement compression middleware
|
|
178
|
-
app.use(compressionMiddleware());
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Memory Management
|
|
182
|
-
|
|
183
|
-
### Avoid Memory Leaks
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
// Bad - creates closures that hold references
|
|
187
|
-
const cache = new Map();
|
|
188
|
-
app.get('/data', async (ctx) => {
|
|
189
|
-
cache.set(ctx.params.id, largeObject); // Leak!
|
|
190
|
-
return {};
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
// Good - use WeakMap or LRU cache
|
|
194
|
-
const cache = new WeakMap();
|
|
195
|
-
app.get('/data', async (ctx) => {
|
|
196
|
-
// Automatically garbage collected
|
|
197
|
-
return {};
|
|
198
|
-
});
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Clear Pools Periodically
|
|
202
|
-
|
|
203
|
-
```typescript
|
|
204
|
-
// Clear context pool during low traffic
|
|
205
|
-
setInterval(() => {
|
|
206
|
-
if (getCurrentLoad() < 0.1) {
|
|
207
|
-
contextPool.clear();
|
|
208
|
-
}
|
|
209
|
-
}, 60000);
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Benchmarking
|
|
213
|
-
|
|
214
|
-
### Built-in Performance Monitoring
|
|
215
|
-
|
|
216
|
-
```typescript
|
|
217
|
-
import { PerformanceMonitor } from './nexus';
|
|
218
|
-
|
|
219
|
-
const monitor = new PerformanceMonitor();
|
|
220
|
-
|
|
221
|
-
app.use(async (ctx, next) => {
|
|
222
|
-
return monitor.measure(`${ctx.method} ${ctx.path}`, async () => {
|
|
223
|
-
return next(ctx);
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
// Get metrics
|
|
228
|
-
const metrics = monitor.getMetrics();
|
|
229
|
-
console.log(metrics);
|
|
230
|
-
// {
|
|
231
|
-
// "GET /users": { count: 1000, avgTime: 12.5, totalTime: 12500 },
|
|
232
|
-
// "POST /users": { count: 50, avgTime: 45.2, totalTime: 2260 }
|
|
233
|
-
// }
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
### Load Testing
|
|
237
|
-
|
|
238
|
-
```bash
|
|
239
|
-
# Using autocannon for benchmarking
|
|
240
|
-
npx autocannon -c 100 -d 30 http://localhost:3000/users
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
## Performance Best Practices
|
|
244
|
-
|
|
245
|
-
### ✅ DO: Use streaming for large responses
|
|
246
|
-
|
|
247
|
-
```typescript
|
|
248
|
-
app.get('/export', async (ctx) => {
|
|
249
|
-
return ctx.stream(createExportStream());
|
|
250
|
-
});
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### ✅ DO: Enable JIT compilation
|
|
254
|
-
|
|
255
|
-
```typescript
|
|
256
|
-
const app = createApp({ enableJIT: true });
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### ✅ DO: Optimize database queries
|
|
260
|
-
|
|
261
|
-
```typescript
|
|
262
|
-
// Bad - N+1 query
|
|
263
|
-
const users = await getUsers();
|
|
264
|
-
for (const user of users) {
|
|
265
|
-
user.posts = await getPosts(user.id); // N queries!
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
// Good - single query with join
|
|
269
|
-
const users = await getUsersWithPosts();
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
### ❌ DON'T: Create objects in hot paths
|
|
273
|
-
|
|
274
|
-
```typescript
|
|
275
|
-
// Bad
|
|
276
|
-
app.get('/data', async (ctx) => {
|
|
277
|
-
const config = { option: 'value' }; // Created every request
|
|
278
|
-
return await processData(config);
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
// Good
|
|
282
|
-
const CONFIG = { option: 'value' }; // Created once
|
|
283
|
-
app.get('/data', async (ctx) => {
|
|
284
|
-
return await processData(CONFIG);
|
|
285
|
-
});
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
### ✅ DO: Use appropriate pool sizes
|
|
289
|
-
|
|
290
|
-
```typescript
|
|
291
|
-
// Match your traffic patterns
|
|
292
|
-
const app = createApp({
|
|
293
|
-
contextPoolSize: Math.max(
|
|
294
|
-
100,
|
|
295
|
-
expectedConcurrentRequests * 1.5
|
|
296
|
-
)
|
|
297
|
-
});
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
## Real-World Performance
|
|
301
|
-
|
|
302
|
-
### Typical Performance Metrics
|
|
303
|
-
|
|
304
|
-
```
|
|
305
|
-
Requests per second: 10,000+
|
|
306
|
-
Average latency: 1-2ms
|
|
307
|
-
P99 latency: 5-10ms
|
|
308
|
-
Memory usage: ~50MB (baseline)
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
### Comparison
|
|
312
|
-
|
|
313
|
-
| Framework | RPS | Latency | Memory |
|
|
314
|
-
|-----------|-------|---------|--------|
|
|
315
|
-
| Express | 8,000 | 3ms | 70MB |
|
|
316
|
-
| Fastify | 12,000| 2ms | 55MB |
|
|
317
|
-
| **Nexus** | **10,000+** | **1-2ms** | **50MB** |
|
|
318
|
-
|
|
319
|
-
## Monitoring in Production
|
|
320
|
-
|
|
321
|
-
### Track Key Metrics
|
|
322
|
-
|
|
323
|
-
```typescript
|
|
324
|
-
app.use(async (ctx, next) => {
|
|
325
|
-
const start = process.hrtime.bigint();
|
|
326
|
-
const response = await next(ctx);
|
|
327
|
-
const duration = Number(process.hrtime.bigint() - start) / 1e6;
|
|
328
|
-
|
|
329
|
-
// Send to monitoring service
|
|
330
|
-
metrics.record('request.duration', duration, {
|
|
331
|
-
method: ctx.method,
|
|
332
|
-
path: ctx.path,
|
|
333
|
-
status: response.statusCode
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
return response;
|
|
337
|
-
});
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
### Pool Health Monitoring
|
|
341
|
-
|
|
342
|
-
```typescript
|
|
343
|
-
setInterval(() => {
|
|
344
|
-
const stats = app.getPoolStats();
|
|
345
|
-
|
|
346
|
-
if (stats.hitRate < 0.5) {
|
|
347
|
-
console.warn('Low pool hit rate:', stats.hitRate);
|
|
348
|
-
// Maybe increase pool size
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
metrics.gauge('context.pool.size', stats.poolSize);
|
|
352
|
-
metrics.gauge('context.pool.hitRate', stats.hitRate);
|
|
353
|
-
}, 10000);
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
## Next Steps
|
|
357
|
-
|
|
358
|
-
- 🔌 [Adapters](./08-adapters.md) - Extend with custom adapters
|
|
359
|
-
- 📖 [API Reference](./09-api-reference.md) - Complete API documentation
|
|
360
|
-
- 💡 [Examples](./10-examples.md) - Common use cases
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
[← Error Handling](./06-error-handling.md) | [Adapters →](./08-adapters.md)
|