2016-02-06 52 views
-4

嗨我需要在perl中生成1x1像素的圖像,什麼是最快的方式來生成此圖像。假設我將在我的Web服務器上獲得每秒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包裝)或MOD-Perl或一些其他技術,使周圍的腳本棒作爲記憶中的一個持續過程。其次,如果您首先處理其他數據的請求,並且涉及到寫入文件或與數據庫交談等任何事情,那麼您的時間將由該處理決定。生成圖像不是緩慢的部分。

但我們無論如何的回答你的問題:假設你使用的是一些保的腳本,內存技術,那麼你可以做的第一件事就是將你的MIME::Base64::decode呼叫到BEGIN塊,結果存儲在一個變量,並使用該變量。

但是,通過網絡發送圖像可能需要花費比服務器上的處理更長的時間,那麼爲什麼在發送42字節的GIF時發送1​​67字節的PNG?把這兩樣建議那件在一起,你會得到:

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

*「爲什麼當你發送42字節的GIF時你發送了167字節的PNG?」*也許是因爲傳輸125字節數據的時間應該是微不足道的?這可能比相關的HTTP內容小 – Borodin