#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 :)
Комментариев нет:
Отправить комментарий