На чем можно записать алгоритм, который должен отрабатывать единым образом в JS и в PHP (чтобы избежать дублирования кода)?
На сайте есть код, который рассчитывает стоимость заказа. Стоимость зависит от многих параметров, которые выбираются посетителем на сайте. Посетителю демонстрируется итоговая стоимость, которая рассчитывается с помощью JS. Потом параметры заказа отправляются на сервер.
На сервере (php) расчет стоимости по заданным параметрам происходит заново, для оформления заказа и записи в БД.
Получается дублирование кода - один и тот же алгоритм реализован и на JS, и на PHP. При изменении приходится вносить правки и туда, и туда. Это проблема.
Получать стоимость с сервера через AJAX во время изменения параметров пользователем нельзя, так как это происходит несколько раз в секунду (посетитель перетаскивает ползунок и в зависимости от его положения изменяется стоимость).
Вопрос в том, как записать этот алгоритм расчета в коде, едином и для JS и для PHP. Я уже думал использовать v8js, но на хостингах такое пока не поддерживается.
Что еще можно попробовать для описания алгоритма, чтобы это можно было выполнять и в PHP, и в JS без изменений?
"Каноническая" реализация на сервере однозначно должна быть, так что выкинуть можно только если реализацию на JS, вместо неё получать результат с сервера.
Мне известен ровно один язык, способный собираться и в JS, и в PHP — Haxe. Но это добавление в проект ещё одного языка. Стоит ли оно того?
Если алгоритм использует совсем мало фич языка, преобразовать одно в другое может быть возможно даже регулярными выражениями. Тут народ Паскаль в Си переводит препроцессором, может и у вас получится. Но этот костыль, скорее всего, будет одноразовым и после сколько-нибудь существенных правок потребует доработки. Повезёт ещё, если сообщит о проблемах преобразования (хотя бы падением результата), а не просто по-тихому поведёт себя иначе.
Ну если захотеть извратиться, то можно замутить что-нибудь такое:
var calculate = (function () {
var $q, $res;
return function calculate //<?php function calculate
($base, $percent, $n) {
$res = $base;
$percent = 1 + $percent / 100;
for ($q=0; $q<$n; ++$q) {
$res *= $percent;
}
return $res;
}
$q
-->0;/*
})(); //*/
Впрочем, предварительно надо убедиться в поддержке браузерами комментария -->, который официально появляется только в ES6.
PS: А вообще, Node.js :)
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники