Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Aquilum переписан на Rust: полный отказ от Tauri и WebView

Aquilum переписан на Rust: полный отказ от Tauri и WebView

Локальная база знаний Aquilum претерпела масштабное обновление, в рамках которого разработчики полностью переписали проект на Rust, избавившись от связки с Tauri и системного движка WebView. Теперь интерфейс, Markdown-редактор, инструмент для построения связей и встроенный ридер функционируют на нативном коде и используют программную растеризацию.

Проект представляет собой автономную систему для работы с обычными markdown-файлами. Пользователям доступны вики-ссылки, интерактивный граф связей, табличные структуры, инструменты запросов по свойствам, мгновенный поисковый движок, средства чтения книг в форматах EPUB, FB2, MOBI и AZW3, история версий, экспорт в векторный PDF, а также специализированный MCP-сервер для взаимодействия с ИИ-агентами. Приложение распространяется под лицензией AGPL-3.0 и работает на платформах Windows, macOS и Linux.

Aquilum переписан на Rust: полный отказ от Tauri и WebView
Aquilum переписан на Rust: полный отказ от Tauri и WebView — изображение 8
Aquilum переписан на Rust: полный отказ от Tauri и WebView — изображение 9
Aquilum переписан на Rust: полный отказ от Tauri и WebView — изображение 10
Aquilum переписан на Rust: полный отказ от Tauri и WebView — изображение 11
Aquilum переписан на Rust: полный отказ от Tauri и WebView — изображение 12

Основные изменения в архитектуре

Отказ от WebView позволил радикально снизить системные требования. Порядка 70 МБ оперативной памяти теперь заменяют прежние 650 МБ, хотя показатели могут меняться в зависимости от сценариев использования. Прокрутка объемных заметок стабильно удерживает 120 кадров в секунду, укладываясь в бюджет 3–5 мс при целевых 8,3 мс. Документы размером 10 МБ открываются с отображением первого кадра всего за 131 миллисекунду вместо прежних 8 секунд.

Реклама

Таблица используемых библиотек

Архитектура обновленного приложения опирается на тщательно подобранный стек нативных крейтов:

Подсветка перерисовки в отладочной сборке Aquilum
Работа отладочной подсветки перерисовки в интерфейсе приложения
  • Окно и ввод: winit 0.31, буфер обмена arboard, системные диалоги rfd.
  • Виджеты: форк masonry_core на базе актуальной ветки xilem.
  • Текст и шрифты: parley 0.8, fontique, harfrust, skrifa, icu_segmenter, unicode-segmentation.
  • Растеризация: форки vello_cpu 0.3 и glifo, геометрия kurbo, кисти peniko.
  • Вывод графики: цепочка DXGI на WARP для Windows, softbuffer для macOS и Linux.
  • Доступность: AccessKit для основных операционных систем.
  • Файловая система и документы: atomic-write-file, notify, walkdir, blake3, yrs.
  • Хранение и поиск: встроенный rusqlite, поисковый индекс tantivy 0.26 со стеммингом rust-stemmers.

Этапы перехода на новый стек

Миграция выполнялась поэтапно. Сначала из структуры Tauri и WebView были выведены все компоненты, не связанные напрямую с интерфейсом. Локальные документы, перенесенные на yrs, а также файлы, поисковые индексы, история и настройки сформировали независимую библиотеку aquilum-core. Интерфейсная часть взаимодействует с ней напрямую без посредников.

На этапе тестирования макетов сравнивались собственная оконная система на winit совместно с vello_cpu и готовый фреймворк Freya. Процессорная растеризация показала минимальное потребление ресурсов и высокую эффективность, после чего было принято решение отказаться от привязки к GPU для рендеринга самого интерфейса, сохранив универсальность кода для трех платформ.

Ядро на Rust и обработка данных

Ядро функционирует как автономная библиотека без графической оболочки, отвечая за дисковые операции, историю изменений, поисковые запросы и MCP-протокол. Все изменения заметок проходят через централизованную функцию, которая сверяет хеш файла, выполняет атомарную запись, создает резервную копию в истории и обновляет поисковые индексы.

Встроенный Markdown-редактор в заметочнике Aquilum
Отрендеренное окно фирменного Markdown-редактора программы

Полнотекстовый поиск на базе tantivy оптимизирован по потреблению ресурсов: индексу выделено два потока и 40 МБ памяти, а кэш хранилища сокращен до двух блоков. Поверх поискового индекса работают алгоритмы ранжирования BM25F для нахождения похожих заметок и мера Adamic-Adar для анализа связей в графе. Встроенный сервер MCP функционирует исключительно на локальном интерфейсе 127.0.0.1 с обязательным токеном авторизации.

Реклама

Особенности растеризации на процессоре

Использование аппаратных видеокарт сопряжено с загрузкой громоздких драйверов в память процесса. Например, только драйвер AMD занимал около 85 МБ. Переход на программную растеризацию силами процессора, а на Windows — через программный слой WARP Direct3D, позволил полностью исключить эту зависимость. Вычисление кадра занимает около 3–5 мс, гарантируя стабильную частоту обновления.

Потребление памяти Aquilum в диспетчере задач Windows
Показатели использования оперативной памяти приложением в диспетчере задач

Оконная система и кадры

Отрисовка синхронизирована с вертикальной разверткой через отдельный поток, ожидающий событие кадра. На системах Windows используется цепочка DXGI с flip-моделью и тремя буферами, где процессор растрирует исключительно измененные фрагменты экрана. Для оптимизации энергопотребления кадры генерируются только по реальному запросу, а мигание текстовой каретки разбудит систему всего дважды в секунду вместо постоянных 120 опросов.

Модификация движков и форки

Отказ от стандартных решений потребовал создания специализированных форков. Поскольку официальные релизы графических библиотек не поддерживали нужные сценарии на CPU, разработчики адаптировали Masonry и vello_cpu. В частности, оптимизирована работа с атласом глифов: страницы уменьшены до размера 512×512 пикселей, а новые символы дорисовываются локально без перерисовки всего массива данных. Это позволило снизить рабочий набор памяти со 145 до 84 МБ.

Выборочная перерисовка интерфейса

Вместо обновления всего окна целиком внедрен механизм выборочной перерисовки измененных прямоугольных областей. Система отслеживает состояние текстовых строк, элементов прокрутки и модальных окон. Дополнительно реализована отладочная подсветка перерисовки, аналогичная инструментам разработчика в браузерах, что упрощает поиск избыточных вычислений.

Встроенная читалка электронных книг в Aquilum
Встроенный инструмент для чтения книг различных форматов

Собственный редактор Markdown

Стандартные компоненты ввода текста оказались неэффективны на больших объемах данных. Новый редактор производит построчную раскладку с помощью parley, разбирает разметку только в измененных частях документа и хранит высоту невидимых блоков без полной загрузки структуры. Заметка размером 10 МБ теперь загружается с первым кадром за 131 мс, а расход памяти на структуру абзацев сократился более чем втрое.

Оптимизация памяти и мультимедиа

Комплекс мер позволил удерживать частное потребление памяти в строгих пределах. Изображения кэшируются только во время их видимости на экране и декодируются сразу в целевом разрешении без создания полноразмерных копий. Встроенный ридер поддерживает книги различных форматов, сохраняя совместимость со стандартными закладками, а видеоматериалы воспроизводятся через системные API без привлечения тяжелых сторонних зависимостей.

Интерактивный граф связей в заметочнике Aquilum
Визуализация связей между заметками в виде графа с настройками
01.