Skip to content
← Back to rules

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

참고 자료