Приятно, когда большие и известные проекты делятся своими техническими решениями. Недавно Notion рассказал, как ускорил свою веб-версию с помощью SQLite на 20%. В некоторых странах с медленным интернетом результат еще круче —до 33%.
Как это сделали?
Ускорить Notion в браузерах удалось благодаря реализации SQLite на WebAssembly.
🔵 Для сохранения данных между сессиями используется API Origin Private File System или OPFS, который позволяет сайту читать и записывать файлы на устройстве пользователя.
🔵Работу OPFS обеспечивают Web Workers — скрипты, которые запускаются в фоновом режиме и отвечают за создание и запуск баз данных SQLite.
🔵 Они также внедрили SharedWorker. У каждой вкладки, где открыт Notion, есть свой веб воркер. Они все могут делать запросы к файлу SQLite, но делать записи может только веб воркер активной вкладки. SharedWorker (если совсем просто говорить) отвечает за определение активной вкладки и переключение между веб-воркерами в соответствии с действиями пользователя.
Вот так все просто?
На самом деле совсем не просто, но менее сложные решения, которые рассматривали в Notion, не сработали.
💬 Во время тестирования новой архитектуры, часть юзеров столкнулась с багом, из-за которого видели на странице неправильные данные — комментарий, обращенный к одному человеку, оказывался обращен к кому-то другому.
Это происходило из-за того, что несколько веб-воркеров могли одновременно делать записи в базу, а API OPFS не мог обеспечить согласованность данных.
Это не единственная проблема, которая возникла у команды Notion, но самая эффектная. Представляете, какой хаос бы начался, если бы они не отловили этот баг и Notion по всему миру начал бы рандомно менять данные в пользовательских файлах?
А вы пользуетесь Notion?
❤️ — Да
🌚 — Использовал до того, как он ушел из России
👾 — Нет
