**What** Improve serialization further on complex entities to reduce bottleneck. **Notes** It might good at some point to integrate these improvements into mikro orm package 📦 **Load test** The test is using autocanon and wrap the serializers call behind http end points. Each product has 2 variants, 3 options and 3 options values. autocanon is configured for 10 connections during 20 second and 1 pipelining. This is repeated for each configuration and each catch size. 🚀 Load Testing Serializers with Autocannon ================================================================================ ==================================================================================================== 🎯 TESTING 10 PRODUCTS ==================================================================================================== 🖥️ Server started on port 57840 📊 Testing with 10 products per request 🔥 Load testing: MikroOrm -------------------------------------------------- Requests/sec: 33.85 Avg Latency: 319.30ms P90 Latency: 327.00ms Throughput: 31.36 MB/s Errors: 0 🔥 Load testing: Current -------------------------------------------------- Requests/sec: 821.15 Avg Latency: 11.67ms P90 Latency: 12.00ms Throughput: 0.18 MB/s Errors: 0 🔥 Load testing: Optimized -------------------------------------------------- Requests/sec: 1286.75 Avg Latency: 7.25ms P90 Latency: 7.00ms Throughput: 37.31 MB/s Errors: 0 📈 Load Testing Performance Comparison for 10 products: -------------------------------------------------------------------------------------------------------------------------------------------- Serializer Requests/sec Avg Latency (ms) P90 Latency (ms) Throughput (MB/s) Errors RPS Improvement -------------------------------------------------------------------------------------------------------------------------------------------- MikroOrm 33.85 319.30 327.00 31.36 0 baseline Current 821.15 11.67 12.00 0.18 0 24.3x Optimized 1286.75 7.25 7.00 37.31 0 38.0x 🎯 Key Insights for 10 products: • Optimized serializer handles 1.6x more requests/sec than Current • Optimized serializer handles 38.0x more requests/sec than MikroOrm • 37.9% lower latency compared to Current serializer 🔴 Server stopped for 10 products test ==================================================================================================== 🎯 TESTING 100 PRODUCTS ==================================================================================================== 🖥️ Server started on port 57878 📊 Testing with 100 products per request 🔥 Load testing: MikroOrm -------------------------------------------------- Requests/sec: 3.69 Avg Latency: 3241.29ms P90 Latency: 4972.00ms Throughput: 35.04 MB/s Errors: 0 🔥 Load testing: Current -------------------------------------------------- Requests/sec: 87.45 Avg Latency: 117.20ms P90 Latency: 116.00ms Throughput: 0.02 MB/s Errors: 0 🔥 Load testing: Optimized -------------------------------------------------- Requests/sec: 143.56 Avg Latency: 70.62ms P90 Latency: 72.00ms Throughput: 42.22 MB/s Errors: 0 📈 Load Testing Performance Comparison for 100 products: -------------------------------------------------------------------------------------------------------------------------------------------- Serializer Requests/sec Avg Latency (ms) P90 Latency (ms) Throughput (MB/s) Errors RPS Improvement -------------------------------------------------------------------------------------------------------------------------------------------- MikroOrm 3.69 3241.29 4972.00 35.04 0 baseline Current 87.45 117.20 116.00 0.02 0 23.7x Optimized 143.56 70.62 72.00 42.22 0 38.9x 🎯 Key Insights for 100 products: • Optimized serializer handles 1.6x more requests/sec than Current • Optimized serializer handles 38.9x more requests/sec than MikroOrm • 39.7% lower latency compared to Current serializer 🔴 Server stopped for 100 products test ==================================================================================================== 🎯 TESTING 1,000 PRODUCTS ==================================================================================================== 🖥️ Server started on port 57930 📊 Testing with 1000 products per request 🔥 Load testing: MikroOrm -------------------------------------------------- Requests/sec: 0.00 Avg Latency: 0.00ms P90 Latency: 0.00ms Throughput: 0.00 MB/s Errors: 10 🔥 Load testing: Current -------------------------------------------------- Requests/sec: 0.00 Avg Latency: 0.00ms P90 Latency: 0.00ms Throughput: 0.00 MB/s Errors: 20 🔥 Load testing: Optimized -------------------------------------------------- Requests/sec: 13.79 Avg Latency: 792.94ms P90 Latency: 755.00ms Throughput: 41.47 MB/s Errors: 0 📈 Load Testing Performance Comparison for 1000 products: -------------------------------------------------------------------------------------------------------------------------------------------- Serializer Requests/sec Avg Latency (ms) P90 Latency (ms) Throughput (MB/s) Errors RPS Improvement -------------------------------------------------------------------------------------------------------------------------------------------- MikroOrm 0.00 0.00 0.00 0.00 10 NaNx Current 0.00 0.00 0.00 0.00 20 NaNx Optimized 13.79 792.94 755.00 41.47 0 Infinityx 🎯 Key Insights for 1000 products: • Optimized serializer handles Infinityx more requests/sec than Current • Optimized serializer handles Infinityx more requests/sec than MikroOrm • -Infinity% lower latency compared to Current serializer 🔴 Server stopped for 1000 products test ====================================================================================================================================================== 📊 COMPREHENSIVE AUTOCANNON LOAD TESTING ANALYSIS ====================================================================================================================================================== 🚀 Autocannon Load Testing Scaling Analysis: -------------------------------------------------------------------------------------------------------------------------------------------- Size RPS (M/O/Op) Avg Latency (M/O/Op) P90 Latency (M/O/Op) Throughput MB/s (M/O/Op) Speedup vs M (O/Op) Speedup vs O (Op) -------------------------------------------------------------------------------------------------------------------------------------------- 10 33.9/821.1/1286.8 319.3/11.7/7.3 327.0/12.0/7.0 31.4/0.2/37.3 24.3x/38.0x 1.6x 100 3.7/87.5/143.6 3241.3/117.2/70.6 4972.0/116.0/72.0 35.0/0.0/42.2 23.7x/38.9x 1.6x 1,000 0.0/0.0/13.8 0.0/0.0/792.9 0.0/0.0/755.0 0.0/0.0/41.5 NaNx/Infinityx Infinityx 🎯 Overall Load Testing Performance Summary: 📈 10 products: • +56.7% more requests/sec vs Current (821.1 → 1286.8) • +3701.3% more requests/sec vs MikroOrm (33.9 → 1286.8) 📈 100 products: • +64.2% more requests/sec vs Current (87.5 → 143.6) • +3790.5% more requests/sec vs MikroOrm (3.7 → 143.6) 📈 1000 products: • +Infinity% more requests/sec vs Current (0.0 → 13.8) • +Infinity% more requests/sec vs MikroOrm (0.0 → 13.8)
69 lines
1.8 KiB
JSON
69 lines
1.8 KiB
JSON
{
|
|
"name": "@medusajs/utils",
|
|
"version": "2.10.3",
|
|
"description": "Medusa utilities functions shared by Medusa core and Modules",
|
|
"main": "dist/index.js",
|
|
"exports": {
|
|
".": "./dist/index.js"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/medusajs/medusa",
|
|
"directory": "packages/core/utils"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.0.0"
|
|
},
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"files": [
|
|
"dist",
|
|
"!dist/**/__tests__",
|
|
"!dist/**/__mocks__",
|
|
"!dist/**/__fixtures__"
|
|
],
|
|
"author": "Medusa",
|
|
"license": "MIT",
|
|
"devDependencies": {
|
|
"@medusajs/types": "2.10.3",
|
|
"@swc/core": "^1.7.28",
|
|
"@swc/jest": "^0.2.36",
|
|
"@types/autocannon": "^7.12.5",
|
|
"@types/express": "^4.17.21",
|
|
"autocannon": "^7.15.0",
|
|
"expect-type": "^0.20.0",
|
|
"express": "^4.21.0",
|
|
"jest": "^29.7.0",
|
|
"pg-god": "^1.0.12",
|
|
"rimraf": "^5.0.1",
|
|
"typescript": "^5.6.2"
|
|
},
|
|
"dependencies": {
|
|
"@graphql-codegen/core": "^4.0.2",
|
|
"@graphql-codegen/typescript": "^4.0.9",
|
|
"@graphql-tools/merge": "^9.0.7",
|
|
"@graphql-tools/schema": "^10.0.6",
|
|
"@medusajs/deps": "2.10.3",
|
|
"@types/pluralize": "^0.0.33",
|
|
"bignumber.js": "^9.1.2",
|
|
"dotenv": "^16.4.5",
|
|
"dotenv-expand": "^11.0.6",
|
|
"graphql": "^16.9.0",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"pg-connection-string": "^2.7.0",
|
|
"pluralize": "^8.0.0",
|
|
"ulid": "^2.3.0",
|
|
"zod": "3.25.76"
|
|
},
|
|
"peerDependencies": {
|
|
"express": "^4.21.0"
|
|
},
|
|
"scripts": {
|
|
"build": "rimraf dist && tsc --build",
|
|
"watch": "tsc --build --watch",
|
|
"test": "jest --silent=false --bail --forceExit --testPathIgnorePatterns='/integration-tests/' -- src/**/__tests__/**/*.ts",
|
|
"test:integration": "jest --silent --bail --forceExit -- src/**/integration-tests/__tests__/**/*.ts"
|
|
}
|
|
}
|