آیا این تصاویر، در كامپیوتر كش مي شوند؟

I.NoBody

Active Member
سلام.
لطفً سایت nimapeyk.ir رو ببينيد.
من براي نمايش تصاوبر آن، از فايل PHP استفاده كرده ام و ياجاد thombnail مي كنم.
ولي امروز يه هو يادم اومد كه نكنه اين تصاویر در كامپيوتر كاربران، هر بار بايد دانلود بشه؟!
اينجوري خيلي سرعت دانلود در هر بار بازديد مياد پايين.
مي خواستم اينجا اساتيد جوابمو بدن تا مطمئن شم كه اگه اينطوره، روش كارمو عوض كنم.

TNX All
 

firebird

Member
معمولاً cache ميشن ولي شما ميتوني براي اطمينان بيشتر و تميزتر انجام شدن كار از redirect استفاده كني. همچين چيزي :
کد:
RewriteRule images/(.*) resize.php?file=images/$1
ولي اگه براي همه عكس ها هر بار فايل php كامل اجرا بشه اون چيزي كه به مشكل ميخوره cpu سرور هست. براي اين قضيه ميتوني يك شاخه cache بسازي و وقتي يك عكس براي اولين بار request شد فايل resize شده رو بسازي و بريزي تو اين شاخه و دفعات بعد از فايل cache شده استفاده كني. فقط بايد تاريخ فايل اصلي رو با فايل cache چك كني كه اگه تاريخ فايل اصلي جديدتر بود فايل resize شده رو دوباره بسازي.
 

I.NoBody

Active Member
تشكر.
میشه كد Redirect رو كاملتر بهم بدي؟
اگه دقت كنی، من در استفاده از Thombnail، از پوشه هاي مختلفي براي ذخيره عكس ها با پسوندهاي مختلف استفاده كردم.
همچنين هنگام ايجاد اونا از پارامترهاي width، hwight و quality استفاده كردم.
مثلا:

کد:
http://www.nimapeyk.ir/includes/show_image.php?filename=images/ads/ads_rkulgccghtfzkdxhzu_62.gif&width=520&height=75&quality=75


http://www.nimapeyk.ir/includes/show_image.php?filename=images/maincats/cat_zinifaqwiehoqxvt.jpg&width=32&height=32&quality=75
TNX
 
firebird روشی كه ارائه دادی نیاز داره كه سرور حتما آپاچی باشه و در ضمن mod_rewrite هم نصب باشه

I,NoBody ایجاد تصاویر بصورت داینامیك همونطور كه firebird اشاره كرده تنها مشكلش بار زیاد بر روی CPUاست به نظر من در این گونه موارد بهتره كه از قبل تصویر رو ایجاد كرده باشی و آدرس اون رو توی دیتابیس نگهداری و در زمان لازم نمایش بدی
 

firebird

Member
همونطور که bmossavari گفت، سرور باید apache+php باشه و mod_rewrite هم نصب باشه. این شرایط خیلی اوقات برقرار هست.

در مورد فشار روی cpu سرور اگه resize رو موقع ارسال انجام بدی و یه جا ذخیره کنی خیلی خیلی بهتر هست به خصوص در مورد thumbnail ها ولی خوب مواقعی هست که نمیشه. مثلاً من تو یه پروزه مجبور بودم برای یک سری عکس ها watermark بذارم و طرف میخواست بتونه watermark رو عوض کنه. از همین روش rewrite استفاده کردم. فقط شما باید مواظب باشی تصاویری که resize ندارن رو rewrite نکنی که الکی cpu نگیره.
کد htaccess. همچین چیزی میشه:

کد:
RewriteEngine On
RewriteRule ^photos/(gallery)/(\d*)/(\d*)/(.*)$ image.php?dir=$1file=$4&width=$2&height=$3 [L]

در مورد cache کردن هم کدش در داخل image.php همچیین چیزی میشه :

PHP:
<?php 
	header("Content-type: image/jpg");

	$imgfile = "./photos/{$_GET[dir]}/{$_GET[image]}";
	
	$cached = "./cache/" . str_replace('/', '_', $_GET[dir]) . '_' . $_GET[image];
	$imageModified = @filemtime($imgfile);
	$cacheModified = @filemtime($cached);
	if($imageModified < $cacheModified) {
		header("Last-Modified: ".gmdate("D, d M Y H:i:s",$thumbModified)." GMT");
		readfile($cached);
		exit;
	}

	//... resizing and ....
	
	imagejpeg($image, $cached, 80); // - write to cache
	imagedestroy($image);
?>

من این کدها رو از همین پروژه آخر برداشتم. فکر نکنی اینقدر بیکارم یه وقت ;)
 

tabib_m

Member
همونطور که میدونی، کش کردن تصاویر (و کلا فایلها) به مرورگر مربوطه بستگی داره.
که معمولا یک آدرس ثابت که مربوط به یک عکس باشه، کش میشه. در کل، اگر قرار باشه مرورگری این کار رو نکنه، شما به هیچ وجه نمیتونی وادار به انجام این کار بکنیش.

بر اساس تجربه ای که من در مورد firefox و ie داشتم، عکسهای تولید شده به وسیله ی php (معمولا) کش میشن...

موفق باشید.
 

I.NoBody

Active Member
همونطور که میدونی، کش کردن تصاویر (و کلا فایلها) به مرورگر مربوطه بستگی داره.
که معمولا یک آدرس ثابت که مربوط به یک عکس باشه، کش میشه. در کل، اگر قرار باشه مرورگری این کار رو نکنه، شما به هیچ وجه نمیتونی وادار به انجام این کار بکنیش.
البته. مي دونم. ولي تقريباً ميشه گفت كه اكثر مواقع، پيشفرض مرورگر ها اينه كه كش كنن.
از همه دوستان ممنوم.
بله فكر كنم بهتره كه تصاوير Thumbnail رو موقع Upload بسازم و اونا رو نشون بدم.
البته من قبلاً دقيقاً به خاطر اينكه قرار بود در آينده به يك سري از تصاوير WaterMark اضافه كنم، تصميم گرفتم كه اينجوري كار كنم. ولي الآن دو تا نگراني برام پيش اومده:
1- همونطور كه شما دوستان عزيز اشاره كرديد، بار سرور زياد ميشه.
2- همون مساله كش كردن روي كامپيوتر user هست كه ظاهراً كش ميشه.

به هر حال بايد يه مقدار بيشتر روش فكر كنم.
از همگي دوستان عزيز ممنونم.

خوش باشيد.
 

jhoseini

Member
همونطور که میدونی، کش کردن تصاویر (و کلا فایلها) به مرورگر مربوطه بستگی داره.
که معمولا یک آدرس ثابت که مربوط به یک عکس باشه، کش میشه. در کل، اگر قرار باشه مرورگری این کار رو نکنه، شما به هیچ وجه نمیتونی وادار به انجام این کار بکنیش.
به واسط تگ های meta نمیشه؟ یا توابعی از php که header رو به فرمت خاصی ارسال کنن ؟
یکی ادعا میکرد میشه
reading.gif
 

I.NoBody

Active Member
به واسط تگ های meta نمیشه؟ یا توابعی از php که header رو به فرمت خاصی ارسال کنن ؟
تا اونجا كه من مي دونم، فقط ميشه با كد نويسي، تعيين كرد كه فايل ها رو از روي كامپيوتر كاربر دانلود كنه( همون كش) ولي وقتي سيستم عامل كاربر چيزي رو كش نكرده، قائدتاً نمي تونه اين كارو بكنه.
كدهاي سرور سايد، نمي تونن تنظيمات مرورگرها رو تغيير بدن. فقط گاهي اوقات مي تونن يك سري دستورات رو بدن.
ولي اين چيزي كه شما مي گيد، شايد با جاوا اسكريپت قابل اجرا باشه كه من كدشو بلد نيستم
 
از طریق تگهای متا عكس این عمل امكان پذیره منظورم اینه كه می تونید بگید كه اون صفحه كش نشه و این بدون برو برگرد همیشه كار میكنه اما عكس این موضوع همونطور كه دوستان اعلام كردن بستگی كامل به كش مرورگر داره كه اگه مشكلی داشته باشه عمل نمی كنه
در مورد php هم توابع header معمولا همون تگهای meta را تولید میكنند كه فرقی نمی كنه
در مورد جاوا اسكریپت هم به همون مشكل قبلی بر میخوریم ، یعنی اگه كش مرورگر مشكل داشته باشه (درست عمل نكنه یا فضای كافی نداشته باشه و یا ....) باز هم عمل نمی كنه
 
آخرین ویرایش:

tabib_m

Member
تا حدودی درسته.
اما
و این بدون برو برگرد همیشه كار میكنه
اینطور نیست که بدون برو بگرد کار کنه! اگر مرورگر درست و حسابی ای باشه و این دستور رو قبول کنه! اون وقت این عمل انجام میشه که عمدتا این کار انجام میشه.
منظورم اینه که در اینجا کد مربوطه (چه html و چه php) فقط داره از مرورگر درخواست میکنه که مرورگر فایل مربوطه رو کش نکنه! همین. حالا اگر یه موقع آقای مرورگر عشقش کشید که کش نکنه، کش نمیکنه :)

توابع header معمولا همون تگهای meta را تولید میكنند
اینطوری نیست. توابع header ربطی به متاتگ های html ندارن!! کارشون رو جداگونه انجام میدن و فقط زمانی دستوراتشون انجام میشه که فایل مربوطه داره از سرور فراخوانی میشه! اما متاتگ ها عضو کدهای html هستن و هر وقت که صفحه ی html ساخته شده، فراخوانی بشه (حتی صفحه ی سیو شده و یا کش شده) اجرا میشن!
 
اینطور نیست که بدون برو بگرد کار کنه! اگر مرورگر درست و حسابی ای باشه و این دستور رو قبول کنه! اون وقت این عمل انجام میشه که عمدتا این کار انجام میشه.
منظورم اینه که در اینجا کد مربوطه (چه html و چه php) فقط داره از مرورگر درخواست میکنه که مرورگر فایل مربوطه رو کش نکنه! همین. حالا اگر یه موقع آقای مرورگر عشقش کشید که کش نکنه، کش نمیکنه :)
حق با شماست بهتر بود از بدون برو برگرد استفاده نمیكردم:neutral:

اینطوری نیست. توابع header ربطی به متاتگ های html ندارن!! کارشون رو جداگونه انجام میدن و فقط زمانی دستوراتشون انجام میشه که فایل مربوطه داره از سرور فراخوانی میشه! اما متاتگ ها عضو کدهای html هستن و هر وقت که صفحه ی html ساخته شده، فراخوانی بشه (حتی صفحه ی سیو شده و یا کش شده) اجرا میشن!
در مورد تابع header باید بگم كه عملا سرور همون header رو بجای output كردن روی html در header فایل ارسالی جایگزین میكنه بنابراین هیچ فرقی نمیكنه
یعنی برای ایجاد كردن header دو راه وجود داره
  1. ارسال مستقیم آنها در زمان پاسخ به درخواست client كه در حقیقت یه header داینامیك میشه.
  2. ارسال آنها در بخش header خود فایل html كه بصورت استاتیك(Meta tag) ایجاد شده.
كلا منظور بنده اینه كه نتیجه استفاده از داینامیك header و استاتیك header یكیه هر دوشون دقیقا یك چیز هستند از دید مرورگر
ببخشید اگه در پست قبلی در استفاده از قیود و رسوندن مطلب تنبلی بخرج داده بودم :wink:
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا