# 성능 및 계산

## Content

대규모 `SJS.TABLE` 수식은 각 입력 조합에 대해 여러 시뮬레이션을 수행하므로 다시 계산 시간이 크게 증가할 수 있습니다.
SpreadJS는 성능 관리를 위해 계산 모드와 진행률 이벤트를 제공합니다.

## 계산 모드

기본적으로 SpreadJS는 종속 데이터가 변경되면 모든 수식을 자동으로 다시 계산합니다.
대규모 데이터 표가 포함된 통합 문서의 경우 `CalculationMode`를 사용하여 계산 동작을 조정할 수 있습니다.

```javascript
spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.partial;
```

수동으로 다시 계산을 실행하려면:

```javascript
spread.calculate();
```

>type=note
> **참고:**
>
> * 부분 모드는 대규모 데이터 표가 포함된 통합 문서를 가져올 때 권장됩니다. 그렇지 않으면 모든 `SJS.TABLE` 수식이 로드 직후 즉시 다시 계산되어 눈에 띄는 지연이 발생할 수 있습니다.
> * 부분 모드에서는 `SJS.TABLE`을 제외한 모든 수식이 종속 데이터 변경 시 자동으로 다시 계산됩니다. `SJS.TABLE` 수식은 `spread.calculate()`가 호출될 때만 다시 계산됩니다.

## 계산 진행률 모니터링

SpreadJS는 다시 계산 진행 상태를 보고하기 위해 `CalculationProgress` 이벤트를 발생시킵니다.

### 점진적 계산 활성화 (일반 수식)

일반 수식 다시 계산의 경우 점진적 계산이 활성화되면 진행률 보고를 사용할 수 있습니다.

```javascript
spread.options.incrementalCalculation = true;
```

활성화되면 `CalculationProgress` 이벤트는 다음 정보를 보고합니다.

* `totalCells`
* `pendingCells`
* `iterate` (반복 계산용)

## `SJS.TABLE` 진행률 보고

`SJS.TABLE`은 전용 진행률 보고 동작을 제공합니다.

### 이벤트 발생

`SJS.TABLE` 평가 중에는 `CalculationProgress` 이벤트가 다음과 같이 발생합니다.

* `incrementalCalculation`이 활성화되지 않은 경우에도 발생
* 일반 수식 계산 진행률과 독립적으로 발생

통합 문서에 `SJS.TABLE`이 포함되어 있으면 이벤트는 다음과 같이 발생합니다.

1. `SJS.TABLE`이 계산 대상으로 감지되면 `dataTableProgress: 0`과 함께 이벤트가 발생합니다.
2. 평가가 진행되는 동안 이벤트는 계속 발생하며 `dataTableProgress` 값을 제공합니다.

이 값은 데이터 표 계산의 진행 상태를 나타냅니다.

### 이벤트 페이로드 동작

`SJS.TABLE`이 평가되는 동안:

* 이벤트 페이로드에는 `dataTableProgress`가 포함됩니다.
* `totalCells`, `pendingCells`, `iterate`와 같은 다른 진행률 필드는 포함되지 않습니다.

`dataTableProgress`는 데이터 표 계산의 완료 비율을 나타냅니다.

### 예제

```javascript
spread.bind(
  GC.Spread.Sheets.Events.CalculationProgress,
  function (e, info) {
    if (info.dataTableProgress !== undefined) {
      console.log(
        "Data Table: " +
        (info.dataTableProgress * 100).toFixed(0) + "%"
      );
      return;
    }

    if (info.pendingCells === 0) {
      console.log("Calculation finished");
    }
  }
);
```

이러한 분리는 대규모 `SJS.TABLE` 시뮬레이션이 과도한 일반 계산 완료 알림을 생성하지 않도록 하면서도 데이터 표 계산에 대한 명확한 진행률 정보를 제공합니다.

## 상태 표시줄 표시기

`SJS.TABLE` 계산 중에는 기본 제공 SpreadJS 상태 표시줄에 다음과 같이 자동으로 표시됩니다.

```auto
Data Table: x%
```

별도의 설정은 필요하지 않습니다. 이를 통해 데이터 표 계산이 진행 중임을 시각적으로 확인할 수 있습니다.
![image-20260420.5ca791.png](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/image-20260420.5ca791-20260529.f941e6.png)