Я новичок в PWA и тоже пытался найти ответ, но безуспешно.
Я знаю, что PWA может обрабатывать все транзакции базы данных, когда интернет отключен, используя indexdb.
Для согласованности мне нужно выполнить некоторые вычисления на стороне сервера, но интересно, смогу ли я с помощью PWA выполнять эти вычисления локально или нет.
Любой совет будет принят во внимание.
@Evan, спасибо за ваш ответ, означает ли это, что мне нужно снова писать коды расчета на стороне клиента (это то, что я стараюсь не делать для согласованности) или в PWA есть функции, которые могут управлять этим?
Это то, что вам также придется написать на стороне клиента. PWA не будет хранить код/логику на стороне сервера. Вы должны спроектировать PWA так, чтобы все функции (которые вы хотите сделать доступными в автономном режиме) сохранялись, когда клиент находится в автономном режиме.
@albertsh вы можете избежать дублирования кода, если будете использовать node.js. В этом случае вы можете повторно использовать одну и ту же функцию на стороне сервера и клиента.
@ Arseniy-II, спасибо за ответ, у меня уже есть проект, разработанный asp.net с использованием сервера sql. Мы собираемся разработать несколько веб-сервисов для управления расчетами на стороне сервера, все расчеты будут выполняться внутри веб-сервиса, а не на сервере sql. Не могли бы вы уточнить, как node.js может помочь нам здесь. Буду признателен, если вы пришлете ссылки, которые могут оказаться полезными.
@albertsh Я отправил ответ, чтобы лучше объяснить
Я думаю, что с точки зрения архитектурного проектирования было бы лучше, если бы расчеты выполнялись либо на стороне сервера, либо на стороне клиента, но не на обоих одновременно. Для удобства сопровождения рассмотрите СУХОЙ принцип.
Так что в вашем случае учитывайте необходимость расчетов как локально, так и на стороне сервера. Почему это должно быть на любой из этих сторон? Если сервер выполняет вычисления, а затем сохраняет результат, вы можете использовать принципы фоновой синхронизации, чтобы отложить отправку данных, а результат будет рассчитан и сохранен при необходимости.
Когда клиенту немедленно требуется результат вычисления, рассмотрите возможность выполнения вычислений только локально и отправьте результат на сервер с фоновой синхронизацией, когда соединение снова будет доступно.
Если вам абсолютно необходимы вычисления как на клиенте, так и на сервере, рассмотрите архитектуру, в которой модуль, выполняющий вычисления, может использоваться как локально, так и на стороне сервера. Это возможно, когда и сервер, и клиент используют JavaScript, т.е. NodeJS. Затем вы можете импортировать этот модуль на стороне сервера и загрузить + кэшировать модуль на стороне клиента.
Вы можете избежать дублирования кода, если будете использовать node.js. В этом случае вы можете повторно использовать одну и ту же функцию на стороне сервера и клиента.
Например: вы можете написать файл summ.js
следующим образом:
const sum = (a, b) => a + b;
module.exports = sum;
после этого вы можете импортировать его для использования на FE:
import sum from './sum'
console.info(sum(1,2));
или создайте файл node.js handleSum.js
на BE:
const sum = require('./sum');
console.info(sum(1, 2));
и вы можете выполнить свой handle.js
следующим образом: node handleSum.js
Спасибо за отличный ответ :)
Технически, да. Это потребует от вас разместить логику расчета, существующую на сервере, и на клиенте. Вам нужно будет проверить, есть ли у клиента подключение; если это не так, выполните расчеты на клиентском устройстве. В противном случае отправьте запрос на сервер для выполнения расчета. Имейте в виду, что если вычисл. является интенсивным, то пользователь заметит замедление или узкое место из-за возможности высокого потребления ресурсов на клиентском устройстве.