Drafta 1.1: в пять тысяч заметок без задержек
Drafta 1.1 про скорость: автосохранение за 7 мс, поиск за миллисекунды, запуск за доли секунды, переключение заметок без перезагрузки редактора.
Релиз 1.1 почти целиком про скорость. Всё замерял на искусственной библиотеке в 5000 заметок: так видно, где редактор тормозит у тех, кто пишет в нём годами.
Что было медленно
Сначала я прогнал аудит производительности. Три места тормозили заметнее всего:
- Автосохранение. Каждое сохранение пересобирало индекс вики-ссылок по всей библиотеке. На 5000 заметках это 150 мс на главном потоке, и при наборе раз в полсекунды чувствовалась «запинка».
- Поиск. Каждый запрос приводил к нижнему регистру весь текст библиотеки и перебирал его подряд. До 1,6 секунды на запрос, всё это время интерфейс стоял.
- Запуск. Все файлы читались по одному под координатором файлов на главном потоке: около 7 секунд до первой заметки.
Что стало
| Операция | Было | Стало |
|---|---|---|
| Автосохранение заметки | ~150 мс | ~7 мс |
| Поиск по тексту | 0,8–1,6 с | 3–7 мс, в фоне |
| Загрузка библиотеки | ~7,4 с | ~0,15 с, в фоне |
| Счётчики блокнотов в сайдбаре | до 218 мс | меньше 0,01 мс |
- Сохранение теперь обновляет индексы только изменённой заметки.
- Поиск идёт по заранее подготовленной копии текста в фоновом потоке, а ⌘P ставит совпадения по заголовку выше совпадений по тексту.
- Библиотека читается параллельно под одним координатором на всю папку.
- Редактор больше не пересоздаётся при переключении заметки. Mermaid, KaTeX и подсветка кода подгружаются, только когда заметка их использует, а превью перерисовывает только изменённые блоки.
Переключение режима с клавиатуры
⌥⌘P по кругу переключает редактор, сплит и чистовой просмотр. Курсор, выделение и прокрутка остаются на месте, так что после круга можно сразу продолжать печатать. ⌥⌘1, ⌥⌘2 и ⌥⌘3 включают режим напрямую.
Сохранность текста
Раз редактор стал общим для всех заметок окна, я отдельно проверил, что набранное нигде не теряется: при переключении заметок, закрытии окна, выходе из приложения, при синхронизации и правке через MCP. Если заметку меняют снаружи, пока ты печатаешь, текст остаётся в редакторе, а внешняя версия сохраняется в ревизиях. Ревью шло в четыре круга, пока не закрылась последняя щель.
Обновление придёт само, или скачайте его на drafta.org.