* Tests hypermedia memory usage
()
| 501 | * Tests hypermedia memory usage |
| 502 | */ |
| 503 | async function testHypermediaMemory () { |
| 504 | console.log("🔥 Hypermedia Memory Test"); |
| 505 | console.log("-".repeat(50)); |
| 506 | |
| 507 | const monitor = new MemoryMonitor(); |
| 508 | const server = tenso({ |
| 509 | silent: true, |
| 510 | logging: { enabled: false }, |
| 511 | hypermedia: { enabled: true, header: true } |
| 512 | }); |
| 513 | |
| 514 | monitor.snapshot("Initial state"); |
| 515 | |
| 516 | // Create test data with many linkable fields |
| 517 | const testData = Array.from({ length: 1000 }, (_, i) => ({ |
| 518 | id: i, |
| 519 | user_id: i + 1000, |
| 520 | category_id: i % 10 + 1, |
| 521 | related_ids: [i + 1, i + 2, i + 3], |
| 522 | profile_url: `/users/${i + 1000}`, |
| 523 | comments_url: `/posts/${i}/comments`, |
| 524 | tags: [`tag${i % 20}`, `category${i % 10}`] |
| 525 | })); |
| 526 | |
| 527 | // Process hypermedia for this data many times |
| 528 | for (let i = 0; i < 100; i++) { |
| 529 | const req = { |
| 530 | method: "GET", |
| 531 | url: "/api/posts", |
| 532 | headers: { accept: "application/json" }, |
| 533 | parsed: { |
| 534 | searchParams: new URLSearchParams("page=1&page_size=10"), |
| 535 | href: "http://localhost/api/posts" |
| 536 | }, |
| 537 | hypermedia: true, |
| 538 | hypermediaHeader: true, |
| 539 | server: server |
| 540 | }; |
| 541 | |
| 542 | const res = { |
| 543 | statusCode: 200, |
| 544 | headers: {}, |
| 545 | getHeader: name => res.headers[name], |
| 546 | removeHeader: name => delete res.headers[name], |
| 547 | header: (name, value) => res.headers[name] = value, // eslint-disable-line no-return-assign |
| 548 | getHeaders: () => res.headers |
| 549 | }; |
| 550 | |
| 551 | // This would normally be called by the hypermedia middleware |
| 552 | // We're simulating the link generation process |
| 553 | const rep = { data: testData.slice(i * 10, (i + 1) * 10) }; |
| 554 | |
| 555 | // Simulate hypermedia processing |
| 556 | server.render(req, res, rep); |
| 557 | |
| 558 | if (i % 20 === 0) { |
| 559 | monitor.forceGC(); |
| 560 | } |