Giriş yapmadınız.

#1 28.04.2019 10:56:12

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Laravel ve tarayici cache özelliği hakkinda

Selamlar, keşleme olayina cok fazla hakim degilim o yuzden bi kac soru sormak istiyorum yardimlariniz icin simdiden tesekkur ederim:

1 - Tarayicinin keşlemesiyle laravelin keşlemesi arasinda nasil bir fark var, bunlar otomatik olan bir sey mi ?
2 - Keşleme ozelligine laravel uzerinden mudahele edebiliyor muyuz tarayicinin veya laravel'in keşleme ozelligini iptal etmek gibi ?

Çevrimdışı

#2 28.04.2019 20:49:54

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,623
Website

Yanıt: Laravel ve tarayici cache özelliği hakkinda

Laravel'in içerisinde önbellekleme ile taraycının önbelleklemesi elbette farklı şeyler. Tarayıcı, önbelleği kullanıcının bilgisayarında tutar ve işlemi yapan taryıcıdır; Laravel ise sunucuda tutar. (uzak sunucu da olabilir. Javascript yardımı ile tarayıcıda da tutmak mümkün olabilir).

Hem Laravel'in önbelleği ve hem de tarayıcı önbelleği kontrol edilebilir, yani iptal edebilir ya da farklı şekilde çalışmasını sağlayabilirsiniz.

Laravel'de önbellek ayarları yapılarak kontrol edilir. Otomatik olarak yapılan tek önbellekleme işlemi bildiğim kadarıyla blade şablonlarının derlenmesi. Çalışma şekli itibariyle öyle elbette. Kapatılabilir mi bilmiyorum, hiç ihtiyacım olmadı.

Tarayıcının kendi içerisindeki ayarlar ile önbelleğe müdahale edebiliyorsunuz (en basitinden Chrome'da ctrl+shift+delete ile çıkan bölüm mesela). PHP ile kontrol etmek isterseniz, örneğin iptal etmek için:

header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');

(Elbette Laravel kullanırken direk header() yöntemini kullanmıyoruz. Onun yerine Illuminate\Http\Request objesi içerisinde gerekli yöntemler var)

Çevrimdışı

#3 28.04.2019 20:58:45

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Yanıt: Laravel ve tarayici cache özelliği hakkinda

mgsmus yazdı:

Laravel'in içerisinde önbellekleme ile taraycının önbelleklemesi elbette farklı şeyler. Tarayıcı, önbelleği kullanıcının bilgisayarında tutar ve işlemi yapan taryıcıdır; Laravel ise sunucuda tutar. (uzak sunucu da olabilir. Javascript yardımı ile tarayıcıda da tutmak mümkün olabilir).

Hem Laravel'in önbelleği ve hem de tarayıcı önbelleği kontrol edilebilir, yani iptal edebilir ya da farklı şekilde çalışmasını sağlayabilirsiniz.

Laravel'de önbellek ayarları yapılarak kontrol edilir. Otomatik olarak yapılan tek önbellekleme işlemi bildiğim kadarıyla blade şablonlarının derlenmesi. Çalışma şekli itibariyle öyle elbette. Kapatılabilir mi bilmiyorum, hiç ihtiyacım olmadı.

Tarayıcının kendi içerisindeki ayarlar ile önbelleğe müdahale edebiliyorsunuz (en basitinden Chrome'da ctrl+shift+delete ile çıkan bölüm mesela). PHP ile kontrol etmek isterseniz, örneğin iptal etmek için:

header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');

(Elbette Laravel kullanırken direk header() yöntemini kullanmıyoruz. Onun yerine Illuminate\Http\Request objesi içerisinde gerekli yöntemler var)

Hocam cok aciklayici olmus tesekkurler sonuc olarak bu ayarlara dokunmamayi tavsiye ediyosunuz degil mi tarayiciya mudahele etmek sacma, zaten laravelle session view gibi onbellekleme islemleri ontanimli geliyor.

Çevrimdışı

#4 29.04.2019 08:50:02

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,623
Website

Yanıt: Laravel ve tarayici cache özelliği hakkinda

Laravel ile ilgili olan sizin tercihiniz. En basitinden sorgu sonuçlarını önbelleğe alıp aynı sorgunun tekrar tekrar yapılmasına engel olabilirsiniz. Bu tip işlemlerin faydasını ziyaretçi sayısı çok fazla ise görürsünüz ya da tam tersi şekilde yapmadığınızda zararını görebilirsiniz. Laravel'deki View kısmı, şablonların derlenmesi biraz ayrı bir olay, onu önbellek konusuna dahil etmeyelim.

Bunların dışında Response Cache denilen, sunucuda yardımcı programlar ile yapılan önbellekleme de var. Arada bir program 80 ve 443 portlarını kontrol edip istek yapıldığında direk önbelleğe alınan istek sonucunu veriyor. example.com/products sayfasına girdiğinizde daha önce oluşturulmuş önbellekteki bir sayfanın geldiğini düşünün. Hiç kullanmadım ama en çok bilinen örneklerinden biri https://varnish-cache.org/

Bunu servis olarak veren yerler de var, örneğin https://www.cloudflare.com/ . Genellikle saldırılardan korunmak için tercih edilse de içerisinde önbellek gibi özellikleri var. Ücretsiz sürümü bile çok faydalı.

Tarayıcıda müdahele etmek saçma değil, ihtiyacınız varsa kullanacaksınız. Siteniz statik bir sitedir, resimler vs. çok değişmiyordur. Aynı resmi, scripti vs kullanıcının sürekli indirip sizin kotanızdan, trafiğinizden (bandwidth) yemesine gerek yok, özellikle bu konuda sıkıntı yaşıyorsanız. Şu sayfaya bakabilirsiniz https://varvy.com/pagespeed/leverage-br … ching.html

Çevrimdışı

#5 29.04.2019 10:35:07

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 445

Yanıt: Laravel ve tarayici cache özelliği hakkinda

Aslında ne yaptığını görebilseniz yada anlayabilseniz çok daha iyi olur.Laravel de sonuçta php kullanıyor.
Bütün herşeyi düzenli bir mantık çerçevesinde ele alınmış.Laravelde her bir kavramın mutlak ölçütte bir ServiceProvider dosyası var demektir.
O halde specific olarak bir cache sistemi kullanılcaksa bunun provideri CacheServiceProvider olmalıdır.

config/app.php içine bakarsanız providers dizisi içinde bunu görürsünüz.

https://github.com/laravel/laravel/blob … p.php#L145

buradaki gibi...Yani sana cache mekanizmasını kullandırtan bu provider...

Peki ne yapılmış bu service provider da...

/**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('cache', function ($app) {
            return new CacheManager($app);
        });
        $this->app->singleton('cache.store', function ($app) {
            return $app['cache']->driver();
        });
        $this->app->singleton('memcached.connector', function () {
            return new MemcachedConnector;
        });
    }

Mantıken baktığınızda bir provider bir register methodu yada bir boot methodu bünyesinde barındırır.İlk register çalıştırılır daha sonra boot çalıştırılır.Register da mutlaka bir container kayıt yapılır.Baska amaçla kullanan varmıdır bilmiyorum.Bence kullanılmamalı.

burada da baktığınızda 3 tane singleton kayıt görüyorsunuz.cache abstractı bizim icin onemli.Zira bunun için laravel bir facadeye sahiptir.

https://github.com/laravel/framework/bl … /Cache.php

Cache facadesi ne demek..Daha öncede anlatıldı.Facadeler container kayıtlarına ulaşan proxy araçlarıdır.Bu yüzden.

Cache facadesi aslında service providerda kayıtlı cache abstractına karsılık gelen CacheManager sınıfını çağırır...

Hal böyle olunca..

Cache::put("foo","bar");

aslında https://github.com/laravel/framework/bl … anager.php bu linkteki sınıfta yer alan..

/**
     * Dynamically call the default driver instance.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        return $this->store()->$method(...$parameters);
    }

magic bir yöntem çalıştırılır.ve işlemi burası yapar.Php class bilgisi iyi olan biri ne yaptığını çok rahatlıkla görebilir.
İlk olarak store methoduna boş bir parametre gönderilerek çağırılmış..

Store methoduna bakarsanız şu şekildedir..

/**
     * Get a cache store instance by name, wrapped in a repository.
     *
     * @param  string|null  $name
     * @return \Illuminate\Contracts\Cache\Repository
     */
    public function store($name = null)
    {
        $name = $name ?: $this->getDefaultDriver();
        return $this->stores[$name] = $this->get($name);
    }

adından da anlasılacağı gibi driver burada belirtilir..Yani cache nin file cache mi redis cache mi memcache cache mi? desteklenen cacheleri yine bu sınıf içinde görebilirsiniz...

isterseniz siz doğrudan

Cache::store('redis')->put('a','b');

olarakta kullanabilirsiniz.Direkt olarak redise atama yapacaktır...

burada getDefaultDriver() ile belirtilen kısım store methoduna boş parametre gonderilirse..
sizin config dizini icinde ki cache dosyasındaki default driveriniza göre işlem yapacaktır..

/**
     * Get the default cache driver name.
     *
     * @return string
     */
    public function getDefaultDriver()
    {
        return $this->app['config']['cache.default'];
    }

daha sonra get methodu ile resolve yapılır aslında...

 /**
     * Attempt to get the store from the local cache.
     *
     * @param  string  $name
     * @return \Illuminate\Contracts\Cache\Repository
     */
    protected function get($name)
    {
        return $this->stores[$name] ?? $this->resolve($name);
    }

aslında önemli olan kısım driverlara yoneldiğimiz resolve kısmı...Bu methodda aşağıdaki gibi iş yapar..

 /**
     * Resolve the given store.
     *
     * @param  string  $name
     * @return \Illuminate\Contracts\Cache\Repository
     *
     * @throws \InvalidArgumentException
     */
    protected function resolve($name)
    {
        $config = $this->getConfig($name);
        if (is_null($config)) {
            throw new InvalidArgumentException("Cache store [{$name}] is not defined.");
        }
        if (isset($this->customCreators[$config['driver']])) {
            return $this->callCustomCreator($config);
        } else {
            $driverMethod = 'create'.ucfirst($config['driver']).'Driver';
            if (method_exists($this, $driverMethod)) {
                return $this->{$driverMethod}($config);
            } else {
                throw new InvalidArgumentException("Driver [{$config['driver']}] is not supported.");
            }
        }
    }

özel bir drivera karşılık gelmiyorsa doğrudan else methoduna gidersiniz..bu da aslında çok basit bir şeyi açıklıyor.

$driverMethod = 'create'.ucfirst($config['driver']).'Driver';

driver neyse o methodu çalıştırıyor..

Cache::put('a','b');

dediğiniz zaman aslında createFileDriver demiş oluyorsunuz...(Configteki değere göre tabi)

o methodda aslında bu:

 /**
     * Create an instance of the file cache driver.
     *
     * @param  array  $config
     * @return \Illuminate\Cache\Repository
     */
    protected function createFileDriver(array $config)
    {
        return $this->repository(new FileStore($this->app['files'], $config['path']));
    }

Böylece laravelin default desteklediği driverleri başı create sonu Driver ile biten methodlara baktığınızda bunlar laravel tarafından desteklenmiş oluyor default olarak...


createFileDriver
createMemcachedDriver
createNullDriver
createRedisDriver
createDatabaseDriver
createDynamodbDriver
createArrayDriver
createApcDriver

bunlar desteklenir..

Yani siz:

Cache::store('file')->put();
Cache::store('memcached')->put();
Cache::store('null')->put();
Cache::store('redis')->put();
Cache::store('database')->put();
Cache::store('dynamodb')->put();
Cache::store('array')->put();
Cache::store('apc')->put();

herhangi birisini ihtiyaclarınıza göre kullanabilirsiniz..

Aslında en nihayetinde işi yapan

/**
     * Create a new cache repository with the given implementation.
     *
     * @param  \Illuminate\Contracts\Cache\Store  $store
     * @return \Illuminate\Cache\Repository
     */
    public function repository(Store $store)
    {
        $repository = new Repository($store);
        if ($this->app->bound(DispatcherContract::class)) {
            $repository->setEventDispatcher(
                $this->app[DispatcherContract::class]
            );
        }
        return $repository;
    }

bu methoddur..Oda bir sınıfa karsılık gelir..

$repository = new Repository($store);

Oda bu sınıf...

https://github.com/laravel/framework/bl … sitory.php

Yani kullandığınız put get methodları bu repository icindedir...

iyi çalışmalar...

Son düzenleyen deathisonitsway (29.04.2019 12:22:49)


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#6 29.04.2019 11:22:37

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Yanıt: Laravel ve tarayici cache özelliği hakkinda

@mgsmus @deathisonitsway üstatlar çok teşekkür ederim altın değerinde bilgiler vermişsiniz.

Çevrimdışı

#7 29.04.2019 12:08:34

alihankoc
Üye
Kayıtlı: 14.09.2017
Mesajlar: 53

Yanıt: Laravel ve tarayici cache özelliği hakkinda

deathisonitsway yazdı:

Aslında ne yaptığını görebilseniz yada anlayabilseniz çok daha iyi olur.Laravel de sonuçta php kullanıyor.
Bütün herşeyi düzenli bir mantık çerçevesinde ele alınmış.Laravelde her bir kavramın mutlak ölçütte bir ServiceProvider dosyası var demektir.
O halde specific olarak bir cache sistemi kullanılcaksa bunun provideri CacheServiceProvider olmalıdır.
...
iyi çalışmalar...

Bu mesajı anlayabilen bir kişi ben senior developer title'ını almaya adayım diyebilir sanırım big_smile Gerçekten de göz kamaştırıcı bir açıklama olmuş elinize sağlık.

Çevrimdışı

#8 29.04.2019 12:30:12

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 445

Yanıt: Laravel ve tarayici cache özelliği hakkinda

alihankoc yazdı:
deathisonitsway yazdı:

Aslında ne yaptığını görebilseniz yada anlayabilseniz çok daha iyi olur.Laravel de sonuçta php kullanıyor.
Bütün herşeyi düzenli bir mantık çerçevesinde ele alınmış.Laravelde her bir kavramın mutlak ölçütte bir ServiceProvider dosyası var demektir.
O halde specific olarak bir cache sistemi kullanılcaksa bunun provideri CacheServiceProvider olmalıdır.
...
iyi çalışmalar...

Bu mesajı anlayabilen bir kişi ben senior developer title'ını almaya adayım diyebilir sanırım big_smile Gerçekten de göz kamaştırıcı bir açıklama olmuş elinize sağlık.

Yok be üstad,sadece bir şeyleri ezbere yapmayı sevmiyorum.Evet laravelin dokumanları önemli ama sadece dökümanla kalmıyorum ben,ne yaptığını anlamaya çalışıyorum.Aslında laravelin container mekanizmasını anlayan herkes laravelin sistemini çok rahat anlar.Başlangıç processi belli zaten yapının.

https://github.com/laravel/framework/bl … Kernel.php

Ben her fırsatta ilham kaynağım laravelin core yapısı oluyor.Pull requestleri mutlaka okurum smile ekşi sözlük gibi takip ediyorum.
Alışkanlık diyelim.Ama paylaşmakta bir o kadar önemlidir benim için.

Bilsin abi herkes,kendini bu işe adamış herkesin bilmeye hakkı var.


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#9 30.04.2019 12:13:28

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Yanıt: Laravel ve tarayici cache özelliği hakkinda

@mgsmus @deathisonitsway

Üstatlar size şunları sorabilir miyim;

1 - Local de config/cache.php yapılandırması default olarak file, proje gerçek sunucuda deploy edildiğinde redisi kullanmayı mı önerirsiniz ? Önce araştırmalısın diyeceksiniz kesinlikle araştırıcam ama tek cümle de olsa bir açıklama yaparsanız çok sevinirim.

2 - İkinci sorum, Chrome tools network kısmında css ve js dosyaları (from memory cache) ve (from disk cache) olarak iki ayrı önbellekten geliyor, memory cache de 'time' hep 0 ama disk cache'de belli süreler oluyor, anladığım kadarıyla (from memory cache) tarayıcı önbelleği, (from disk cache) sunucu önbelleği ve sunucudan yeniden yükleme oluyor. Doğru anlamış mıyım ? Eğer doğruysa buna müdahele edip bu tarz dosyaları sadece tarayıcı önbelleğinden çekmeyi sağlamak doğru bi yaklaşım olur mu ?

Çevrimdışı

#10 30.04.2019 12:39:07

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,623
Website

Yanıt: Laravel ve tarayici cache özelliği hakkinda

1. Redis bu konuda kendini kanıtlamış diyebilirim, tüm işlerimde kullanıyorum. Sadece cache için değil session, queue vs için de onu kullanıyorum. Gözle görülür şekilde hızlı yani daha ne diyeyim.
2. Memory Cache dediği RAM'de tutulan; Disk Cache dediği bilgisayarınızın diskinde dosya olarak tutulan önbellek, yanlış anlamışsınız.

Çevrimdışı

#11 30.04.2019 13:41:45

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Yanıt: Laravel ve tarayici cache özelliği hakkinda

mgsmus yazdı:

1. Redis bu konuda kendini kanıtlamış diyebilirim, tüm işlerimde kullanıyorum. Sadece cache için değil session, queue vs için de onu kullanıyorum. Gözle görülür şekilde hızlı yani daha ne diyeyim.
2. Memory Cache dediği RAM'de tutulan; Disk Cache dediği bilgisayarınızın diskinde dosya olarak tutulan önbellek, yanlış anlamışsınız.

Disk cache tarayicinin lokal bilgisayarimizda tuttugu onbellek midir ? Memory Cache sunucu RAM'i dogru mu hocam ?

Çevrimdışı

#12 30.04.2019 14:50:50

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,623
Website

Yanıt: Laravel ve tarayici cache özelliği hakkinda

Sizin bilgisayarınızdaki RAM ve Disk. Tarayıcıda olan biten sizin bilgisayarınızın içerisinde olup bitiyor.

Çevrimdışı

#13 30.04.2019 15:29:27

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Yanıt: Laravel ve tarayici cache özelliği hakkinda

mgsmus yazdı:

Sizin bilgisayarınızdaki RAM ve Disk. Tarayıcıda olan biten sizin bilgisayarınızın içerisinde olup bitiyor.

O zaman sunucu tarafında sadece sorguları mı önbelleğe almalıyız ? Görseller için lazy load yeterli olur mu ? Çok sordum ama son sorumda bazen bazı css ve görseller önbellekten geliyor bazen yeniden çekiyor bu da veri transferine neden oluyor bu normal bir durum mu bunu nasıl aşabilirim ?

Çevrimdışı

#14 30.04.2019 16:10:55

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,623
Website

Yanıt: Laravel ve tarayici cache özelliği hakkinda

Çok sormanız önemli değil elbette, sorun ama ya çok genel ya da çok özel sorular bunlar. Çoğunun cevabı "projeye göre değişir" olacaktır. Ayrıca ortada bir şey yok. Enerjinizi bir şeyler ortaya çıkarmak için harcayın, bu konuştuğumuz şeyler pratikte uygulanıp görülmesi gereken şeyler, ilgilenilmesi için önce arıza çıkarması gereken şeyler.

"bazen bazı css ve görseller önbellekten geliyor bazen yeniden çekiyor bu da veri transferine neden oluyor bu normal bir durum mu bunu nasıl aşabilirim". Daha etkilerini görmeden, birinci elden tecrübe etmeden önünüze bir engel gibi koyup aşmaya çalışıyorsunuz. Bazen bazı css ve görseller önbellekten geliyor bazen yeniden çekiyor ise belki arkasında mantıklı bir sebep vardır değil mi? smile

Çevrimdışı

#15 01.05.2019 09:56:39

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 445

Yanıt: Laravel ve tarayici cache özelliği hakkinda

Aslında chrome tarayıcısı hem Memory cache hem disk cache yapıyor. (Yalnış biliyorsam aydınlatın).
İlk memory cache e bakıyor eğer tarayıcı kapanır yada sonlanırsa bu defa disk cache e bakıyor.


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#16 01.05.2019 11:58:16

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 119

Yanıt: Laravel ve tarayici cache özelliği hakkinda

deathisonitsway yazdı:

Aslında chrome tarayıcısı hem Memory cache hem disk cache yapıyor. (Yalnış biliyorsam aydınlatın).
İlk memory cache e bakıyor eğer tarayıcı kapanır yada sonlanırsa bu defa disk cache e bakıyor.

Evet hocam chrome bunu yapiyor.

Çevrimdışı

Forum alt kısmı