Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Единый код (для расчета цены) на JS и PHP

#php #javascript


На чем можно записать алгоритм, который должен отрабатывать единым образом в JS и
в PHP (чтобы избежать дублирования кода)?

На сайте есть код, который рассчитывает стоимость заказа. Стоимость зависит от многих
параметров, которые выбираются посетителем на сайте. Посетителю демонстрируется итоговая
стоимость, которая рассчитывается с помощью JS. Потом параметры заказа отправляются
на сервер.

На сервере (php) расчет стоимости по заданным параметрам происходит заново, для оформления
заказа и записи в БД.

Получается дублирование кода - один и тот же алгоритм реализован и на JS, и на PHP.
При изменении приходится вносить правки и туда, и туда. Это проблема.

Получать стоимость  с сервера через AJAX во время изменения параметров пользователем
нельзя, так как это происходит несколько раз в секунду (посетитель перетаскивает ползунок
и в зависимости от его положения изменяется стоимость).

Вопрос в том, как записать этот алгоритм расчета в коде, едином и для JS и для PHP.
Я уже думал использовать v8js, но на хостингах такое пока не поддерживается.

Что еще можно попробовать для описания алгоритма, чтобы это можно было выполнять
и в PHP, и в JS без изменений?
    


Ответы

Ответ 1



Решение "в обход" — выкидывание реализации на JS "Каноническая" реализация на сервере однозначно должна быть, так что выкинуть можно только если реализацию на JS, вместо неё получать результат с сервера. Решение "в лоб" — язык над обоими Мне известен ровно один язык, способный собираться и в JS, и в PHP — Haxe. Но это добавление в проект ещё одного языка. Стоит ли оно того? Решение "боком" — преобразовать одну в другую Если алгоритм использует совсем мало фич языка, преобразовать одно в другое может быть возможно даже регулярными выражениями. Тут народ Паскаль в Си переводит препроцессором, может и у вас получится. Но этот костыль, скорее всего, будет одноразовым и после сколько-нибудь существенных правок потребует доработки. Повезёт ещё, если сообщит о проблемах преобразования (хотя бы падением результата), а не просто по-тихому поведёт себя иначе.

Ответ 2



Ну если захотеть извратиться, то можно замутить что-нибудь такое: var calculate = (function () { var $q, $res; return function calculate //0;/* })(); //*/ Впрочем, предварительно надо убедиться в поддержке браузерами комментария -->, который официально появляется только в ES6. JS: https://jsfiddle.net/us9m5n3g/1/ PHP: http://ideone.com/ByU8Cs PS: А вообще, Node.js :)

Комментариев нет:

Отправить комментарий