Где правильно выполнять бизнес-логику веб-приложения?

Добрый день!
Упрощенный пример для уточнения вопроса:

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

Тут я вижу два варианта (если есть ещё - поправьте меня):

1. Расчёт происходит прямо в браузере (например JS), а на сервер только загрузка/сохранение. Как в таком случае делают сокрытие (защиту от копирования) алгоритмов расчёта? Если не JS, то на каких языках (какие технологии) это возможно?

2. Расчет происходит на сервере (в PHP), а браузер запрашивает – получает результаты с сервера и выдает их пользователю. Как в таком случае реализуется «оперативная память» операции расчета? Писать в базу/файл промежуточные результаты и значения всех полей – не подходит (скорость), а также из браузера отправлять все поля (так происходит сейчас, но по нажатию кнопки «рассчитать») по каждому обновлению каждого поля тоже не подходит (скорость).

Наверно проблемы в п.2 связанны в основном с php (или моим непониманием его), и в других языках наверно этой проблемы нету, но изучать рельсы или питон не хочется, а для явы или скалы требуется совсем другой хостинг и ресурсы (поправте меня если я ошибаюсь).
  • Вопрос задан
  • 3657 просмотров
Пригласить эксперта
Ответы на вопрос 5
GM2mars
@GM2mars
Если я вас правильно понял, то во втором варианте промежуточные данные лучше хранить в куках. Например создать объект со свойствами вычислений, и перекодировать его в json строку и засунуть её в куку. когда приходит запрос от клиента, то достаем куку, делаем вычисления, и результат опять в json -> кука.
Ответ написан
Комментировать
@XProx
Кодер
1. Может проще написать JS класс и прогнать его через оубусификатор.
2. А если ходить на сервер и расчёты сильно сложные то можно использовать на сервере систему кеширования. К примеру кешировать ответы по входным параметрам. И когда будут найдены нужные параметры просто ходить за кешем. При тяжёлых запросах , это сильно помогает.
Ответ написан
Комментировать
alexiusp
@alexiusp
senior frontend developer
Если не хочется показывать алгоритм расчёта, то, конечно, только вариант 2. Даже если js-файл с алгоритмом как-то минифицировать, всё равно найдётся умелец, который его "дизассемблирует".
Во втором варианте я не совсем понял, что понимается по "оперативной памятью", но полагаю, что проще всего все необходимые для расчётов данные хранить в сессии на сервере (см. $_SESSION) - так меньше данных придётся передавать от клиента к серверу, а значит и скорость расчёта несколько увеличится. Если какие-то промежуточные данные необходимы клиенту, то можно сохранять их либо в куках, как подсказал автор выше, либо в LocalStorage в DOM, либо, если вы используете jQuery, то в дополнительных атрибутах тегов тех полей, которым эти данные нужны. Посмотрите в сторону функционала jQuery.data(). ;)
Ответ написан
Комментировать
@victimofbrainlessness
расчеты производить на сервере, но на node.js, связь с клиентом через websocket
как вариант запихать все в flash, опять зависит от секретности алгоритма
Ответ написан
Комментировать
@maxfox
Если вам нужна защита от копирования - то только на сервере.
В зависимости от характера вычислений, на сервере можно производить какую-то часть работы, без которой клиентский алгоритм бесполезен.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы