Forum Webscript.Ru

Программирование => PHP => Тема начата: CL2004 от 25 Декабря 2004, 13:00:39

Название: Как улучшить загрузку сайта
Отправлено: CL2004 от 25 Декабря 2004, 13:00:39
Здравствуйте!
Как можно ускорить загрузку сайта http://www.citylife.com.ua/?
Для ресайза картинок я там использую скрипт - может из-за этого он так плохо грузится?
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 25 Декабря 2004, 13:18:22
может
Название: Как улучшить загрузку сайта
Отправлено: CL2004 от 25 Декабря 2004, 13:31:49
Да у меня 10-15 фотографий и каждая "ресайзица", а если будет грузится "чистая" фотография, то несомненно загрузка будет быстрее.
RomikChef, ты ж опытный, на сколько процентов возрастет загрузка страници, как думаешь?
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 25 Декабря 2004, 16:29:03
Я опытный программист, а не гадалка.
Название: Как улучшить загрузку сайта
Отправлено: Abram от 25 Декабря 2004, 17:44:58
Извини
Название: Как улучшить загрузку сайта
Отправлено: Abram от 25 Декабря 2004, 17:47:32
Извините а можете мне выслать Ваш скрипт который ресайзит картинки Договоримся в асе - 215697356
Название: Как улучшить загрузку сайта
Отправлено: Slastik от 25 Декабря 2004, 20:56:59
[OFF]У меня сайт грузиться не больше 2 секунд
может дело в каналах связи[/OFF]
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 26 Декабря 2004, 12:54:23
Abram , а скрипт-то тебе зачем?
чем он тебе поможет?
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 26 Декабря 2004, 13:04:59
а скрипт выглядит так:
exec("convert -resize 800x600 $pic");
Название: Как улучшить загрузку сайта
Отправлено: CL2004 от 27 Декабря 2004, 10:22:56
Цитировать
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;
}
?>

Получается вместо такого  скрипта можно обойтись всего одной строчкой?
Название: Как улучшить загрузку сайта
Отправлено: for_i_0 от 27 Декабря 2004, 11:00:17
CL2004

ИМХО, перед написанием столь громадного количества строк не помешало бы задуматся о том, что  нужны ли они вообще ? :)

[OFF] Удачи в разработках. [/OFF]
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 27 Декабря 2004, 12:49:56
CL2004
Ещё как получается.
В любом случае, надо понимать две вещи:
1. Даже при использовании GD размер твоего скрипта можно сократитьна порядок.
2. КАКОЙ БЫ СКРИПТ НИ БЫЛ, автору топика он не поможет. Вообще никакой. любой.
Название: Как улучшить загрузку сайта
Отправлено: CL2004 от 27 Декабря 2004, 18:21:30
Цитировать
exec("convert -resize 800x600 $pic");

Не каждый хостер разрешает использовать функцию exec

Цитировать
Даже при использовании GD размер твоего скрипта можно сократитьна порядок.

Как? Подскажи
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 27 Декабря 2004, 19:31:49
Цитировать
CL2004:
Не каждый хостер разрешает использовать функцию exec

не каждый хостер разрешает использовать пхп.
так что - никаких программ. Всё ручками.

Цитировать
CL2004:
Как? Подскажи

если мне скажут, что эта функция делает.
А вообще, с опытом и сам поймешь - как
Название: Как улучшить загрузку сайта
Отправлено: Меняздесьдавнонет от 27 Декабря 2004, 19:35:19
к примеру, отсуда можно выкинуть весь разбор "тегов".
Вообще непонятно, чем не устраивает стандартная передача параметров.

собственно, вся функция - бессмысленная.
На лету размер картинок меняют только женихи и студенты,
Название: Как улучшить загрузку сайта
Отправлено: hanslinger от 27 Декабря 2004, 22:46:54
CL2004
Намек на то, что "почему бы не ресайзить картинки при их добавлении, а не при выводе"