Skip to content

大きなファイル ​

VMark はほとんどの Markdown ファイルを瞬時に開きますが、非常に大きなファイルは応答性を保つために追加の配慮が必要です。このページでは、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 などのツールを使用してください。

サイズはファイルを読み取らずに OS 経由で確認されます。Markdown ファイルが 1 MB 未満の場合、VMark は続いてファイルのバイトを 1 行ずつ走査してブロック数を見積もります — Markdown の解析ではありません — そのため判定は高速なまま、ドキュメントが WebView に読み込まれることもありません。

なぜ大きなファイルにソースモードを使うのか ​

ソースモードはビューポート仮想化を備えた CodeMirror を使用します — ドキュメントの可視部分のみがレンダリングされます。WYSIWYG モードは Tiptap/ProseMirror を使用し、ドキュメント内のすべてのブロックに対して DOM ノードを構築する必要があります。約 2,250 ブロックの 1.4 MB の Markdown ファイルでは、最初に開くのに約 15 秒かかります。同じファイルをソースモードでは 1 秒未満で開けます。

表示の構築コストを左右するのはファイルサイズではなくブロック数です。ほぼ同じサイズ(377〜397 KB)で、バイトの区切り方だけが異なる 3 つのフィクスチャは、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 のハード拒否はユーザーが調整できません。Webview はメモリ不足クラッシュのリスクなしに任意の大きさの文字列を安全に保持できないためです。

ヒント ​

  • 非常に大きなファイルを WYSIWYG で編集し続ける必要がある場合は、インデックスドキュメントからリンクされた小さなファイルに分割することを検討してください。Markdown は小さな章のセットとしてうまく機能します。
  • 大きなファイルを読むか検索するだけでよい場合、行番号定規と Find(Mod + F)を備えたソースモードが通常は最速のワークフローです。
  • 書式 → CJK → ファイル全体を書式設定 などのドキュメント全体に対するコマンドは、ソースモードのドキュメントでも正しく実行されます。

エッジケース ​

  • 開いている間にファイルが大きくなる。 VMark は開いた時点のサイズに基づいて区分を決定します。編集中に 2 MB に成長したファイルは、選択したモードのままになります。
  • シンボリックリンク。 サイズはターゲットファイルを反映するため、10 MB のファイルへのシンボリックリンクは巨大として扱われます。
  • 空のファイル。 0 バイトのファイルは小として扱われ、WYSIWYG で開きます。
  • サイズチェックと読み取りの間にファイルが消える。 通常の「ファイルが見つかりません」エラーが表示されます — 追加の警告は出ません。

既知の制限 ​

  • ブロック数は解析ではなく推定です。空行で区切られたテキスト、見出し、リスト項目、表の行、各フェンス付きコードブロックを 1 ブロックとして数え、フェンス内のコードとフロントマターの行はスキップします。特殊な構成のドキュメントは、WYSIWYG でも十分速かったのにソースモードに振り分けられることがあります。WYSIWYG に切り替え は 1 クリックです。Markdown 以外のファイルがブロック数で振り分けられることはありません。
  • WYSIWYG は開く時点でドキュメントのすべてのブロックを構築します — 後から読み込み・描画されるのは、表示領域に近づいた画像とインライン数式だけです — そのため大きなファイルを WYSIWYG に切り替えると、上で説明したとおりの読み込み時間がそのままかかります。