Przygotowuję małą aplikację generującą miniaturki aukcji allegro (w oparciu o Allegro WebApi).
Założenie jest takie, że co 15 minut program sprawdza czy pojawily się nowe oferty w aukcjach, czy zmienila się cena, itp itd. Przy okazji kopiuje miniaturke zdjecia z serwerow alllegro, wczesniej jednak sprawdzam czy nie mam już tego zdjęcia na swoim serwerze, bo po co kopiowac kilka razy to samo?
No i problem z jakim przyszlo mi się zmierzyc, to problem wydajnośći, czasu wykonywania.
- W najgorszym wypadku, aby wygenerować 6 miniaturek, skrypt potrzebuje prawie 8 sekund.
- W najlepszym, gdy nie musze kopiować żadnych miniaturek z zewnatrz wygenerowanie tych 6 grafik trwa okolo 2,5 sekundy
wyliczylem sobie, że samo kopiowanie miniaturki trwa ok 0,8 sekundy.
Jesli używam tego skryptu sam - problemu nie ma.
Jednak chce to udostepnic wiekszej rzeszy ludzi - komercyjnie.
w momencie gdy z systemu zacznie korzystac juz ponad setka ludzi (co wydaje mi sie liczbą śmiesznie małą) czas wykonywania calego skryptu zbliza sie do magicznej granicy 15 minut!! a przecież Cron ma za zadanie co 15 minut odpalac skrypt by zaktualizowac miniaturki.
poniżej wrzucam kod, może ktoś coś z niego wyczyta...
ktoś ma pomysł jak to poprawić? a może należałoby wykorzystać tu inną technologię

<?php //error_reporting(E_ALL); function getmicrotime(){ return ((float)$usec + (float)$sec); } $timeStart = getmicrotime(); require_once('/home/siutek/mojaStrona.pl/config.php'); require_once('/home/siutek/mojaStrona.pl/lib/nusoap.php'); $client = new soapclient('http://webapi.allegro.pl/uploader.php?wsdl', true); $client->decode_utf8 = false; foreach($panele as $p){ $userItems = $client->call("doGetUserItems",array("user-id"=>$p["usrAllId"],"webapi-key"=>$configWebApi["apiKey"],"country-id"=>$configWebApi["country"],"limit"=>100)); $user = getRecord("users",$p["usrId"]); if(!file_exists("/home/siutek/mojaStrona.pl/userFiles/".$user["login"]."/panelImg/")) @mkdir("/home/siutek/mojaStrona.pl/usersFiles/".$user["login"]."/panelImg/",0755); $r=1; $timeForStart = getmicrotime(); foreach($userItems["user-item-list"] as $uI){ if(!file_exists("/home/siutek/mojaStrona.pl/usersFiles/".$user["login"]."/panelImg/".$newImgName.".jpg")) { copy($uI["it-thumb-url"],"/home/siutek/mojaStrona.pl/usersFiles/".$user["login"]."/panelImg/".$newImgName.".jpg"); $copyImg = " (skopiowano) "; } else { $copyImg = " (nie skopiowano) "; } if($r<=($p["columns"]*$p["rows"])) { $hSize=200; $xSize=180; $img = ImageCreateTrueColor($xSize, $hSize); $img2 = ImageCreateFromJpeg("/home/siutek/mojaStrona.pl/usersFiles/".$user["login"]."/panelImg/".$newImgName.".jpg"); $white = ImageColorAllocate($img, 255, 255, 255); $grey = imagecolorallocate($img, 230, 230, 230); $black = imagecolorallocate($img, 0, 0, 0); $red = imagecolorallocate($img, 255, 0, 0); ImageFill($img, 0, 0, $white); ImageFilledRectangle($img, 0, 0, 180, 16, $grey); ImageFilledRectangle($img, 0, 113, 180, 164, $grey); imagecopy($img,$img2,26,17,0,0,128,96); $size = 8; $fontB = "/home/siutek/mojaStrona.pl/font/verdanab.ttf"; $fontR = "/home/siutek/mojaStrona.pl/font/verdana.ttf"; if(($uI["it-time-left"]<3600) && $uI["it-time-left"]>60) { } elseif ($uI["it-time-left"]<60) { $leftTimeVal = "poniżej minuty"; } elseif (($uI["it-time-left"]>3600) && ($uI["it-time-left"]<86400)) { } else { if ($leftTimeVal==1) $leftTimeVal.=" dzień"; else $leftTimeVal.=" dni"; } $timeLeftBox2 = imagettfbbox($size, 0, $fontB, $leftTimeVal); $tlbX = $timeLeftBox2[2]-$timeLeftBox2[0]; imagettftext($img, $size, 0, (175-$tlbX), 12, $black, $fontB, $leftTimeVal); $timeLeftBox1 = imagettfbbox($size, 0, $fontR, "do końca "); $tlbX = 180-($timeLeftBox1[2]-$timeLeftBox1[0])-$tlbX; imagettftext($img, $size, 0, $tlbX-5, 12, $black, $fontR, "do końca "); if($uI["it-bid-count"]>0){ imagettftext($img, $size, 0, 5, 12, $red, $fontR, "Ofert: ".$uI["it-bid-count"]); } if($uI["it-buy-now-price"]==0){ $priceX = (180-($price[2]-$price[0]))/2; imagettftext($img, 10, 0, $priceX, 186, $black, $fontB, "Cena: ".number_format($uI["it-price"], 2,","," ")."zł"); } else { $price = imagettfbbox(10, 0, $fontB, "Kup teraz: ".number_format($uI["it-buy-now-price"], 2,","," ")."zł"); $priceX = (180-($price[2]-$price[0]))/2; imagettftext($img, 10, 0, $priceX, 186, $black, $fontB, "Kup teraz: ".number_format($uI["it-buy-now-price"], 2,","," ")."zł"); } writeTextImg($itemNameArr,130,1); imagejpeg($img, "/home/siutek/mojaStrona.pl/usersFiles/".$user["login"]."/panelImg/".$r.".jpg"); imagedestroy($img); $userItemsArr[$r]=$uI["it-id"]; if($_SERVER["SERVER_ADDR"]=="127.0.0.1") echo "<a href='./link.php?panel=".base64_encode($p["id"])."&item=".$r."'><img src='./usersFiles/".$user["login"]."/panelImg/".$r.".jpg' style='border:0px;'></a><br>".$uI["it-id"]."<br>"; echo "wygenerowano ".$r.".jpg ".$copyImg." po ".(getmicrotime()-$timeForStart)." od rozpoczecia petli\n"; $r++; } else { break; } } } else { for($r=1;$r<=($p["columns"]*$p["rows"]);$r++) { copy("/home/siutek/mojaStrona.pl/pix/itemPanelEmpty.jpg","/home/siutek/mojaStrona.pl/usersFiles/".$user["login"]."/panelImg/".$r.".jpg"); } } } $timeEnd = getmicrotime(); } ?>