В настоящее время я работаю над проектом, построенным в React на внешнем интерфейсе, и структурой узлов под названием Sails. js, которая интегрирована с PostgreSQL на заднем конце. Основная функциональность сайта позволяет пользователям читать, редактировать и искать стихи из Библии, Книги Мормона и других томов Священных Писаний.
Поток данных является стандартным: пользователь достигает конечной точки -> postgres запрос возвращает данные -> стихи возвращаются в наш интерфейс. В настоящее время он работает во внешнем интерфейсе так, что каждый стих представляет собой компонент JSX, который обернут в компонент Quill. js, который позволяет пользователям отмечать его и добавлять свои собственные примечания к словам или фразам. Проблема в том, что когда пользователь ищет термин, который возвращает более 20-30 стихов, все идет ОЧЕНЬ медленно. Если мы закомментируем компонент Quill, это почти мгновенно. Но когда есть запросы, возвращающие более 50 стихов с обертками Quill, невыносимо медленно загружать все это в браузер (1 минута плюс время загрузки).
Очевидно, что нам нужен способ ускорить этот ужасный UX вверх. Решения, которые мы рассмотрели до сих пор, включают:
- Рендеринг только 1 обертки Quill для всех стихов. Это быстро, но не работает, потому что тогда пользователи могут разметить более одного стиха за раз, который нельзя сохранить в нашей базе данных, которая разделена на стихи. Если поиск возвращает набор запросов с различными несвязанными стихами, пользователи заканчивают тем, что отмечают стихи, которые мы не могли отследить.
- Ленивая загрузка стихов. Проблема в том, что пользователи часто / всегда в конечном итоге хотят, чтобы все они были загружены, так что, похоже, это просто увеличивает время загрузки, вместо того, чтобы ждать на входном конце операции. Условное отображение редактируемого стиха и нередактируемого стиха. Для каждого пользователя или стиха может быть переключение, которое будет разрешать или запрещать редактирование и перерисовывать компоненты стиха соответственно. Недостатком является то, что это раздражает и немного неуклюже.
- Условно отображая редактируемый стих в ответ на прослушиватель событий в компоненте стиха. Похоже, что проблема заключается в том, что пользователь не знает, что стихи можно редактировать только условно, поэтому он может go отредактировать один и получить разочаровывающий повторный рендеринг при выделении стиха.
- Нет эти идеи кажутся мне замечательными, и я чувствую, что мы можем быть просто ограничены требованиями архитектуры. Я что-то упускаю из виду? Есть ли способ сделать это, чтобы позволить пользователям плавно редактировать любой стих, который они хотят, по требованию, который также не будет тормозить браузер невыносимо, даже в случае очень больших нагрузок?
Спасибо за чтение и любая потенциальная помощь!