DEMO İNCELE
ÜCRETSİZ İNDİR

Prestashop Performans hakkında

Merhaba arkadaşlar öncelikle hepinize iyi çalışmalar.

Bir süredir prestashop kullanıyorum. Yaşadığımız en büyük problemlerden olan performans sorunu hakkında edindiğim tecrübeleri paylaşmak, hatalı tecrübelerim olduysa sizlerin sayesinde bunları düzeltmek, doğru olduğunu ortakça düşündüğüm tecrübelerimin işinize yaramasını sağlamak amacındayım.

Forumda bazı konular gördüm, Türkiye sunucuları, yurtdışı sunucuları, bazı modüllerin kullanılmaması hakkında, vs..

İlk olarak değineceğim kısım sunucu bölümü.

Eğer anlık istek sayınız en fazla 200 ün altında ve toplam ürün sayınız 1000 den aşağıysa, Türkiyeden bir sunucu kullanabilirsiniz. Fakat firmayı doğru seçmeniz gerekiyor. Size destek vermeleri çok önemli, zira bazı performans ayarları yapmanız yada yaptırmanız gerekebilir.

Fakat anlık istek sayınız çok fazla ise merkezi fransa olan ve dünyanın bir çok bölgesinde datacenterları bulunan bir hosting firması önerebilirim. Fiyatları gerçekten çok uygun. Örneğin 128 GB DDR3 ECC ramli 2 adet Intel Xeon E5-2650v2 işlemciye sahip (buda 36 core yapıyor) bir makineyi 200 küsür euro ya (Vat hariç) alabiliyorsunuz. Garanti 500 mbit band veriyorlar. Hatta ani yüklenmeniz olur diye burst seçeneği var belirli bir süre sizi 3 gbit e çıkartıyorlar (bizzat şahit oldum). Türkiyede bu konuda iyi firmalar yok değil, oldukça fazlalar. Fakat fiyat performans derseniz bu firma gerçekten harika.

Yurtdışı sunucu kullanmanın avantajları ve dezavantajları.

Avantajları:

* Türkiyede bant genişliği çok pahalı olduğu için yurtdışı firmalar daha hızlı bir altyapıya daha ucuza sahipler.

* Türkiyede bulunabilecek bant genişliği sınırlı, bu yüzden gerçekten dünyanın bir numarası bir sunucunuz bile olsa zaten bağlantı ona çerez gibi gelecektir ve sunucu yükü %25 i görmeden siteniz yavaşlayacaktır.

Dezavantajları:

* Öncelikle şunu söylemem gerekir, Türkiyede bildiğim çok fazla firma var, ve bu kişiler destek konusunda gece yataklarından kalkıp ilgilenen kişiler, gerçekten dürüst bir satıcı bulduğunuzda ellerinizi ensenize alın sitenizdeki satışı takip edin sadece.

Özellikle sunucu yönetimi konusunda orta seviye bir bilgiye sahipseniz (dikkat edin amatör bile değil çünkü google da bile zar zor bulabileceğiniz bazı ayarlar mevcut) Türkiyeden bilindik güvenilir bir yerden almanızda fayda var. Yeterki paranız olsun. Zaten anlık 1000 istek alıyorsanız bunun sermayesi devede kulak kalır. Load balancing yaparlar, cdn konusunda yardımcı olurlar bir şekilde çözerler. Yurtdışında bu konu için iyi dil bilmeniz lazım. “Abi hallediver şunu gözünü seveyim parası neyse verelim” in ingilizcesini kullanan görmedim, varsa aynı samimiyeti alamaz.

* Çok tatlı firmalar var co location olarak kullanabileceğiniz. Bir makine alın koyun firmaya işiniz görülsün.

——————————————————————————————————————————–

Bazı bilinmesi gerekenler:

Sanıldığı gibi yurtdışı sunucuların seo açısından bir sakıncası bence yok. Çünkü o eskide kaldı. Google sayfanızla alakalı analizlere iki farklı şekilde ulaşıyor. Birinde siz yardımcı oluyorsunuz, diğeride kullanıcıların google üzerinden veya diğer kaynaklardan sitenize ulaşılması üzerine olan bir mantık. Birinci seçenekte google bunu bir java ile yapıyor ve biliyorsunuz ki javascript uygulamaları client bazlı çalışır. İkincisinde de kullanıcıların çerezleri javascript vasıtası ile tutuluyor ve bilgiler google a yollanıyor. Yani her ne kadar aksi söylenirse söylensin, ben henüz google ın sunucu lokasyonunu dikkate aldığını ispatlayamadım.

Sunucuyu seçtikten sonra yapılması gereken bazı ayarlar.

Diyelim sunucuyu alacağınız yeri seçtiniz. Özellikle kendi sunucusunu kendi kuran arkadaşlar için anlatıyorum.

Benim size tavsiyem litespeed kullanmanızdan yana. Zira bütün bencmark testler kendisinin hızını gösteriyor.

Aynı zamanda sunucunuza uygun mysql ayarlarını iyi yapmanız gerekiyor bunun için https://tools.percona.com/wizard adresinden yardım alabilirsiniz. Mysql konusunda hızım iyi olacak diye sakın ha tablolalarınızı MYISAM yapmayın. Zira prestashop kullanıyorsanız siz e-ticaret firmasısınız demektir. Ve veri kaybı söz konusu bile olamaz. InnoDB nin kendi için bir tür backup mantığı mevcut. Ve veriler daha stable tutuluyor.

join_buffer_size, sort_buffer_size, read_rnd_buffer_size gibi ayarlara pek fazla dokunmayın, bakmayın size tuner scriptlerin verdiği tavsiyelere. Bunlar tamamen kullanıcı başına düşen limitler. Sizin en önemli ayarınız gereken kısım innodb_buffer_pool_size. Bu alan raminizin %60 ını kaplasa iyi olur. Zira sorgularınızın kullanımı bu ayar düşük olduğunda hızlı olsada çok fazla kullanıcıya önceden hazırlıklı olmalısınız. bir sorguya 200 kişiden her birinin 3 er ms de bağlanması güzeldir. Ama bir sorguya 10.000 kişiden her birinin 30 er ms de erişmesi ve sunucunun takılmaması bence daha iyidir. Raminiz varsa dayayın gitsin.

Sizlere CDN kullanmanızı tavsiye edeceğim, ha eğer bütçem yeterli değil diyorsanız, bir subdomain açın image lar için, bunun bağlı olduğu klasöre bir ramdisk oluşturup mount edin ( yazma izinlerini unutmayın ). Ufak bir bash script yazıp cronjoblayın ( scriptinizi boota atmayı unutmayın) verileride bununla senkronize edin. Eğer litespeed kullanıyorsanız sadece ramdisk ayarlamanız yeterli çünkü bu konuyu düşünüp ayarını koymuşlar sağolsunlar. Başka bir sistem kullanıyorsanız fotoları ramden vermek sizi çok fazla tatmin edecektir.

Mysql datalarınızıda ramdiskde tutabilirsiniz, fakat bu konuda iyi bir bash yazmanız gerekebilir, çünkü bir reboot durumunda veri kaybı yaşarsınız.

Bu anlattıklarımı kendisi yapan bazı uygulamalar yok değil. Litespeed alırsanız zaten php ve statik içerikleriniz için gerekli herşeyi yapıyor sağolsun. Fakat mysql diyince iş değişiyor. Bu konudada percona daki bazı uçuk arkadaşlar var. Gerçekten innodb konusunda uzmanlar. http://www.percona.c…thods-and-tips/ linki size faydalı olabilir.

Gelelim prestashopun performans ayarlarına.

Öncelikle smarty ayarlarında kesinlikle derlemeye zorlama işlemi yapmayın her zaman dosyalar değiştiğinde derlensin. Kesin tavsiyem önbelliği (sitenin kodlarında değişiklik yapmıyor yada bir modül denemiyorsanız) açık tutmanızdır. Eğer 3000-4000 den fazla ürününüz varsa cache ayarlarından memcache den başkasını sakın kullanmayın performansınız düşer. Ayrıca nedendir bilmem xcache kullandığımda bazı kullanıcılarım cookie sorunu yaşıyorlar. Denemek isterseniz tutmayayım sizi.

CCC diye bir güzellik var ama bu güzellik fazla ürün olan geniş veritabanlarında sıkıntı oluşturabiliyor. Ayrıca extra modül kullanıyorsanız javascriptleri sona taşımak çokta sağlıklı olmayabilir. HTML i küçültmek için prestashop sayfanın kodları bir sıkıntı oluşmaması için mysqle alıyor, sonra bu derlenmiş sayfa kodundaki gereksiz boşlukları, satır atlamalarını temizliyor sonra size cevap veriyor. Yine mysql yine mysql. Bunu kapalı tutun ve mümkünse tpl lerinizdeki gereksiz boşlukları ( zor olmayacaksa satır atlamarınıda) temizleyin. “HTML içindeki javascript i hizada sıkıştırın” seçeneğide aynı mantıkta. Kaç satır javanız varki sıkıştırıyorsunuz Allah aşkına. Yormayın sunucuyu bunlarla. Bunlar yüksek javaya ve html içeriğe sahip tpl ler için konulmuştur. Kısacası “HTML i küçültün” , “HTML içindeki javascript i hizada sıkıştırın” , “JavaScript sonuna taşıyın” bunlar hariç diğer CCC ayarlarını açabilirsiniz. 

Kullandığınız ve modüller çok önemli

Özellikle ürün içerikleriniz uzunsa (300 kelimenin üzerinde), unutmayın ki bunları ürün listelerken mysql den çağırmak tamamen saçmalık. Kodlarda bazı modifikasyonlar yapmanız gerekiyor. Aynı şey kategoriler ve markalar içinde geçerli. Prestashop sağolsun blockcategories modülünde tüm kategori içeriğini * ile çağırıyor, yada tek tek çağırdığı alanlarda cl.description da ekliyor. Yalnızca kategori adı, kök kategorisi, linki ve sırası gereken bir çekme işleminde neden böyle yapmışlar bilmiyorum. Bir bilen varsa yazsın bi zahmet :). Kısacası ürün listesi, kategori listesi vs… listesi alanların sadece lazım olan içerik için sql kodu kullanmak hızı arttırıyor.

Sepet kurallarınız çoksa cartrule.php için birazcık araştırma yapın. Uygun döküman bulacağınıza eminim.

Prestashop bir çok sorgusunda ( bazı yazılımcılar php konusunda uçsada mysqlde tecrübesizler ) where içinde select kullanmış. Tam olarak ne demek istiyorum. Örnek vereyim.

Hali hazırda çalışan bir sql scripti: 

 SELECT c.id_parent, c.id_category, cl.name, cl.link_rewrite FROM `tktk_category` c INNER JOIN `tktk_category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = 11 AND cl.id_shop = 1 ) INNER JOIN `tktk_category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = 1) WHERE (c.`active` = 1 OR c.`id_category` = 2) AND c.`id_category` != 1 AND `level_depth` <= 4 AND nleft >= 4 AND nright <= 1193 AND c.id_category IN ( SELECT id_category FROM `tktk_category_group` WHERE `id_group` IN (1) ) ORDER BY `level_depth` ASC, cs.`position` ASC

koyu olarak belirttiğim alan mysql i yormaktan başka bir işe yaramaz. Bunu yerine şu şekilde kullanın: 

 SELECT SQL_NO_CACHE c.id_parent, c.id_category, cl.name, cl.link_rewrite FROM `tktk_category` c INNER JOIN `tktk_category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = 11 AND cl.id_shop = 1 ) INNER JOIN `tktk_category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = 1) INNER JOIN `tktk_category_group` cg ON (cg.`id_category` = c.`id_category` AND cg.`id_group` IN (1)) WHERE (c.`active` = 1 OR c.`id_category` = 2) AND c.`id_category` <> 1 AND `level_depth` <= 4 AND nleft >= 4 AND nright <= 1193 ORDER BY `level_depth` ASC, cs.`position` ASC

Doğru olan kısmı gösterdim. Tabi bu alan debug mode dan örnek verildiği. Kodlar içinde gerekli yerleri dikkate alacağınızı tahmin ediyorum.

Ayrıca aradaki farka dikkat ederseniz “!=” yerine “<>” şartını kullandım. Fazla ayrıntısına girmek istemiyorum fakat ikisi arasında performans farkı var. Biri eşitliği kendi içinde listeleyeip bunu terslerken diğeri eşitliği direk süzüyor.

Zaman içinde farklı performans değişkenleri daha bulabilirim diye düşünüyorum. Son olarak şunu belirtmek istiyorum. Burada yaşadığım tecrübeler tamamen tarafımdan tespit edilmemiştir. Bu konuda bir kaç büyük ustamın (isimlerini hunharca yayınlamak istemiyorum, bir tanesi freebsd ve squid uzmanı) yardımıda dokundu.

Burada verdiğim ayarlarda herhangi bir hata, eksiklik varsa tamamlayabilirsiniz. Kesinlikle alanımda iddialı değilim, fakat bunlar şahsımın elde ettiği ve sonuç aldığı tecrübeler. Sizde aynı sonucu vermez ise bu konuda bir sorumluluk alamam. Vakit ayırıp okuyanlar için çok teşekkürler. Umarım benim için ve sizler için faydalı bir konu olur.

Sürç-i lisan ettiysem affola.

PrestaShop Türkiye WhatsApp Grubu