Задать вопрос

Как вынести расчёт из JavaScript?

Здравствуйте.
Предположим гипотетическую ситуацию:
Есть форма заказа товара. Стоимость этого товара зависит от введённых данных и вычисляется по определённой формуле. На форме, при вводе данных, тут же отображается итоговая стоимость. Но после отправки формы на сервер, нам нужно снова, используя такую же формулу, подсчитать стоимость. Это приводит нас к тому, что формула должна быть прописана как в скрипте JS, так и в клиентском скрипте. Однако, это очень неудобно для поддержки.

Существуют ли решения, позволяющие прописывать формулу в одном месте приложения?

Думал о AJAX или WebSocket, но подобное решение грузит сервер и обладает низкой отзывчивостью.
  • Вопрос задан
  • 1420 просмотров
Подписаться 1 Оценить 10 комментариев
Пригласить эксперта
Ответы на вопрос 5
@xutesayor
Это нормальная практика дублировать серверную логику на клиенте для ускорения. Php и js очень похожие языки, и если у вас чистая функция без побочных эффектов то ее не составит труда перенести на php.
Ответ написан
@Arik
изоморфный код приложения -NodeJS?
а так на серверной стороне в любом случаи надо по новой считать и если там не JS, то только поддерживать два кода. Можно еще аяксами, просто расчет запрашивать не с каждого пука, а с какой-то задержкой.
Ответ написан
victorzadorozhnyy
@victorzadorozhnyy
сделайте по rest api запрос расчета на стороне сервера
Ответ написан
Stalker_RED
@Stalker_RED
Если формулы не очень сложные, то можно переписать их так, что код в js и php был полностью одинаковый.
К примеру:
function calc($a, $b, $c, $result = 0) {
   $result = $a + $b;
   $result = $result * $c;
   return $result;
}


Это будет одинаково работать и в js и в php.
Такие формулы можно держать в одном месте и инклудить их и в php и в js.
Конечно, если нужны более сложные вычисления, чем простейшая арифметика, типа вызовов sin() в php, а в js это уже Math.sin(), то придется писать дополнительные врапперы.
Ответ написан
SorokinWS
@SorokinWS Автор вопроса
Судя по всему, готовых решений не существует - иначе сразу был бы ответ.
Вариантов решения вижу 2
1. Запрос через AJAX или приложение на WebSocket - минусы есть, но поддержка проще. И при должной оптимизации нормально работает.
2. генерация дублирующегося кода в автоматическом режиме. Тоесть формула может быть описана в конфиге, и просто использоваться при расчёте на сервере. А JS файлы пересобираются после внесения изменений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы