|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.05.2011, 09:29 | #1 |
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Чем заменить eval()?
Есть ajax-система. На запросы пользователя сервер отвечает js-кодом (например, alert("Бум!!"); ). На клиенте ответ прогоняется через eval() и команда выполняется.
Profit... Но многие говорят, что это не безопасно, хотя внятно не могут объяснить почему (?). Говорят, что eval() медленная команда. Возникает вопрос: - Чем заменить eval()? Закинул вопрос на Хабр и получил около десятка бредовых ответов (что и следовало ожидать) и один требующий проверки. А как думают знатоки этого форума? |
27.05.2011, 06:59 | #2 |
Пользователь
Регистрация: 22.06.2010
Сообщений: 61
|
В некоторых случаях можно использовать window[], мне удавалось.
|
27.05.2011, 23:47 | #3 |
Форумчанин
Регистрация: 12.11.2010
Сообщений: 146
|
я думаю....
Я думаю что логику которая подвластна JS не нужно заменять PHP, может просто все нужные параметры передавать (в массиве например, json-ом очень легко манипулировать)...
|
28.05.2011, 02:27 | #4 |
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
Поддерживаю 8oOoRPM. С сервера данные приходят, например, в json формате, а в js скрипте с ними творишь, что хочешь. Если указать тип возвращаемых данных, тот же json, то eval не нужен
|
28.05.2011, 07:25 | #5 |
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
А как поступать с управляющими командами? (см. 1 сообщение)
|
28.05.2011, 23:26 | #6 |
Форумчанин
Регистрация: 12.11.2010
Сообщений: 146
|
А управляющие комманды это alert("bum") ? )))
Нужно реализовывать бэкэнд и фронтенд правельно, потому как eval() это не совсем то что хочется увидеть... Если нужно будет добавить какойнить параметр новый, то придётся переколбасить и серверную часть и клиентскую... это просто не практично...А eval() заменить не вижу возможным, во первых потому что разработчики сделали его достаточно быстрым... Советую поменять логику, ну или показать пример чтоб можно было увидеть(нам) что eval() действительно незаменим... |
29.05.2011, 07:39 | #7 |
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Допустим, у нас на клиенте есть две команды - function_a() и function_b(). Каждая из них принимает параметры и выполняет различные действия.
Я делал просто. С сервера отправляется на запрос пользователя ответ, например - "function_a('XXX'); fuction_b('ZZZ');". На клиенте полученный ответ прогонялся через eval() и всё было хорошо. Но очень много людей говорят, что это не безопасно и медленно. Поэтому возникает вопрос как заменить? |
30.05.2011, 21:57 | #8 |
Форумчанин
Регистрация: 12.11.2010
Сообщений: 146
|
вообще с безопасностью я не знаю что это имеет... медленно ? ДА!!! Как и любом другом языке в подобных функциях... а евал для этих функции и не нужен та... передаёте массив параметров с сервера, а клиент запускает функцию с переданными параметрами, евал сдесь не нужен совсем... смотрите, как вам удобнее...
|
30.05.2011, 21:58 | #9 |
Форумчанин
Регистрация: 12.11.2010
Сообщений: 146
|
И думаю что при маленьких объёмах данных разницы во времени будет назаметно в любом случае...
|
30.05.2011, 22:15 | #10 |
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
Вот сокращенная версия рабочего кода, без проверок и т.п.
Код:
Последний раз редактировалось Gorychev; 30.05.2011 в 22:18. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чем заменить функцию? | kity | Помощь студентам | 8 | 29.06.2010 16:08 |
Чем заменить assign | pasha_1994 | Помощь студентам | 6 | 21.12.2009 12:29 |
чем заменить goto? | Agronom | Общие вопросы C/C++ | 3 | 19.12.2009 19:43 |
Чем заменить GetFreeSystemResources? | rocky7 | Компоненты Delphi | 0 | 23.08.2009 20:20 |