Avoiding Event Loop Blocking in JavaScript Applications
Best practices for preventing event loop blocking to maintain responsive JavaScript applications.
0 likes
171 views
Rule Content
{
"title": "Avoiding Event Loop Blocking in JavaScript Applications",
"description": "Best practices for preventing event loop blocking to maintain responsive JavaScript applications.",
"category": "JavaScript Cursor Rules",
"rules": [
{
"id": "no-synchronous-io",
"description": "Avoid using synchronous I/O operations to prevent blocking the event loop.",
"severity": "error",
"pattern": [
{
"type": "CallExpression",
"callee": {
"type": "MemberExpression",
"object": {
"type": "Identifier",
"name": "fs"
},
"property": {
"type": "Identifier",
"name": "readFileSync"
}
}
},
{
"type": "CallExpression",
"callee": {
"type": "MemberExpression",
"object": {
"type": "Identifier",
"name": "fs"
},
"property": {
"type": "Identifier",
"name": "writeFileSync"
}
}
},
{
"type": "CallExpression",
"callee": {
"type": "MemberExpression",
"object": {
"type": "Identifier",
"name": "fs"
},
"property": {
"type": "Identifier",
"name": "appendFileSync"
}
}
},
{
"type": "CallExpression",
"callee": {
"type": "MemberExpression",
"object": {
"type": "Identifier",
"name": "fs"
},
"property": {
"type": "Identifier",
"name": "unlinkSync"
}
}
}
],
"message": "Use asynchronous file system methods instead of synchronous ones to avoid blocking the event loop."
},
{
"id": "no-blocking-loops",
"description": "Avoid long-running synchronous loops that can block the event loop.",
"severity": "error",
"pattern": [
{
"type": "WhileStatement",
"test": {
"type": "Literal",
"value": true
}
},
{
"type": "ForStatement",
"test": {
"type": "Literal",
"value": true
}
}
],
"message": "Refactor long-running loops to use asynchronous techniques like setTimeout or process.nextTick to prevent blocking the event loop."
},
{
"id": "no-heavy-computation",
"description": "Offload heavy computations to prevent blocking the event loop.",
"severity": "error",
"pattern": [
{
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "computePrimes"
}
},
{
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "calculateFibonacci"
}
}
],
"message": "Consider using Web Workers or child processes to handle CPU-intensive tasks without blocking the event loop."
},
{
"id": "no-unoptimized-regex",
"description": "Avoid using inefficient regular expressions that can cause event loop blocking.",
"severity": "error",
"pattern": [
{
"type": "Literal",
"value": "/(\\/.*)+$/"
}
],
"message": "Optimize regular expressions to prevent performance issues and potential event loop blocking."
},
{
"id": "no-large-json-operations",
"description": "Avoid processing large JSON objects synchronously to prevent blocking the event loop.",
"severity": "error",
"pattern": [
{
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "JSON.parse"
},
"arguments": [
{
"type": "Identifier",
"name": "largeJsonString"
}
]
},
{
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "JSON.stringify"
},
"arguments": [
{
"type": "Identifier",
"name": "largeJsonObject"
}
]
}
],
"message": "Use streaming parsers or chunk processing for large JSON data to avoid blocking the event loop."
}
]
}