Deno 2.9's task cache turns a 4-second build into a 10-millisecond skip
Deno 작업 캐시, 비싼 빌드는 10ms로 줄였지만 입력 추적 비용도 따져야
Deno 2.9의 작업 캐시는 `deno.json`에 입력 파일을 지정하면 변경이 없을 때 명령 실행을 건너뜁니다. 한 개발자의 시험에서는 40개 파일을 처리하는 작업이 약 4초에서 9~10ms로 줄었지만, 3,000개 파일을 추적한 캐시 적중은 간단한 명령을 그냥 실행하는 것보다 느렸습니다.
- 주제
본문
Deno 2.9의 deno task는 작업 정의에 files를 적어 입력 글롭을 지정하면 캐시를 사용합니다. 입력 파일의 내용과 명령 및 추가 인수, env에 선언한 환경 변수 값이 지문에 반영되며, output을 지정하면 캐시 적중 때 결과 파일을 복원합니다. files가 없으면 작업은 매번 실행됩니다.
DEV Community에 10월 29일 게시된 글에서 저자는 Deno 2.9.8 Linux x86_64 환경으로 직접 시험했습니다. 40개 파일, 약 1.1MB를 읽어 파일마다 SHA-256 계산을 2,000회 수행한 작업은 콜드 실행에서 3.939~4.289초, 변경 없는 캐시 적중에서 9.3~10ms가 걸렸습니다. 이 비교는 저자가 만든 CPU 집약 작업의 결과입니다. 파일 시각만 바뀌고 내용이 그대로면 적중했고, 내용이 달라지면 작업을 다시 실행했습니다.
입력 범위가 커지면 캐시 확인도 비용이 됩니다. 3,000개 파일, 12MB를 추적한 시험에서 아무 작업도 하지 않는 명령의 캐시 적중은 31.4~34.6ms였고, 입력 추적 없이 명령을 실행하면 8.0~10.6ms였습니다. 저자는 이 트리의 캐시 미스 시간을 재지 않았습니다. 미스에서는 입력 확인 뒤 실제 작업도 실행되므로 짧은 작업에 큰 입력 글롭을 지정하면 확인 비용이 절감분을 넘을 가능성이 있지만, 해당 미스 경로의 측정값은 없습니다.
작업이 files 글롭에 포함된 파일을 직접 수정하면 다음 실행에서 입력 지문이 달라져 매번 다시 실행되는 사례도 확인했습니다. 반면 지정한 output 파일을 지운 뒤 실행했을 때는 명령을 재실행하지 않고 캐시에서 결과물을 복원했습니다. 저자는 동시에 시작한 두 프로세스가 모두 작업을 실행했다고도 보고했습니다. 따라서 이 결과는 반복되는 고비용 작업의 변경 없는 적중에서 큰 시간 절약을 보여주지만, 작업별 입력 범위와 쓰기 위치, 동시 실행 여부에 따라 비용이 달라집니다.
자료: DEV Community / 정리·해설: Trawling
참고 자료
- deno task | Deno Docs — https://docs.deno.com/runtime/reference/cli/task/