2016-02-06 1 views
-4

Привет, Мне нужно создать изображение размером 1 × 1 в perl, что может быть самым быстрым способом его создания. Предполагая, что я буду получать 10K соединений в секунду на моем веб-сервере.Perl улучшает производительность генерации изображения в 1 пиксель

В настоящее время я использую это:

print MIME::Base64::decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/xhBQAAAAZQTFRF////AAAAVcLTfgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0gQCEx05cqKA8gAAAApJREFUeJxjYAAAAAIAAUivpHEAAAAASUVORK5CYII= 

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

Благодаря Kathiresh Надар

+0

http://nginx.org/en/docs/http/ngx_http_empty_gif_module.html –

+0

Вы обнаружили, что ваш код является слишком медленным, профилированный его, и обнаружил, что это узкое место? – Borodin

+0

* «Я не могу разместить статический файл, так как нам нужно обработать запрос на некоторые данные» * Вы утверждаете, что содержимое пикселя зависит от параметров от HTTP-запроса? – Borodin

ответ

2

Во-первых, для Perl высокой производительности вы должны использовать FastCGI (через FCGI модуль непосредственно, или CGI::Fast обертке) или мод жемчужно или какой-либо другой технологии, чтобы сделать ваш сценарий палку вокруг как постоянный процесс в памяти.

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

Но давайте ответим на ваш вопрос в любом случае: если предположить, что вы используете некоторые технологии Keep-The-сценарий в памяти, то первое, что вы можете сделать, это переместить MIME::Base64::decode вызов на BEGIN блока, сохраните результат в переменной и использовать эту переменную.

Но также отправка изображения по кабелю, вероятно, займет больше времени, чем обработка на сервере, так почему вы отправляете 167 байт PNG, когда вы можете отправлять 42 байта GIF? Положите обе эти куски советы вместе, и вы получите:

my $gifdata; 
BEGIN { $gifdata = MIME::Base64::decode(
      "R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); } 
print $gifdata; 
+0

* «Почему вы отправляете 167 байт PNG, когда вы можете отправлять 42 байта GIF?» * Возможно, потому, что время, затрачиваемое на передачу 125 байтов данных, должно быть несущественным? Это, вероятно, меньше, чем связанный HTTP-материал – Borodin

Смежные вопросы