Я в настоящее время ищу лучший способ сохранить и получать и сохранять данные для моего Любимый боковой проект Отказ Я сделал некоторые исследования И я подумал, что это может быть приятно поделиться тем, что я обнаружил до сих пор.
Требования
Приложение предназначено для PWA, а также электронного настольного приложения и использует RXJS в широкую степень. На данный момент нет бэкэнда, и если когда-либо будет один, это, вероятно, будет необязательным. Поскольку основной фокус – это электронное приложение, которое я к счастью, не должен слишком заботиться о поддержке браузера, хотя все Libs, кажется, поддерживают все современные браузеры.
Это требования, которые я придумал:
Существенный
- Super Speed: он должен чувствовать себя как быструю, как на натуральном настольном приложении примерно на 2000 различных объектов с минимальными и До 10 МБ хранимых данных и быстрых для загрузки комбинированных данных и подмножеств данных
- Относительно легко реализовать без слишком много накладных расходов
- Будущее доказательство: должно быть под активным развитием и поддерживается большим сообществом
- Без блокировки UI не должно происходить даже при работе с большим набором данных
- Рамки агностики
Бонус
- Поддержка рабочей типографии (по крайней мере, без ошибок)
- Читаемое indexeddb модель => Данные должны быть просмотрены через инструменты Chrome Dev
- В идеале следует предоставить возможность получить набор данных как наблюдаемый, или это должно быть легко реализовать такую вещь
- Репликация на бэкферный сервер: хотя еще не реализован, может быть приятно иметь вариант
- Бонусный бонус: простое репликация хранения файлов в Google Drive, OwnlCloud или Dropbox
Конкуренты
Как отправная точка, которую я использовал Этот список Отказ Пожалуйста, имейте в виду, что я ни в коем случае не являюсь экспертом для любой из библиотек, используемых здесь, поэтому шансы состоят в том, что я пропустил что-то важное. Если так, пожалуйста, дайте мне знать в комментариях.
Это мои выборы:
ВодянойМелондб
Описание : Реактивная и асинхронная база данных для мощных реагирования и реагирования Нативные приложения
преимущества
- Синхронизация построить в
- Довольно быстро благодаря Локии
- Включает в себя язык запроса, похожий на MongoDB
- Проверка схемы
- Взаимодействие баз данных работает внутри работника, так что нет риска блокировки пользовательского интерфейса
- Напишите SQLite на диск (что может быть приятно использовать с электронным)
недостатки
- Надежные ошибки
- Сильно ориентирован на реагирование
- Некоторая проблема с быстрыми последовательными пишетами (но Это могло бы быть я, используя это неправильно)
- IndexedDB просто сохраняется как одна большая строка
Rxdb.
Описание : База данных в реальном времени для приложений JavaScript
преимущества
- Синхронизация (благодаря Pouchdb, вероятно, самый продвинутый)
- Хороший синтаксис
- Широкая рамочная поддержка и примеры
- Проверка схемы через JSON SCHEMA
недостатки
- Очень медленно для больших наборов данных
- Render Blacking возникает при взаимодействии с большим набором данных (это может быть моя ошибка снова)
- Данные хранятся отдельно, но не просто просмотрен из-за всех материалов PUCHDB
ДЕКСИ
Описание : Минималистичная обертка для IndexedDB
преимущества
- Проверка схемы
- Относительно быстро
- Чистое использование базы данных для IndexedDB
- Рамки агностики
недостатки
- Мне еще не понятно, если синхронизация легко реализовать
- Нет реального наблюдаемого интерфейса (да, есть Декси наблюдаемый но, но это просто для просмотра событий изменить, а затем получать обновленные данные)
Ловийс
Описание : JavaScript Embeddable/в памяти база данных
преимущества
- Быстро
- Включает в себя язык запроса, похожий на MongoDB
- Рамки агностики
- Меньше накладных расходов, чем RXDB и WatermelondB
недостатки
- Нет возможностей синхронизации встроены в
- ? Нет наблюдаемых интерфейс данных?
Ремонт
Описание : Открытый протокол для хранения каждого пользователя в Интернете
преимущества
- Проверка схемы
- Владеть вашими данными: Синхронизация для Google Drive/Dropbox и многое другое
недостатки
- Вне дата зависимости
- Нет активного развития за последние пару месяцев
- Меньшее сообщество, чем остальное
Родной indexeddb.
преимущества
- Нет накладных расходов
- относительно быстро
- Рамки агностики
- Teadercript должен работать
недостатки
- Требуется полностью пользовательская синхронизация
- Нет наблюдаемого интерфейса
- вероятно, много кода, чтобы написать
- Не все браузеры поддерживают все функции
Тест скорости
Это может быть устарело, но кроме моих собственных не систематических тестов, которые я использовал Этот инструмент для сравнения производительности Отказ
Преждевременное заключение
Пока я экспериментировал только с WatermelondB, RXDB и немного с родным IndexedDB. Вот ветви для Watermelondb и RXDB в случае, если вы хотите проверить сами:
https://github.com/johannesjo/super-productivity/tree/feat/watermelonDB https://github.com/johannesjo/super-productivity/tree/feat/rxdb
WatermelondB откладывает меня из-за своего сильного фокуса на реакцию, и он не работает хорошо с помощью TearmScript ATM. Он разделяет одну из «проблем» с Lokijs: данные в хранении в IndexedDB – это просто большая строка. Это может не быть реальной проблемой, но она чувствует себя неправильно, чтобы пойти настолько настойчивость. Я не приходил намного дальше, чем играть немного с Локиями, потому что я чувствовал, что это может быть в основном Watermelondb с меньшими вопросами, но и меньше всего нужна, и я все еще надеялся на что-то лучшее.
RXDB выглядел довольно многообещающе И я предполагаю, что это действительно сияет, когда вы используете сервер. Но плохая производительность была просто не вариантом для приложения, направленного на приложение для настольных компьютеров, таких как производительность.
Использование родного IndexedDB должна работать нормально для большей части. Основным недостатком является то, что мне пришлось бы написать много кода, и я не хочу заново изобретать колесо (просто еще совсем).
Следующий шаг – это Декси! Сообщество может не быть такими же большими, как и те, кто его конкуренты, и отсутствие предыдущего исполнительного пути к использованию коллекций, поскольку наблюдаемые, немного разочаровывают. Я также не уверен по поводу синхронизации, поскольку я не нашел слишком много хороших примеров, и, казалось, так, как будто это был больше уловка, чем что-то, что люди используют в производстве, но я надеюсь, что я ошибаюсь! До сих пор это была единственная библиотека, предлагающая чистую indexedDB для просмотра, в то же время, предлагая некоторую структуру, убедившись, что я не только с сохранением данных.
Я буду обновлять статью, как только я узнаю больше!
Я сделал что-то не так? Наверное! Вот почему мне очень интересно услышать ваши мысли и опыты по этому вопросу. Пожалуйста, поделитесь ими в комментариях!
Оригинал: “https://dev.to/johannesjo/choosing-the-right-frontend-database-for-a-single-page-application-3i0”