Forum Webscript.Ru
Программирование => PHP => Тема начата: CL2004 от 25 Декабря 2004, 13:00:39
-
Здравствуйте!
Как можно ускорить загрузку сайта http://www.citylife.com.ua/?
Для ресайза картинок я там использую скрипт - может из-за этого он так плохо грузится?
-
может
-
Да у меня 10-15 фотографий и каждая "ресайзица", а если будет грузится "чистая" фотография, то несомненно загрузка будет быстрее.
RomikChef, ты ж опытный, на сколько процентов возрастет загрузка страници, как думаешь?
-
Я опытный программист, а не гадалка.
-
Извини
-
Извините а можете мне выслать Ваш скрипт который ресайзит картинки Договоримся в асе - 215697356
-
[OFF]У меня сайт грузиться не больше 2 секунд
может дело в каналах связи[/OFF]
-
Abram , а скрипт-то тебе зачем?
чем он тебе поможет?
-
а скрипт выглядит так:
exec("convert -resize 800x600 $pic");
-
exec("convert -resize 800x600 $pic");
Привожу весь свой скрипт:
$GD1_ENABLED = false;
$GD2_ENABLED = true;
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache");
// $QUERY_STRING =
// f(3c9b5fa6bc0fa) img_file
// s save
// w(123|15%) width of output
// h(123|10%) height of output
// x(123) max width of output
// y(123) max height of output
// t(jpg|png) type of output
// q(100) quality of jpeg
// find tags
preg_match_all("/\\+*(([a-z])\\(([^\\)]+)\\))\\+*/", $QUERY_STRING, $matches,
PREG_SET_ORDER);
// empty array and set regular expressions for the check
$tags = array();
$check = array(
\'f\' => \'[^)+]+\',
\'s\' => \'[^)+]+\',
\'w\' => \'[0-9]+%?\',
\'h\' => \'[0-9]+%?\',
\'x\' => \'[0-9]+\',
\'y\' => \'[0-9]+\',
\'t\' => \'jpg|png\',
\'q\' => \'1?[0-9]{1,2}\' );
// check tags and save correct values in array
for ($i=0; $i if (isset($check[$matches[$i][2]])) {
if (preg_match(\'/^(\'.$check[$matches[$i][2]].\')$/\',
$matches[$i][3])) {
$tags[$matches[$i][2]] = $matches[$i][3];
}
}
}
$filename = $tags[\'f\'];
if (!isset($filename)) notfound(); // check that filename is given
if (!file_exists($filename)) notfound(); // check if file exists
$imginfo = getimagesize($filename); // retrieve file info
// Load image
switch ($imginfo[2]) {
case 2: // JPG
$img_in = ImageCreateFromJPEG($filename) or notfound();
if (!isset($tags["t"])) $tags["t"] = "jpg";
break;
case 3: // PNG
$img_in = ImageCreateFromPNG($filename) or notfound();
if (!isset($tags["t"])) $tags["t"] = "png";
break;
default:
notfound();
}
// check for maximum width and height
if (isset($tags["x"])) {
if ($tags["x"] < ImageSX($img_in)) {
$tags["w"] = $tags["x"];
}
}
if (isset($tags["y"])) {
if ($tags["y"] < ImageSY($img_in)) {
$tags["h"] = $tags["y"];
}
}
// check for need to resize
if (isset($tags[\'h\']) || isset($tags[\'w\'])) {
// convert relative to absolute
if (isset($tags[\'w\'])) {
if (strstr($tags[\'w\'], \'%\')) {
$tags[\'w\'] = (intval(substr($tags[\'w\'], 0, -1)) / 100) * $imginfo[0];
}
}
if (isset($tags[\'h\'])) {
if (strstr($tags[\'h\'], \'%\')) {
$tags[\'h\'] = (intval(substr($tags[\'h\'], 0, -1)) / 100) * $imginfo[1];
}
}
// resize
if (isset($tags[\'w\']) && isset($tags[\'h\'])) {
$out_w = $tags[\'w\'];
$out_h = $tags[\'h\'];
} elseif (isset($tags[\'w\']) && !isset($tags[\'h\'])) {
$out_w = $tags[\'w\'];
$out_h = $imginfo[1] * ($tags[\'w\'] / $imginfo[0]);
} elseif (!isset($tags[\'w\']) && isset($tags[\'h\'])) {
$out_w = $imginfo[0] * ($tags[\'h\'] / $imginfo[1]);
$out_h = $tags[\'h\'];
} else {
$out_w = $tags[\'w\'];
$out_h = $tags[\'h\'];
}
// New image in $img_out
if ($GD1_ENABLED) {
// Utilisation de GD version 1.6+
$img_out = ImageCreate($out_w, $out_h);
ImageCopyResized($img_out, $img_in, 0, 0, 0, 0, ImageSX($img_out),
ImageSY($img_out), ImageSX($img_in), ImageSY($img_in));
} else if ($GD2_ENABLED) {
// Utilisation de GD version 2.0
$img_out = ImageCreateTrueColor($out_w, $out_h);
ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, ImageSX($img_out),
ImageSY($img_out), ImageSX($img_in), ImageSY($img_in));
} else {
$img_out = $img_in;
}
} else {
// no resize needed
$img_out = $img_in;
}
// check for a given jpeg-quality, otherwise set to default
if (!isset($tags[\'q\'])) {
$tags[\'q\'] = 75;
}
// returning the image
switch ($tags[\'t\']) {
case \'jpg\':
if (!isset($tags[\'s\'])) {
header(\'Content-type: image/jpeg\');
ImageJPEG($img_out, \'\', $tags["q"]);
} else {
ImageJPEG($img_out, urldecode($tags[\'s\']), $tags["q"]);
header(\'Location: \' . FUNCTION_getRelativePath(urldecode($tags[\'s\'])));
}
ImageDestroy($img_out);
exit;
case \'png\':
if (!isset($tags[\'s\'])) {
header(\'Content-type: image/png\');
ImagePNG($img_out);
} else {
ImagePNG($img_out, urldecode($tags[\'s\']));
header(\'Location: \' . FUNCTION_getRelativePath(urldecode($tags[\'s\'])));
}
ImageDestroy($img_out);
exit;
default:
notfound();
}
function notfound() {
header(\'Location: error.gif\');
exit;
}
?>
Получается вместо такого скрипта можно обойтись всего одной строчкой?
-
CL2004
ИМХО, перед написанием столь громадного количества строк не помешало бы задуматся о том, что нужны ли они вообще ? :)
[OFF] Удачи в разработках. [/OFF]
-
CL2004
Ещё как получается.
В любом случае, надо понимать две вещи:
1. Даже при использовании GD размер твоего скрипта можно сократитьна порядок.
2. КАКОЙ БЫ СКРИПТ НИ БЫЛ, автору топика он не поможет. Вообще никакой. любой.
-
exec("convert -resize 800x600 $pic");
Не каждый хостер разрешает использовать функцию exec
Даже при использовании GD размер твоего скрипта можно сократитьна порядок.
Как? Подскажи
-
CL2004:
Не каждый хостер разрешает использовать функцию exec
не каждый хостер разрешает использовать пхп.
так что - никаких программ. Всё ручками.
CL2004:
Как? Подскажи
если мне скажут, что эта функция делает.
А вообще, с опытом и сам поймешь - как
-
к примеру, отсуда можно выкинуть весь разбор "тегов".
Вообще непонятно, чем не устраивает стандартная передача параметров.
собственно, вся функция - бессмысленная.
На лету размер картинок меняют только женихи и студенты,
-
CL2004
Намек на то, что "почему бы не ресайзить картинки при их добавлении, а не при выводе"