Обычный редактор читает файл в память целиком и надеется, что хватит. The отображает оригинал в память через mmap и честно сообщает, в каком режиме сейчас работает и что в этом режиме отключено.
механика
Файлы от 100 МБ открываются через memory-mapping: страницы подгружаются по мере обращения, поэтому открытие почти не расходует RAM и не требует полного чтения с диска.
Переход к строке и позиция курсора мгновенны, а интерфейс не подвисает на подсчёте: индекс строится параллельно и статус виден в строке состояния.
Буфер собирается из кусков, а не переписывается: вставка в начало файла на сотни МБ стоит столько же, сколько вставка в конец. Отмены — на снимках.
режимы
Режим выбирается по размеру файла и виден в строке состояния. Это ключевое отличие от «внезапных тормозов»: поведение предсказуемо, а ограничения названы вслух.
режим 01
Обычные файлы. Всё включено: подсветка, свёртка, поиск по проекту, git-маркеры, языковой интеллект.
режим 02
Крупные логи и дампы. Файл отображается через mmap, тяжёлые проходы по всему тексту ограничиваются.
режим 03
Гигабайтные файлы. Работа идёт срезами: редактор осознанно отключает то, что требует обхода всего содержимого.
placeholder
Точные пороги переключения режимов и список функций, отключаемых в каждом из них, нужно подтвердить по коду 0.4.3 перед публикацией. Значения выше приведены как ориентир из проектной документации, а не как замер.
данные
| ts | shard | op | rows | ms | |
|---|---|---|---|---|---|
| 994 112 | 21:14:02.118 | 07 | flush | 2 048 | 18.4 |
| 994 113 | 21:14:02.140 | 08 | flush | 2 048 | 17.1 |
| 994 114 | 21:14:02.166 | 08 | queue | 8 412 | — |
| 994 115 | 21:14:02.201 | 03 | rebalance | 2 048 | 57.0 |
| 994 116 | 21:14:02.244 | 03 | checksum | 44 907 | 0.4 |
| 994 117 | 21:14:02.288 | 03 | retry | 44 907 | 42.6 |
| 994 118 | 21:14:02.301 | 03 | flush | 2 048 | 19.8 |
| 994 119 | 21:14:02.334 | 04 | flush | 2 048 | 16.9 |
и ещё одно
Поэтому сохранение атомарное: сбой или отключение питания во время записи не оставит «рваный» файл. Открытый файл заблокирован между процессами, а если он изменился на диске — редактор скажет об этом, а не перезапишет молча.