Witam,
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 sekundywyliczylem 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ę

Czekam na jakieś sugestie...
<?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;
$panele = getList
("panels",array("act"=>1
)); 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
);
if(is_array($userItems["user-item-list"]) && count($userItems["user-item-list"])>0
){ shuffle($userItems["user-item-list"]); $r=1;
$timeForStart = getmicrotime();
foreach($userItems["user-item-list"] as $uI){
$newImgName = substr($uI["it-thumb-url"],(strrpos($uI["it-thumb-url"],"/")+1
)); 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) {
$leftTimeVal = floor($uI["it-time-left"]/60)." min";
} elseif ($uI["it-time-left"]<60) {
$leftTimeVal = "poniżej minuty";
} elseif (($uI["it-time-left"]>3600) && ($uI["it-time-left"]<86400)) {
$leftTimeVal = floor($uI["it-time-left"]/3600)." godz.";
} else {
$leftTimeVal = floor($uI["it-time-left"]/86400
); 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){
$price = imagettfbbox
(10
, 0
, $fontB, "Cena: ".number_format($uI["it-price"], 2,","," ")."zł"); $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ł"); }
$itemNameArr = explode(" ",$uI["it-name"]);
writeTextImg($itemNameArr,130,1);
if(is_array($itemNameArr)) writeTextImg
($itemNameArr,144
,2
); if(is_array($itemNameArr)) writeTextImg
($itemNameArr,158
,2
); 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;
}
}
updateData
("panels",array("items"=>serialize
($userItemsArr),"id"=>$p["id"])); } 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"); }
updateData
("panels",array("items"=>"","id"=>$p["id"])); }
}
$timeEnd = getmicrotime();
echo "Czas wykonywania: ".($timeEnd-$timeStart); }
?>