Обработка на стороне клиента с помощью javascript и стороны сервера с помощью mod_perl - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть Perl-скрипт, который преобразует строки в разные кодировки, такие как base64, ASCII или hex (в обе стороны).Сейчас я пишу Ajax для него, и мой вопрос таков;если я хочу автоматизировать обнаружение кодировки представленной строки, эффективнее ли выполнять поиск регулярных выражений по строке, переданной с помощью javascript, перед тем, как отправлять ее на сервер, или быстрее оставить ее для сценария perl для расчетакакой тип строки?

Чтобы уточнить, я спрашиваю, какая из этих двух лучше:

  1. Отправленная строка
  2. Javascript обнаруживает кодировку
  3. AJAX передает кодировку и строку в сценарий Perl
  4. Perl-скрипт возвращает декодированную строку

или

  1. Отправленная строка
  2. AJAXотправляет строку в сценарий perl
  3. сценарий Perl обнаруживает кодировку и возвращает декодированную строку

Существует ли конкретное правило, в котором следует выполнять этот тип обработки, и что вы думаетелучше (имеется в виду быстрее) реализация?

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Вы должны проверить ваши данные на сервере. Период. В противном случае вы поплывете в неизведанные воды, как только какой-нибудь двухразрядный «хакер» подражатель передаст вам строку base64 и тег, утверждающий, что ваш javascript считает его шестнадцатеричным.

Учитывая это, вам решать, хотите ли вы также обнаруживать кодировку на стороне клиента. Это имеет некоторые потенциальные преимущества, поскольку позволяет вообще не отправлять данные на сервер, если они были закодированы недопустимым образом, или сообщить пользователю, какая кодировка была обнаружена, и позволить им исправить ее, если это неоднозначный случай (например, hex цифры являются подмножеством набора символов base64, поэтому любая шестнадцатеричная строка потенциально может быть base64). Просто помните, что если клиент передает кодировку на сервер, сервер должен по-прежнему проверять исправность полученного спецификатора кодировки и быть готовым игнорировать его (или полностью отклонить запрос), если он не подходит для соответствующие данные.

0 голосов
/ 22 ноября 2010

Это зависит от масштаба.

Если для этого потребуется МНОЖЕСТВО клиентских запросов, это определенно «быстрее» сделать на стороне клиента (например, в JS перед вызовом Ajax), так как размещение его на стороне сервера вызывает обработку сервера ВСЕ эти запросы будут конкурировать за ресурсы ЦП сервера, тогда как на стороне клиента вы будете делать только одно обнаружение для каждого клиента.

Если вы только ожидаете очень мало одновременных запросов, то выполнение этого в Perl, вероятно, будет незначительно быстрее, поскольку реализация регулярного выражения в Perl, вероятно, лучше / быстрее, чем JavaScript (хотя у меня нет статистики, подтверждающей это), и предположительно Сервер имеет лучший процессор.

Но я бы не подумал, что запас на стороне сервера будет ужасно большим, учитывая, что вся обработка не займет так много времени с обеих сторон, , поэтому я бы посоветовал перейти к проверке на стороне клиента с тех пор ( согласно первому абзацу) масштабируется лучше.

Если разница в производительности между этими двумя приложениями действительно имеет для вас большое значение, вам следует реализовать оба показателя и эталонный тест при средних ожидаемых и максимальных прогнозируемых клиентских нагрузках.

...