oxc/no-accumulating-spread 성능
작동 방식
Array.prototype.reduce() 및 루프 내 누적자에 객체 또는 배열 전개 연산자를 사용하는 것을 방지합니다.
왜 문제가 되는가?
객체 및 배열 전개 연산자는 각 반복마다 새로운 객체나 배열을 생성합니다.
최악의 경우, 메모리와 시간 복잡도 모두 O(n)의 복사 작업을 유발할 수 있습니다.
누적자에 이러한 전개 연산자를 사용할 경우, 결과적으로 메모리 복잡도가 O(n^2)로 증가하고,
시간 복잡도 또한 O(n^2)로 증가하게 됩니다.
보다 깊이 있는 설명은 프라티크 쑤라나(Prateek Surana)의 블로그 포스트를 참고하세요.
예시
이 규칙에 부적절한 코드 예시:
javascript
arr.reduce((acc, x) => ({ ...acc, [x]: fn(x) }), {});
Object.keys(obj).reduce((acc, el) => ({ ...acc, [el]: fn(el) }), {});
let foo = [];
for (let i = 0; i < 10; i++) {
foo = [...foo, i];
}이 규칙에 적절한 코드 예시:
javascript
function fn(x) {
// ...
}
arr.reduce((acc, x) => acc.push(fn(x)), []);
Object.keys(obj).reduce((acc, el) => {
acc[el] = fn(el);
}, {});
// 누적자가 아닌 대상에 대한 전개는 가능한 한 피해야 하지만, 이 규칙에서는 금지되지 않음
Object.keys(obj).reduce((acc, el) => {
acc[el] = { ...obj[el] };
return acc;
}, {});
let foo = [];
for (let i = 0; i < 10; i++) {
foo.push(i);
}사용 방법
구성 파일 또는 명령줄에서 이 규칙을 활성화하려면 다음을 사용하세요:
json
{
"rules": {
"oxc/no-accumulating-spread": "error"
}
}bash
oxlint --deny oxc/no-accumulating-spread