PDA

View Full Version : سوال: آیا کش کردن فایلهای تصویر ضروری هست؟



idocsidocs
جمعه 10 دی 1389, 01:22 صبح
با توجه به اینکه اغلب مرورگرها تصاویر رو کش می کنن، آیا در هنگام نمایش فایلهای تصویری، کش کردن این فایلها ضروری هست؟

Program3r
جمعه 10 دی 1389, 04:59 صبح
ضروری نیست
بهتره کش بشن ...

امیـرحسین
جمعه 10 دی 1389, 12:45 عصر
منظورتون از کش کردن چیه؟ چجوری یعنی؟
من ربط کش کردن مرورگرها و PHP رو نفهمیدم

Program3r
جمعه 10 دی 1389, 19:32 عصر
به php ربطی نداره ولی با php میشه کاری کرد که صفحات کش بشن .
کلا بحث سر HTTP HEADER هستش.

idocsidocs
شنبه 11 دی 1389, 12:26 عصر
به php ربطی نداره ولی با php میشه کاری کرد که صفحات کش بشن .
کلا بحث سر HTTP HEADER هستش.

همونطور که گفتم مرورگرها تصاویر رو کش می کنن، با توجه به این مطلب آیا ضروری هست که توی PHP از توابع کش استفاده کنیم تا تصاویر روس سرور کش بشن؟

idocsidocs
شنبه 11 دی 1389, 12:29 عصر
منظورتون از کش کردن چیه؟ چجوری یعنی؟
من ربط کش کردن مرورگرها و PHP رو نفهمیدم

من سه اسکریپت دیدم که یه پوشه به اسم کش ایجاد می کرد و تصاویر رو قبل از نمایش توی این پوشه قرار می داد. این کار به کمک توابع پی اچ پی انجام می شد.

آیا انجام اینکار ضروری هست و کمکی به کم کردن فشار روی سرور می کنه؟

idocsidocs
شنبه 11 دی 1389, 12:31 عصر
ضروری نیست
بهتره کش بشن ...

اگر اینکار ضروری نیست، چه دلیلی داره که این روش رو پیشنهاد می کنن؟

Program3r
یک شنبه 12 دی 1389, 04:11 صبح
شما اول گفتید کش کردن در مرورگر !!! که مربوط به کش کردن در سرور نیست .

کش سرور معمولا برای فشار کمتر به cpu مورد استفاده قرار میگیرد .
اما کش کردن در مرورگر برای سیو پهنای باند استفاده میشود.

فرض شود سایتی دارید که گفته های روزانتون رو اونجا مینویسید . برای هر بازدید باید کد های php مورد پردازش قرار بگیرند . ولی در صورتی که ما بیایم یک بار کد رو پردازش کنیم و html حاصل از کد های php رو در سرور ذخیره کنیم. و پس دیگر لازم نیست که کد های php مورد پردازش قرار بگیرند .!!!!! به همین راحتی سرور تا 180% بهینه تر میشود !!!!

eshpilen
یک شنبه 12 دی 1389, 13:01 عصر
من سه اسکریپت دیدم که یه پوشه به اسم کش ایجاد می کرد و تصاویر رو قبل از نمایش توی این پوشه قرار می داد. این کار به کمک توابع پی اچ پی انجام می شد.

آیا انجام اینکار ضروری هست و کمکی به کم کردن فشار روی سرور می کنه؟
احتمالا تصاویر در دیتابیس ذخیره شده بودن یا بصورت داینامیک ایجاد/دستکاری میشدن. در اینطور مواقع با کش کردن تصاویر دیگه نیازی به پردازش اولیه یا ارتباط با دیتابیس نیست (بنظرم سیستم فایل سبک تر و سریعتر از دیتابیس هست).

mtchabok
یک شنبه 12 دی 1389, 13:10 عصر
کش شدن اطلاعات فقط و فقط به اسکریپتی هست که در حال اجراست ، مربوط هست و به هیچ وجه نباید به گونه ای کلی در مورد سیستم و یا کل سایت این مورد رو تصمیم گرفت بلکه باید به صورت محلی بهش فکر کرد ... منظورم اینه که در برخی از قسمتها عمل کش شدن باعث افزایش سرعت میشه ولی در برخی موارد همین کش شدن باعث حروم شدن منابع سیستمی و خراب شدن اطلاعات هم میشه .
در کل فقط بستگی به اسکریپتی داره که استفاده می کنید .

eshpilen
یک شنبه 12 دی 1389, 14:51 عصر
کش شدن اطلاعات فقط و فقط به اسکریپتی هست که در حال اجراست ، مربوط هست و به هیچ وجه نباید به گونه ای کلی در مورد سیستم و یا کل سایت این مورد رو تصمیم گرفت بلکه باید به صورت محلی بهش فکر کرد ... منظورم اینه که در برخی از قسمتها عمل کش شدن باعث افزایش سرعت میشه ولی در برخی موارد همین کش شدن باعث حروم شدن منابع سیستمی و خراب شدن اطلاعات هم میشه .
در کل فقط بستگی به اسکریپتی داره که استفاده می کنید .
بله درسته.
هرچیزی بجای خودش.
مثل کسانی که در بهینه سازی افراط میکنن.
بعضی از بهینه سازیها فقط در فکر اون افراد بهینه سازی هستن؛ در عمل یا تاثیری ندارن، یا تاثیر نامشهودی دارن، یا حتی در بعضی موارد نتیجهء معکوس دارن.
اول باید منطق برنامه رو کامل کرد. بعد بهینه سازیهای بزرگ کلی و سریع. و هروقت در عمل لازم بود بهینه سازیهای پیچیده تر و جزیی تر.
بنظرم برنامه های خیلی افراد رو نگاه کنید از مهمترین منظر که منطق و الگوریتم و امنیت هست، دچار ضعفها و نقصهای قابل توجهی هستن. این افراد بینش و تفکر جامع و عمیقی که اصولی و واقعگرایانه باشه دربارهء حیطه های دیگر مثل بهینه سازیها هم ندارن و فکر میکنن فقط همین مونده از کارشون.
کلا برنامه رو باید تاحد ممکن ساده نگه داشت. البته توجه داشته باشید که سادگی مذکور درمورد یک برنامهء حرفه ای کامل، میتونه خیلی پیچیده تر از تمام شاهکارهای یک برنامه نویس ناشی باشه! از طرف دیگه منظور از پیچیدگی فقط حجم کد نیست، منظور پیچیدگی و ظرافت و هوشمندانه بودن علمی و منطقی و ریاضی الگوریتم هست که ممکنه از نظر حجمی اصلا مشهود نباشه.
پیاده سازی یک سیستم کش درسته که در بعضی موارد مفید یا لازمه، ولی در موارد متعددی، پیاده سازی کامل و اصولی و بدون باگ اون کار راحتی نیست، و ضمنا به پیچیدگی و حجم الگوریتمهای برنامه و هزینهء نگهداری و توسعهء اون هم اضافه میکنه.
البته در ASP.NET امکانات بیشتر و خودکار و راحتتری برای استفاده از کش وجود داره که باعث استفادهء راحتتر و سریعتر و امن تر از کش میشه.

idocsidocs
یک شنبه 12 دی 1389, 18:12 عصر
کش شدن اطلاعات فقط و فقط به اسکریپتی هست که در حال اجراست ، مربوط هست و به هیچ وجه نباید به گونه ای کلی در مورد سیستم و یا کل سایت این مورد رو تصمیم گرفت بلکه باید به صورت محلی بهش فکر کرد ... منظورم اینه که در برخی از قسمتها عمل کش شدن باعث افزایش سرعت میشه ولی در برخی موارد همین کش شدن باعث حروم شدن منابع سیستمی و خراب شدن اطلاعات هم میشه .
در کل فقط بستگی به اسکریپتی داره که استفاده می کنید .

نگفتید که ایجاد یه پوشه به اسم کش و قرار دادن تصاویری که کاربران درخواست می کنن در این پوشه کار درستی هست یا نه؟

eshpilen
یک شنبه 12 دی 1389, 19:34 عصر
اونی که شما دیدی حتما شرایط خاصی داشته که چند موردش رو حدس زدیم.
وگرنه تصاویر رو از یک دایرکتوری به دایرکتوری دیگه ببری که چی بشه؟ کجاش بهینه میشه؟
اینکه تاثیری داشته باشه یا نداشته باشه حتما مربوط به جزییات و شرایط خاص اون مورد و موارد مشابه میشده، که این شرایط برای ما روشن نیست. وگرنه هیچ دلیل منطقی ای دال بر افزایش محسوسی در کارایی دیده نمیشه در اینکه تصاویر رو از یک جا به جای دیگه ببریم!! اصلا به دردسرش و ایجاد پیچیدگی و حجم و ناخوانایی در سیستم و کد نمی ارزه.
مثلا یه جایی که توی یک دایرکتوری حداقل چند هزار تصویر داریم ممکنه با کاربردهای معمول که نهایتش چند صد تا تصویر هست تفاوت فاحشی داشته باشه. اما نه در تعدادهای معمولی.
شاید اصلا اون پوشه خودش بخشی از یک سیستم خاص دیگر بوده.
شما اطلاعات اولیهء کاملا ناقص و نادقیقی میدی که بر اساسش هیچکس نمیتونه نظر اصولی ای بده و حتی حدسی با احتمال بالا داشته باشه.
یعنی اصولا چیزی برای بحث کردن و نظر دادن وجود نداره!

منظورت از «تصاویری که کاربران درخواست میکنن» چیه؟ منظورت تصاویری هست که در صفحات سایت وجود دارن؟ و این تصاویر در دایرکتوریهای سایت ذخیره شدن؟

idocsidocs
یک شنبه 12 دی 1389, 20:10 عصر
اونی که شما دیدی حتما شرایط خاصی داشته که چند موردش رو حدس زدیم.
وگرنه تصاویر رو از یک دایرکتوری به دایرکتوری دیگه ببری که چی بشه؟ کجاش بهینه میشه؟
اینکه تاثیری داشته باشه یا نداشته باشه حتما مربوط به جزییات و شرایط خاص اون مورد و موارد مشابه میشده، که این شرایط برای ما روشن نیست. وگرنه هیچ دلیل منطقی ای دال بر افزایش محسوسی در کارایی دیده نمیشه در اینکه تصاویر رو از یک جا به جای دیگه ببریم!! اصلا به دردسرش و ایجاد پیچیدگی و حجم و ناخوانایی در سیستم و کد نمی ارزه.
مثلا یه جایی که توی یک دایرکتوری حداقل چند هزار تصویر داریم ممکنه با کاربردهای معمول که نهایتش چند صد تا تصویر هست تفاوت فاحشی داشته باشه. اما نه در تعدادهای معمولی.
شاید اصلا اون پوشه خودش بخشی از یک سیستم خاص دیگر بوده.
شما اطلاعات اولیهء کاملا ناقص و نادقیقی میدی که بر اساسش هیچکس نمیتونه نظر اصولی ای بده و حتی حدسی با احتمال بالا داشته باشه.
یعنی اصولا چیزی برای بحث کردن و نظر دادن وجود نداره!

منظورت از «تصاویری که کاربران درخواست میکنن» چیه؟ منظورت تصاویری هست که در صفحات سایت وجود دارن؟ و این تصاویر در دایرکتوریهای سایت ذخیره شدن؟




<?php
ob_start();
/*
Paramters
---------
w: width
h: height
zc: zoom crop (0 or 1)
q: quality (default is 75 and max is 100)

HTML example: <img src="/scripts/Thumbnail.php?src=/images/whatever.jpg&w=150&h=200&zc=1" alt="" />
*/

/*
$sizeLimits = array(
"100x100",
"150x150",
);
*/

define("CACHE_SIZE", 200); // number of files to store before clearing cache
define("CACHE_CLEAR", 5); // maximum number of files to delete on each cache clear
define("VERSION", "1.08"); // version number (to force a cache refresh

$imageFilters = array(
"1" => array(IMG_FILTER_NEGATE, 0),
"2" => array(IMG_FILTER_GRAYSCALE, 0),
"3" => array(IMG_FILTER_BRIGHTNESS, 1),
"4" => array(IMG_FILTER_CONTRAST, 1),
"5" => array(IMG_FILTER_COLORIZE, 4),
"6" => array(IMG_FILTER_EDGEDETECT, 0),
"7" => array(IMG_FILTER_EMBOSS, 0),
"8" => array(IMG_FILTER_GAUSSIAN_BLUR, 0),
"9" => array(IMG_FILTER_SELECTIVE_BLUR, 0),
"10" => array(IMG_FILTER_MEAN_REMOVAL, 0),
"11" => array(IMG_FILTER_SMOOTH, 0),
);

// sort out image source
$src = get_request("src", "");
if($src == "" || strlen($src) <= 3) {
displayError("no image specified");
}

// clean params before use
$src = cleanSource($src);
// last modified time (for caching)
$lastModified = filemtime($src);

// get properties
$new_width = preg_replace("/[^0-9]+/", "", get_request("w", 0));
$new_height = preg_replace("/[^0-9]+/", "", get_request("h", 0));
$zoom_crop = preg_replace("/[^0-9]+/", "", get_request("zc", 1));
$quality = preg_replace("/[^0-9]+/", "", get_request("q", 80));
$filters = get_request("f", "");

if ($new_width == 00 && $new_height == 00) {
$new_width = 100;
$new_height = 100;
}

// set path to cache directory (default is ./cache)
// this can be changed to a different location
$cache_dir = './cache';

// get mime type of src
$mime_type = mime_type($src);

// check to see if this image is in the cache already
check_cache( $cache_dir, $mime_type );

// if not in cache then clear some space and generate a new file
cleanCache();

ini_set('memory_limit', "30M");

// make sure that the src is gif/jpg/png
if(!valid_src_mime_type($mime_type)) {
displayError("Invalid src mime type: " .$mime_type);
}

// check to see if GD function exist
if(!function_exists('imagecreatetruecolor')) {
displayError("GD Library Error: imagecreatetruecolor does not exist");
}

if(strlen($src) && file_exists($src)) {

// open the existing image
$image = open_image($mime_type, $src);
if($image === false) {
displayError('Unable to open image : ' . $src);
}

// Get original width and height
$width = imagesx($image);
$height = imagesy($image);

// don't allow new width or height to be greater than the original
if( $new_width > $width ) {
$new_width = $width;
}
if( $new_height > $height ) {
$new_height = $height;
}

// generate new w/h if not provided
if( $new_width && !$new_height ) {

$new_height = $height * ( $new_width / $width );

} elseif($new_height && !$new_width) {

$new_width = $width * ( $new_height / $height );

} elseif(!$new_width && !$new_height) {

$new_width = $width;
$new_height = $height;

}

// create a new true color image
$canvas = imagecreatetruecolor( $new_width, $new_height );
imagealphablending($canvas, false);
// Create a new transparent color for image
$color = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
// Completely fill the background of the new image with allocated color.
imagefill($canvas, 0, 0, $color);
// Restore transparency blending
imagesavealpha($canvas, true);

if( $zoom_crop ) {

$src_x = $src_y = 0;
$src_w = $width;
$src_h = $height;

$cmp_x = $width / $new_width;
$cmp_y = $height / $new_height;

// calculate x or y coordinate and width or height of source

if ( $cmp_x > $cmp_y ) {

$src_w = round( ( $width / $cmp_x * $cmp_y ) );
$src_x = round( ( $width - ( $width / $cmp_x * $cmp_y ) ) / 2 );

} elseif ( $cmp_y > $cmp_x ) {

$src_h = round( ( $height / $cmp_y * $cmp_x ) );
$src_y = round( ( $height - ( $height / $cmp_y * $cmp_x ) ) / 2 );

}

imagecopyresampled( $canvas, $image, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h );

} else {

// copy and resize part of an image with resampling
imagecopyresampled( $canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

}

if ($filters != "") {
// apply filters to image
$filterList = explode("|", $filters);
foreach($filterList as $fl) {
$filterSettings = explode(",", $fl);
if(isset($imageFilters[$filterSettings[0]])) {

for($i = 0; $i < 4; $i ++) {
if(!isset($filterSettings[$i])) {
$filterSettings[$i] = null;
}
}

switch($imageFilters[$filterSettings[0]][1]) {

case 1:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1]);
break;

case 2:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2]);
break;

case 3:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0], $filterSettings[1], $filterSettings[2], $filterSettings[3]);
break;

default:

imagefilter($canvas, $imageFilters[$filterSettings[0]][0]);
break;

}
}
}
}

// output image to browser based on mime type
show_image($mime_type, $canvas, $cache_dir);

// remove image from memory
imagedestroy($canvas);

} else {

if(strlen($src)) {
displayError("image " . $src . " not found");
} else {
displayError("no source specified");
}

}

/**
*
*/
function show_image($mime_type, $image_resized, $cache_dir) {

global $quality;

// check to see if we can write to the cache directory
$is_writable = 0;
$cache_file_name = $cache_dir . '/' . get_cache_file();

if(touch($cache_file_name)) {

// give 666 permissions so that the developer
// can overwrite web server user
chmod($cache_file_name, 0666);
$is_writable = 1;

} else {

$cache_file_name = NULL;
imageong();
// header('Content-type: ' . $mime_type);

}

$quality = floor($quality * 0.09);

imagepng($image_resized, $cache_file_name, $quality);

if($is_writable) {
show_cache_file($cache_dir, $mime_type);
}

imagedestroy($image_resized);

displayError("error showing image");

}

/**
*
*/
function get_request( $property, $default = 0 ) {

if( isset($_REQUEST[$property]) ) {

return $_REQUEST[$property];

} else {

return $default;

}

}

/**
*
*/
function open_image($mime_type, $src) {
if(stristr($mime_type, 'gif')) {
$image = imagecreatefromgif($src);
} elseif(stristr($mime_type, 'jpeg')) {
@ini_set('gd.jpeg_ignore_warning', 1);
$image = imagecreatefromjpeg($src);
} elseif( stristr($mime_type, 'png')) {
$image = imagecreatefrompng($src);
}
return $image;

}

/**
* clean out old files from the cache
* you can change the number of files to store and to delete per loop in the defines at the top of the code
*/
function cleanCache() {

$files = glob("cache/*", GLOB_BRACE);

$yesterday = time() - (24 * 60 * 60);

if (count($files) > 0) {

usort($files, "filemtime_compare");
$i = 0;

if (count($files) > CACHE_SIZE) {

foreach ($files as $file) {

$i ++;

if ($i >= CACHE_CLEAR) {
return;
}

if (filemtime($file) > $yesterday) {
return;
}

unlink($file);

}

}

}

}

/**
* compare the file time of two files
*/
function filemtime_compare($a, $b) {

return filemtime($a) - filemtime($b);

}

/**
* determine the file mime type
*/
function mime_type($file) {

if (stristr(PHP_OS, 'WIN')) {
$os = 'WIN';
} else {
$os = PHP_OS;
}

$mime_type = '';

if (function_exists('mime_content_type')) {
$mime_type = mime_content_type($file);
}

// use PECL fileinfo to determine mime type
if (!valid_src_mime_type($mime_type)) {
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME);
$mime_type = finfo_file($finfo, $file);
finfo_close($finfo);
}
}

// try to determine mime type by using unix file command
// this should not be executed on windows
if (!valid_src_mime_type($mime_type) && $os != "WIN") {
if (preg_match("/FREEBSD|LINUX/", $os)) {
$mime_type = trim(@shell_exec('file -bi "' . $file . '"'));
}
}

// use file's extension to determine mime type
if (!valid_src_mime_type($mime_type)) {

// set defaults
$mime_type = 'image/png';
// file details
$fileDetails = pathinfo($file);
$ext = strtolower($fileDetails["extension"]);
// mime types
$types = array(
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif'
);

if (strlen($ext) && strlen($types[$ext])) {
$mime_type = $types[$ext];
}

}

return $mime_type;

}

/**
*
*/
function valid_src_mime_type($mime_type) {

if (preg_match("/jpg|jpeg|gif|png/i", $mime_type)) {
return true;
}

return false;

}

/**
*
*/
function check_cache($cache_dir, $mime_type) {

// make sure cache dir exists
if (!file_exists($cache_dir)) {
// give 777 permissions so that developer can overwrite
// files created by web server user
mkdir($cache_dir);
chmod($cache_dir, 0777);
}

show_cache_file($cache_dir, $mime_type);

}

/**
*
*/
function show_cache_file($cache_dir) {

$cache_file = $cache_dir . '/' . get_cache_file();

if (file_exists($cache_file)) {

$gmdate_mod = gmdate("D, d M Y H:i:s", filemtime($cache_file));

if(! strstr($gmdate_mod, "GMT")) {
$gmdate_mod .= " GMT";
}

if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {

// check for updates
$if_modified_since = preg_replace("/;.*$/", "", $_SERVER["HTTP_IF_MODIFIED_SINCE"]);

if ($if_modified_since == $gmdate_mod) {
header("HTTP/1.1 304 Not Modified");
exit;
}

}

$fileSize = filesize($cache_file);

// send headers then display image
header("Content-Type: image/png");
header("Accept-Ranges: bytes");
header("Last-Modified: " . $gmdate_mod);
header("Content-Length: " . $fileSize);
header("Cache-Control: max-age=9999, must-revalidate");
header("Expires: " . $gmdate_mod);

readfile($cache_file);

exit;

}

}

/**
*
*/
function get_cache_file() {

global $lastModified;
static $cache_file;

if(!$cache_file) {
$cachename = $_SERVER['QUERY_STRING'] . VERSION . $lastModified;
$cache_file = md5($cachename) . '.png';
}

return $cache_file;

}

/**
* check to if the url is valid or not
*/
function valid_extension ($ext) {

if (preg_match("/jpg|jpeg|png|gif/i", $ext)) {
return TRUE;
} else {
return FALSE;
}

}

/**
* tidy up the image source url
*/
function cleanSource($src) {

// remove slash from start of string
if(strpos($src, "/") == 0) {
$src = substr($src, -(strlen($src) - 1));
}

// remove http/ https/ ftp
$src = preg_replace("/^((ht|f)tp(s|):\/\/)/i", "", $src);
// remove domain name from the source url
$host = $_SERVER["HTTP_HOST"];
$src = str_replace($host, "", $src);
$host = str_replace("www.", "", $host);
$src = str_replace($host, "", $src);

// don't allow users the ability to use '../'
// in order to gain access to files below document root

// src should be specified relative to document root like:
// src=images/img.jpg or src=/images/img.jpg
// not like:
// src=../images/img.jpg
$src = preg_replace("/\.\.+\//", "", $src);

//print_r($_SERVER);

// get path to image on file system
$src = get_document_root($src) . '/' . $src;

return $src;

}

/**
*
*/
function get_document_root ($src) {

// check for unix servers
if(@file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . $src)) {
return $_SERVER['DOCUMENT_ROOT'];
}

// the relative paths below are useful if Thumbnail is moved outside of document root
// specifically if installed in wordpress themes like mimbo pro:
// /wp-content/themes/mimbopro/scripts/Thumbnail.php
$paths = array(
".",
"..",
"../..",
"../../..",
"../../../..",
"../../../../.."
);

foreach($paths as $path) {
if(@file_exists($path . '/' . $src)) {
return $path;
}
}

// special check for microsoft servers
if(!isset($_SERVER['DOCUMENT_ROOT'])) {
$path = str_replace("/", "\\", $_SERVER['ORIG_PATH_INFO']);
$path = str_replace($path, "", $_SERVER['SCRIPT_FILENAME']);

if( @file_exists( $path . '/' . $src ) ) {
return $path;
}
}

displayError('file not found ' . $src);

}

/**
* generic error message
*/
function displayError($errorString = '') {

header('HTTP/1.1 400 Bad Request');
die($errorString);

}
?>
برای اینکه ابهامات برطرف بشه کد کامل اسکریپت رو براتون قرار دادم.

لطفا بررسی کنید. منتظر نظرتون هستم.

eshpilen
یک شنبه 12 دی 1389, 21:09 عصر
این با یک نگاه سرسری فکر میکنم مشخصه که علتش همونی باشه که قبلا عرض کردم (از روی کاربرد توابعی مثل imagecreatetruecolor). در اینجا چون تصاویر بصورت دینامیک توسط PHP تولید و دستکاری میشن که اینکار پردازش و منابع قابل توجهی رو صرف میکنه، به صرفه هست که اونها رو بصورت تصاویر استاتیک روی دیسک ذخیره کنیم تا در دفعات بعدی نیاز نباشه مجددا این تصاویر رو با صرف منابع قابل توجه تولید/دستکاری کنیم. البته این درصورتی هست که بشه تصاویر یکسانی رو برای حداقل چند درخواست بعدی ارسال کرد (تصاویر تولید شده برای چند درخواست یکسان هستن).
فکر نمیکنم نیاز به خوندن کامل و دقیقتر کدش باشه؛ اگر ابهام و سوالی داشتی خودت بگو.
خب اینطور سیستمهای کش فکر میکنم درمورد تصاویر بزرگ و دارای محتوای پیچیده بیشتر مهم باشن تا تصاویر کوچک و با محتوای ساده. بستگی به چند عامل داره که آیا ایجاد چنین کشی مفید یا لازم باشه یا نه. یکی حجم تصاویر دینامیک تولید شده (البته فکر نمیکنم به تنهایی زیاد مهم باشه)، یکی پیچیدگی تصویری که در اونها هست/سنگینی الگوریتمی که اونها رو ایجاد کرده، یکی دیگه تعدادشون، یکی دیگه اینکه معمولا به چند درخواست دیگر با یک تصویر یکسان میشه پاسخ داد. باید همهء این پارامترها رو در یک فرمول کلی برآورد کرد.
ضمنا این کد جزو چه برنامه ای هست / از کجا آوردیش؟
لزوما هر کدی که در نت بود چیز بدردبخور و درستی نیست.

eshpilen
یک شنبه 12 دی 1389, 21:26 عصر
عبارت HTML example: <img src="/scripts/Thumbnail.php?src=/images/whatever.jpg&w=150&h=200&zc=1" alt="" /> نشون میده که ظاهرا این یک برنامه برای تولید Thumbnail برای تصاویر استاتیک بزرگتری هست.
بنظرم عملیاتش اونقدری زیاد هست که نیازمند یک سیستم کش باشه یا حداقل ایجاد چنین کشی مفید باشه.
مجموعا مورد خیلی واضحی هست؛ واسه همین دیگه بقیش رو نگاه نکردم.

idocsidocs
دوشنبه 13 دی 1389, 01:23 صبح
عبارت HTML example: <img src="/scripts/Thumbnail.php?src=/images/whatever.jpg&w=150&h=200&zc=1" alt="" /> نشون میده که ظاهرا این یک برنامه برای تولید Thumbnail برای تصاویر استاتیک بزرگتری هست.
بنظرم عملیاتش اونقدری زیاد هست که نیازمند یک سیستم کش باشه یا حداقل ایجاد چنین کشی مفید باشه.
مجموعا مورد خیلی واضحی هست؛ واسه همین دیگه بقیش رو نگاه نکردم.


ممنون از راهنماییتون. یه مسئله در مورد تابع chgrp دارم که در لینک زیر مطرح کردم.
امکانش هست که جواب تاپیک زیر رو هم بهم بدید؟

http://barnamenevis.org/showthread.php?268141