대용량 파일
VMark는 대부분의 마크다운 파일을 즉시 열지만, 매우 큰 파일은 응답성을 유지하기 위해 추가적인 주의가 필요합니다. 이 페이지에서는 VMark가 대용량 파일을 어떻게 처리하는지, 그리고 동작을 조정하는 방법을 설명합니다.
"대용량"의 기준
VMark는 파일을 열기 전에 크기와, Markdown의 경우 추정 블록 수에 따라 분류합니다:
| 크기 또는 블록 수 | 분류 | 동작 |
|---|---|---|
| < 1 MB 및 추정 1,200개 블록 미만 | 작음 | WYSIWYG(서식 있는 텍스트) 모드에서 즉시 열립니다. |
| 1 MB – 5 MB 또는 추정 1,200개 이상 블록 | 큼 | 기본적으로 소스 모드에서 열립니다 — 1초 미만. 상태 표시줄에서 "WYSIWYG으로 전환"을 제공합니다. |
| 5 MB – 50 MB | 매우 큼 | 먼저 확인 대화상자가 나타납니다. 소스 모드에서만 열립니다. |
| ≥ 50 MB | 거부됨 | VMark가 파일 열기를 거부합니다. 대신 less, bat 또는 유사한 도구를 사용하세요. |
크기는 파일을 읽지 않고 운영 체제를 통해 확인됩니다. Markdown 파일이 1 MB 미만이면 VMark가 이어서 파일 바이트를 한 줄씩 스캔해 블록 수를 추정합니다 — Markdown 분석이 아닙니다 — 따라서 판단이 빠르게 유지되고 문서가 웹뷰에 로드되지 않습니다.
대용량 파일에 소스 모드를 사용하는 이유
소스 모드는 뷰포트 가상화가 적용된 CodeMirror를 사용합니다 — 문서의 보이는 부분만 렌더링됩니다. WYSIWYG 모드는 Tiptap/ProseMirror를 사용하며, 문서의 모든 블록에 대해 DOM 노드를 만들어야 합니다. 1.4 MB / 약 2,250개 블록의 마크다운 파일에서 처음 열 때 약 15초가 소요됩니다. 소스 모드는 동일한 파일을 1초 이내에 엽니다.
뷰 구성 비용을 좌우하는 것은 파일 크기가 아니라 블록 수입니다. 거의 같은 크기(377~397 KB)이면서 바이트가 블록으로 나뉘는 방식만 다른 세 개의 픽스처는 601, 1,201, 3,401개 블록에서 각각 3.6초, 5.2초, 18초에 열렸습니다. 짧은 블록 3,773개로 이루어진 524 KB 문서는 해당 머신에서 30초 넘게 걸렸습니다 — 1 MB 바이트 임계값 아래이지만 창이 응답을 멈추는 지점을 훨씬 넘습니다. 그래서 블록 추정만으로 파일을 소스 모드로 라우팅할 수 있습니다.
시간의 대부분은 파싱이 아니라 뷰를 구성하고 배치하는 데 쓰입니다. 느린 컴퓨터에서 긴 CJK 문서를 측정한 결과, 파싱은 에디터를 여는 비용의 4분의 1에서 5분의 2였습니다.
문서를 여는 동안
VMark는 문서의 서식 있는 텍스트 뷰를 만들기 전에 창이 메뉴, 단축키, 닫기 버튼에 응답하도록 하며, 문서는 그 직후에 나타납니다. 예전에는 긴 문서를 먼저 만들었기 때문에 느린 컴퓨터에서는 창이 준비되지 못할 수 있었습니다. 메뉴 반응이 늦어지고, 로그에는 menu commands did not mount within 5000ms가 남았습니다.
WYSIWYG가 열 때 하는 작업도 문서 규모에 걸맞게 유지됩니다:
- 이미지는 보이는 영역에 가까워질 때 불러옵니다.
- CJK 자간(설정 → 에디터 → 타이포그래피)은 꺼져 있는 동안(기본값) 아무 작업도 하지 않으며, 켜져 있으면 문서를 한 번만 검사합니다.
- 코드 강조, CJK 자간, lint 표시 같은 장식의 비용은 문서 길이에 대략 비례합니다. 예전에는 아주 긴 문서에서 제곱에 비례하는 비용이 들었습니다.
상태 표시줄 안내
- WYSIWYG에서 대용량 파일 열기: 에디터가 마운트되는 동안 상태 표시줄 왼쪽에 "대용량 파일을 여는 중 (N MB)…" 라벨과 함께 무한 스피너가 표시됩니다. 에디터가 상호작용 가능해지면 사라집니다.
- 자동으로 소스 모드에서 열린 파일: 상태 표시줄에 "소스 모드에서 열렸습니다 (대용량 파일)." 와 WYSIWYG으로 전환 링크가 표시됩니다. 링크를 클릭하면 활성 탭이 WYSIWYG으로 전환됩니다. 파일을 닫고 다시 열면 소스 모드로 돌아갑니다 — 재정의는 세션별로 적용됩니다.
- WYSIWYG로 표시할 수 없는 문서: 인용문이나 목록이 1000단계를 넘게 중첩된 문서는 파일 크기와 관계없이 서식 있는 텍스트로 분석할 수 없습니다. 중첩 깊이를 알려 주는 메시지와 함께 소스 모드로 열리며, 상태 표시줄에 "소스 모드로 열림(WYSIWYG로 표시할 수 없음)." 이 표시됩니다. 중첩을 줄인 뒤 WYSIWYG으로 전환 을 사용하세요.
설정
설정 → 에디터 → 대용량 파일을 엽니다:
- 큰 파일을 자동으로 소스 모드에서 열기 (기본값: 켜짐) — 1 MB가 넘는 파일과 블록 밀도가 높은 Markdown이 대상입니다. 5 MB까지의 파일에 대해 더 긴 열기 시간을 감수하고 WYSIWYG을 선호한다면 끄세요.
- 5 MB 이상 파일을 열기 전에 경고 (기본값: 켜짐) — 5 MB와 50 MB 사이의 파일에 대한 확인 대화상자를 건너뛰려면 끄세요. 이러한 파일은 여전히 소스 모드에서 열립니다.
50 MB의 강제 거부 한계는 사용자가 조정할 수 없습니다. 웹뷰는 메모리 부족 충돌의 위험 없이 임의로 큰 문자열을 안전하게 보유할 수 없습니다.
팁
- 매우 큰 파일을 WYSIWYG에서 계속 편집해야 한다면, 인덱스 문서에서 링크된 더 작은 파일들로 분할하는 것을 고려하세요. 마크다운은 더 작은 챕터들의 집합으로 잘 작동합니다.
- 대용량 파일을 읽거나 검색만 해야 한다면, 줄 번호 표시기와
찾기(Mod + F)가 있는 소스 모드가 보통 가장 빠른 작업 흐름입니다. - 서식 → CJK → 전체 파일 서식 지정과 같은 전체 문서 명령은 소스 모드 문서에서도 올바르게 실행됩니다.
엣지 케이스
- 파일이 열린 상태에서 커집니다. VMark는 열 때의 크기를 기준으로 분류를 결정합니다. 편집 중에 2 MB로 커진 파일은 선택한 모드를 유지합니다.
- 심볼릭 링크. 크기는 대상 파일을 반영하므로, 10 MB 파일에 대한 심볼릭 링크는 매우 큰 파일로 처리됩니다.
- 빈 파일. 0바이트 파일은 작은 파일로 분류되어 WYSIWYG에서 열립니다.
- 크기 확인과 읽기 사이에 파일이 사라짐. 일반적인 "파일을 찾을 수 없음" 오류가 표시되며, 추가 경고는 발생하지 않습니다.
알려진 제한 사항
- 블록 수는 분석이 아니라 추정입니다. 빈 줄로 구분된 텍스트, 제목, 목록 항목, 표 행, 각 펜스 코드 블록을 하나의 블록으로 세고, 펜스 안의 코드와 프런트매터 줄은 건너뜁니다. 특이한 구조의 문서는 WYSIWYG로도 충분히 빨랐을 텐데 소스 모드로 라우팅될 수 있습니다. WYSIWYG으로 전환 은 클릭 한 번입니다. Markdown이 아닌 파일은 블록 수로 라우팅되지 않습니다.
- WYSIWYG는 여전히 파일을 열 때 문서의 모든 블록을 구성합니다 — 이미지와 인라인 수식만 보이는 영역에 가까워질 때 나중에 불러오거나 렌더링됩니다 — 따라서 대용량 파일을 WYSIWYG로 전환하면 위에서 설명한 열기 시간이 모두 소요됩니다.