Minimize memory allocations by avoiding intermediate objects, sharing underlying buffers, and eliminating unnecessary array operations. This is particularly important in hot code paths and when processing large datasets.
Minimize memory allocations by avoiding intermediate objects, sharing underlying buffers, and eliminating unnecessary array operations. This is particularly important in hot code paths and when processing large datasets.
Key strategies:
Buffer.from(arg.buffer, arg.byteOffset, arg.byteLength)
instead of Buffer.from(arg)
new Uint8Array(value)
instead of new Uint8Array(Buffer.from(value).buffer)
Example of optimization:
// Before: Creates unnecessary intermediate array
const results: Value[] = []
for (const arg of node.args) {
results.push(await this.interpretNode(arg, queryable, scope, generators))
}
return results[results.length - 1]
// After: Only compute what's needed
let lastResult: Value
for (const arg of node.args) {
lastResult = await this.interpretNode(arg, queryable, scope, generators)
}
return lastResult
Enter the URL of a public GitHub repository