mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 04:34:06 -08:00
refactor(benchmark): Expand js code node benchmark (#11052)
This commit is contained in:
parent
27d83e0d91
commit
4db82a91b4
|
@ -1,7 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "../scenario.schema.json",
|
|
||||||
"name": "CodeNodeJsOnceForEach",
|
|
||||||
"description": "A JS Code Node that runs once for each item and adds, modifies and removes properties. The data of 5 items is generated using DebugHelper Node, and returned with RespondToWebhook Node.",
|
|
||||||
"scenarioData": { "workflowFiles": ["js-code-node-once-for-each.json"] },
|
|
||||||
"scriptPath": "js-code-node-once-for-each.script.js"
|
|
||||||
}
|
|
|
@ -1,9 +1,31 @@
|
||||||
{
|
{
|
||||||
"createdAt": "2024-08-06T12:19:51.268Z",
|
"createdAt": "2024-08-06T12:19:51.268Z",
|
||||||
"updatedAt": "2024-08-06T12:20:45.000Z",
|
"updatedAt": "2024-08-06T12:20:45.000Z",
|
||||||
"name": "JS Code Node Once For Each",
|
"name": "JS Code Node",
|
||||||
"active": true,
|
"active": true,
|
||||||
"nodes": [
|
"nodes": [
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"respondWith": "allIncomingItems",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.respondToWebhook",
|
||||||
|
"typeVersion": 1.1,
|
||||||
|
"position": [1280, 460],
|
||||||
|
"id": "0067e317-09b8-478a-8c50-e19b4c9e294c",
|
||||||
|
"name": "Respond to Webhook"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parameters": {
|
||||||
|
"mode": "runOnceForEachItem",
|
||||||
|
"jsCode": "// Add new field\n$input.item.json.age = 10 + Math.floor(Math.random() * 30);\n// Mutate existing field\n$input.item.json.password = $input.item.json.password.split('').map(() => '*').join(\"\")\n// Remove field\ndelete $input.item.json.lastname\n// New object field\nconst emailParts = $input.item.json.email.split(\"@\")\n$input.item.json.emailData = {\n user: emailParts[0],\n domain: emailParts[1]\n}\n\nreturn $input.item;"
|
||||||
|
},
|
||||||
|
"type": "n8n-nodes-base.code",
|
||||||
|
"typeVersion": 2,
|
||||||
|
"position": [1040, 460],
|
||||||
|
"id": "56d751c0-0d30-43c3-89fa-bebf3a9d436f",
|
||||||
|
"name": "OnceForEachItemJSCode"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"httpMethod": "POST",
|
"httpMethod": "POST",
|
||||||
|
@ -13,68 +35,23 @@
|
||||||
},
|
},
|
||||||
"type": "n8n-nodes-base.webhook",
|
"type": "n8n-nodes-base.webhook",
|
||||||
"typeVersion": 2,
|
"typeVersion": 2,
|
||||||
"position": [0, 0],
|
"position": [580, 460],
|
||||||
"id": "849350b3-4212-4416-a462-1cf331157d37",
|
"id": "417d749d-156c-4ffe-86ea-336f702dc5da",
|
||||||
"name": "Webhook",
|
"name": "Webhook",
|
||||||
"webhookId": "34ca1895-ccf4-4a4a-8bb8-a042f5edb567"
|
"webhookId": "34ca1895-ccf4-4a4a-8bb8-a042f5edb567"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"respondWith": "allIncomingItems",
|
"jsCode": "const digits = '0123456789';\nconst uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst lowercaseLetters = uppercaseLetters.toLowerCase();\nconst alphabet = [digits, uppercaseLetters, lowercaseLetters].join('').split('')\n\nconst randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;\nconst randomItem = (arr) => arr.at(randomInt(0, arr.length - 1))\nconst randomString = (len) => Array.from({ length: len }).map(() => randomItem(alphabet)).join('')\n\nconst randomUid = () => [8,4,4,4,8].map(len => randomString(len)).join(\"-\")\nconst randomEmail = () => `${randomString(8)}@${randomString(10)}.com`\n\nconst randomPerson = () => ({\n uid: randomUid(),\n email: randomEmail(),\n firstname: randomString(5),\n lastname: randomString(12),\n password: randomString(10)\n})\n\nreturn Array.from({ length: 100 }).map(() => ({\n json: randomPerson()\n}))"
|
||||||
"options": {}
|
|
||||||
},
|
|
||||||
"type": "n8n-nodes-base.respondToWebhook",
|
|
||||||
"typeVersion": 1.1,
|
|
||||||
"position": [660, 0],
|
|
||||||
"id": "f0660aa1-8a65-490f-b5cd-f8d134070c13",
|
|
||||||
"name": "Respond to Webhook"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"parameters": {
|
|
||||||
"category": "randomData",
|
|
||||||
"randomDataCount": 5
|
|
||||||
},
|
|
||||||
"type": "n8n-nodes-base.debugHelper",
|
|
||||||
"typeVersion": 1,
|
|
||||||
"position": [220, 0],
|
|
||||||
"id": "50f1efe8-bd2d-4061-9f51-b38c0e3daeb2",
|
|
||||||
"name": "DebugHelper"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"parameters": {
|
|
||||||
"mode": "runOnceForEachItem",
|
|
||||||
"jsCode": "// Add new field\n$input.item.json.age = 10 + Math.floor(Math.random() * 30);\n// Mutate existing field\n$input.item.json.password = $input.item.json.password.split('').map(() => '*').join(\"\")\n// Remove field\ndelete $input.item.json.lastname\n// New object field\nconst emailParts = $input.item.json.email.split(\"@\")\n$input.item.json.emailData = {\n user: emailParts[0],\n domain: emailParts[1]\n}\n\nreturn $input.item;"
|
|
||||||
},
|
},
|
||||||
|
"id": "c30db155-73ca-48b9-8860-c3fe7a0926fb",
|
||||||
|
"name": "Code",
|
||||||
"type": "n8n-nodes-base.code",
|
"type": "n8n-nodes-base.code",
|
||||||
"typeVersion": 2,
|
"typeVersion": 2,
|
||||||
"position": [440, 0],
|
"position": [820, 460]
|
||||||
"id": "f9f2f865-e228-403d-8e47-72308359e207",
|
|
||||||
"name": "OnceForEachItemJSCode"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"connections": {
|
"connections": {
|
||||||
"Webhook": {
|
|
||||||
"main": [
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"node": "DebugHelper",
|
|
||||||
"type": "main",
|
|
||||||
"index": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"DebugHelper": {
|
|
||||||
"main": [
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"node": "OnceForEachItemJSCode",
|
|
||||||
"type": "main",
|
|
||||||
"index": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"OnceForEachItemJSCode": {
|
"OnceForEachItemJSCode": {
|
||||||
"main": [
|
"main": [
|
||||||
[
|
[
|
||||||
|
@ -85,6 +62,28 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"Webhook": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "Code",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Code": {
|
||||||
|
"main": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"node": "OnceForEachItemJSCode",
|
||||||
|
"type": "main",
|
||||||
|
"index": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"settings": { "executionOrder": "v1" },
|
"settings": { "executionOrder": "v1" },
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"$schema": "../scenario.schema.json",
|
||||||
|
"name": "CodeNodeJs",
|
||||||
|
"description": "A JS Code Node that first generates 100 items and then runs once for each item and adds, modifies and removes properties. The data returned with RespondToWebhook Node.",
|
||||||
|
"scenarioData": { "workflowFiles": ["js-code-node.json"] },
|
||||||
|
"scriptPath": "js-code-node.script.js"
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ export default function () {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const body = JSON.parse(r.body);
|
const body = JSON.parse(r.body);
|
||||||
return Array.isArray(body) ? body.length === 5 : false;
|
return Array.isArray(body) ? body.length === 100 : false;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error parsing response body: ', error);
|
console.error('Error parsing response body: ', error);
|
||||||
return false;
|
return false;
|
Loading…
Reference in a new issue