Может ли прогрессивное веб-приложение выполнять вычисления на стороне сервера, когда интернет отключен

Я новичок в PWA и тоже пытался найти ответ, но безуспешно.

Я знаю, что PWA может обрабатывать все транзакции базы данных, когда интернет отключен, используя indexdb.

Для согласованности мне нужно выполнить некоторые вычисления на стороне сервера, но интересно, смогу ли я с помощью PWA выполнять эти вычисления локально или нет.

Любой совет будет принят во внимание.

Технически, да. Это потребует от вас разместить логику расчета, существующую на сервере, и на клиенте. Вам нужно будет проверить, есть ли у клиента подключение; если это не так, выполните расчеты на клиентском устройстве. В противном случае отправьте запрос на сервер для выполнения расчета. Имейте в виду, что если вычисл. является интенсивным, то пользователь заметит замедление или узкое место из-за возможности высокого потребления ресурсов на клиентском устройстве.

Evan Bechtol 29.05.2019 19:30

@Evan, спасибо за ваш ответ, означает ли это, что мне нужно снова писать коды расчета на стороне клиента (это то, что я стараюсь не делать для согласованности) или в PWA есть функции, которые могут управлять этим?

albert sh 29.05.2019 19:40

Это то, что вам также придется написать на стороне клиента. PWA не будет хранить код/логику на стороне сервера. Вы должны спроектировать PWA так, чтобы все функции (которые вы хотите сделать доступными в автономном режиме) сохранялись, когда клиент находится в автономном режиме.

Evan Bechtol 29.05.2019 19:41

@albertsh вы можете избежать дублирования кода, если будете использовать node.js. В этом случае вы можете повторно использовать одну и ту же функцию на стороне сервера и клиента.

Arseniy-II 03.06.2019 10:09

@ Arseniy-II, спасибо за ответ, у меня уже есть проект, разработанный asp.net с использованием сервера sql. Мы собираемся разработать несколько веб-сервисов для управления расчетами на стороне сервера, все расчеты будут выполняться внутри веб-сервиса, а не на сервере sql. Не могли бы вы уточнить, как node.js может помочь нам здесь. Буду признателен, если вы пришлете ссылки, которые могут оказаться полезными.

albert sh 03.06.2019 15:33

@albertsh Я отправил ответ, чтобы лучше объяснить

Arseniy-II 04.06.2019 09:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
144
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что с точки зрения архитектурного проектирования было бы лучше, если бы расчеты выполнялись либо на стороне сервера, либо на стороне клиента, но не на обоих одновременно. Для удобства сопровождения рассмотрите СУХОЙ принцип.

Так что в вашем случае учитывайте необходимость расчетов как локально, так и на стороне сервера. Почему это должно быть на любой из этих сторон? Если сервер выполняет вычисления, а затем сохраняет результат, вы можете использовать принципы фоновой синхронизации, чтобы отложить отправку данных, а результат будет рассчитан и сохранен при необходимости.

Когда клиенту немедленно требуется результат вычисления, рассмотрите возможность выполнения вычислений только локально и отправьте результат на сервер с фоновой синхронизацией, когда соединение снова будет доступно.

Если вам абсолютно необходимы вычисления как на клиенте, так и на сервере, рассмотрите архитектуру, в которой модуль, выполняющий вычисления, может использоваться как локально, так и на стороне сервера. Это возможно, когда и сервер, и клиент используют 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

Спасибо за отличный ответ :)

albert sh 04.06.2019 16:26

Другие вопросы по теме