Обработка на стороне клиента с использованием javascript и стороны сервера с помощью mod_perl

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

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

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

или же

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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам