У меня есть схема mon goose с набором документов, которые визуализируются в визуальное представление в виде SVG.
В настоящее время рендеринг выполняется на стороне клиента с использованием D3 после того, как клиент запросит документ с сервера.
Поскольку данные по своей сути являются моментальным снимком, они неизменны, а рендеринг на стороне сервера сэкономит много времени и ресурсов на стороне клиента.
Есть ли способ сохранить рендеринг в MongoDB, чтобы я мог использовать один запрос, чтобы либо вернуть неупорядоченный документ, либо его рендеринг, но не оба, клиенту? На основании данных, которые получает клиент, он может принять решение об их отображении или просто вставить рендеринг в HTML DOM?
Альтернативой может быть запрос на рендеринг, а в случае отсутствия результата: отрендерить, сохранить его и затем передать отрисовку клиенту?
Второй альтернативой может быть введение в документы состояния, при котором переход в «опубликованное» состояние приведет к тому, что рендеринг будет сохраненные, и (анонимные) клиенты могут запрашивать только опубликованные документы?
TIA!
ОБНОВЛЕНИЕ: Пример добавлен по запросу.
Предположим, пн Схема goose выглядит следующим образом (сокращенно для ясности):
const exampleSchema = new mongoose.Schema({
year: Number,
release: String,
name: String,
rendering: String // this is the field to hold the rendered version
})
Данные, которые должны быть отображены, в основном хранятся в других документах, которые извлекаются, когда рендеринг должен происходить в бизнес-логике * Функция 1036 * в Express, а затем отправляется клиенту для рендеринга. Поле «рендеринг» должно быть пустым / пустым, если нет предварительно визуализированной визуализации (я использую возможности масштабирования SVG в макете HTML / CSS на клиенте, чтобы он не зависел от размеров экрана конечной точки)
Неопубликованный пример будет отправлен клиенту в виде JSON сообщения с использованием формата JSEND (кавычки опущены для удобства чтения):
{
status: success,
type: raw
data: {
_id: ...
year: 2020
release: A release name
name: Example data
}
}
Однако, если рендеринг существует, то JSON сообщение будет выглядеть так:
{
status: success,
type: svg
data: {
_id: ...
rendering: <svg>...</svg>
}
}
Моя цель состоит в том, чтобы запрос Mon goose (или MongoDB) выполнял sh в одном запросе, так как он будет выполняться каждый раз, когда клиент будет запросить отображение соответствующего рендеринга на экране - это уменьшит вдвое количество запросов, снизив нагрузку на БД.
Как я уже сказал, я открыт для предложенных альтернативных решений; см. оригинальный пост для некоторых идей.