Selamünaleyküm,
Boyutu MAX 500kb olan görselleri yükleme işlemi çok uzun sürüyor.(Görseller farklı boyutlarda farklı alanlarda kullanılacağı için boyutunu çözünürlüğü yüksek tutmam gerekiyor.)
Çözüm için;
A - Lazy load denedim ancak çok verimli olmadı.
B- Görsel formatlarını .webp ile değiştirdim. Ancak buda tatmin edecek kadar verimli olmadı ve Safari'de görselleri yüklemiyor.
C- Son olarak Intervention Image Cache (
http://image.intervention.io/use/cache) paketini kullandım. Yüklenme süresi olarak rahatlama oldu ancak bu seferde görselleri yeniden boyutlandırmak ve cachelemek için kullandığım route timeout hatası vermeye başladı. Sunucunun ilgili PHP.INI değerleri şu şekilde;
memory_limit = -1 [1 GB]
post_max_size = 64MB
Görselleri cachelemek için kullandığım yöntem ise şu şekilde
1- Görseli yüklendiği View dosyası
<img src="{{resim_helper('/uploads/shares/photos/falan/ornek.jpg,300,200)}}">
2- Helper Dosyası
function resim_helper($giris_resmi,$w=100,$h=100){
return route('gorsel','?src='.$giris_resmi.'&w='.$w.'&h='.$h);
}
3- Web.php (ilgili route)
Route::get('gorsel/{q?}', function () {
if(request()->has('src' )){
$src = request('src');
$chk = str_replace('/',DIRECTORY_SEPARATOR,$src);
$chk = str_replace('uploads','upload',$chk);
$src = (file_exists(public_path().$chk))?$src:config('app.gorselYok');
}else{
$src = config('app.gorselYok');
}
if(request()->has('w')){
$w = request('w');
}else{
$w = 100;
}
if(request()->has('h')){
$h = request('h');
}else{
$h = 100;
}
$cacheImage = Image::cache(function ($image) use ($src,$w,$h) {
return $image->make(url($src))->resize($w,$h, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
}, 10);
return Response::make($cacheImage,200,array('Content-Type'=>'image/jpeg'))
->setMaxAge(604800) //seconds
->setPublic();
})->name('gorsel');
Yukarıda bahsettiğim A ve B yöntemlerini eledim. C yöntemi ise bana mantıklı geliyor ancak bahsettiğim gibi timeout hatası ile ( This request takes too long to process, it is timed out by the server. If it should not be timed out, please contact administrator of this web site to increase 'Connection Timeout") karşılaşıyorum. Bu sorunun çözümü için önerileniz var mı yada kullandığım bu yöntem sağlıklı mı ne tavsiye edersiniz ?