Bir php web sitesi Speedup

6 Cevap

Ne iyi yolu (yolları?) Bir php web sitesi hızlandırmak ve ne kadar hızlı bu kullanarak ya da bu şekilde mi?

6 Cevap

PHP gerçekten mikro optimizasyonlar yapmak, ya da sadece tek başına kod üzerinde çalışabilirsiniz dilin tür değildir. Hiçbir nokta gerçekten var. PHP özellikle hızlı olmasa da, PHP kendisi nadiren belirli bir web sitesinde darboğaz olduğunu.

Sen bunu düzeltmek için önce bu darboğaz nerede çalışmak gerekir. Ortak darboğazları bir sürü ortak çözümler vardır. O yüzden birkaç detay verilmiş, genelleme yapmak zor, ama çoğu web siteleri için geçerli performans ipuçları bir yeri vardır.

Bakmak için ilk iyi bir yer değil, sunucu tarafında daha, istemci tarafında aslında. (Görüntüler, CSS, JavaScript ve benzeri dahil) sayfaları nasıl büyük? Tek bir sayfa görünümü kaç HTTP istekleri gerektirir? Kundakçı gibi bir şey (ve YSlow Kundakçı için add-on), sayfa aslında yüklemek ne kadar sürdüğünü görmek için, ve sayfanızın bit soruna neden olan. Kullanın Bazı genel ipuçları:

  • Gerekmez şey kaldırmak, ve YUI Kompresör gibi araç üzerinden kalanını çalıştırmak - CSS ve JavaScript küçültmek için yollar çalışın.
  • Eğer birden fazla CSS ve JavaScript dosyaları varsa, tek bir dosya içine bunları birleştirmek için deneyin.
  • Mümkün olduğunca tüm görüntüleri optimize ve CSS sprite veya benzer kullanarak tek bir dosya içine herhangi olanlar birleştirebilirsiniz görmek. PunyPNG kayıpsız görüntüler için iyidir. İyi bir JPEG kodlayıcı (NOT Photoshop) fotoğraflar için iyidir.
  • Alt sayfanın üst ve JavaScript CSS taşıyın, böylece JavaScript indirilmesini bitirmeden önce tarayıcı sayfasını hale getirebilir.
  • Emin CSS tüm, JavaScript ve HTML servis sıkıştırılmış ediliyor emin olun.
  • Uygun önbelleğe alma kullandığınızdan emin olun - bir dosya değişiklik olmadığı takdirde, bunu yeniden indirmeden hiçbir nokta yoktur.

Eğer yolumdan istemci tarafı var sonra, sunucu tarafında dikkatinizi açmak zorunda kalabilirsiniz.

APC, XCache veya Zend Optimizer gibi bir opcode önbellek, yükleyin. Bunu yapmak çok kolay ve her zaman bazı iyileştirme sağlayacaktır. Bunu yaptıktan sonra, zaman aslında nerede harcandığının bulmak için, sayfalarınızı profil.

Daha büyük olasılıkla değil daha, veritabanı sonuçları döndürmek için bekleyen çoğu zaman harcama olacak. Yani, bir sade:

  • Sorgular uzun alarak hangi çalışmak, ve ilk onlara çalışmak. Olsa Kafanı kullan - Bir yönetici sayfada beş saniye sürer bir sorgu kimse bakar ön sayfasında bir saniye sürer bir sorgu kadar önemli değildir.
  • Sorgu uygun indeksleri kullandığından emin olun. Hiçbir ortak sorgu hiç bir tam tablo taraması yapmanız gerekir. Sıralama veya gruplandırma belirli tür dizinleri kullanmak mümkün olabilir - bunları önlemek için deneyin, ya da dizinleri kullanabilirsiniz böylece sorguyu değiştirin.
  • Lütfen sorguları geçici tablolar kullanarak değil emin olun.
  • EXPLAIN anahtar kelime kullanın - bu çok kullanışlı.
  • Dinle veritabanı sunucusu kendisi. MySQL genellikle performans için optimize edilmemiştir.

Bunu yaptıktan sonra, bu önbelleğe nasıl kullanılacağını dışarı çalışmaya başlamak için genellikle en iyi. PHP kodu hızlandırmak için en iyi yolu, bunu yapmak zorunda işin miktarını azaltmaktır.

  • Veritabanınızın sorgu önbellek düzgün çalıştığından emin olun.
  • Yerine veritabanından onları alma, sık kullanılan sonuçlarını depolamak için Memcached gibi bir şey kullanın.
  • Eğer yeteri kadar bellek varsa, bir şey önbellek mevcut değil sadece veritabanına başvurmadan, Memcached her şeyi tutmaya çalışın.
  • Tüm kullanıcılar için dinamik sayfaların parçalarını, ama aynı varsa, bu parçalar önbelleğe deneyin. Iki kullanıcı bir makale arıyorsanız Örneğin, maddenin kendisini sayfanın geri kalanı olmasa bile, her kullanıcı için tam olarak aynı olacak. Yazı için HTML üretir, ve önbellek fırlat.
  • Olmayan, kimliği doğrulanmış kullanıcılar sürü varsa, onlar hepsi aynı sayfayı görmek olacak tamamen mümkündür. Yukarıdaki yazıda bakıyor olmayan iki doğrulanmış kullanıcılar sadece özdeş bir makale görmezsiniz - onlar doğru giriş bağlantıları aşağı, benzer bir sayfa göreceksiniz. Böylece (son değiştirilme tarihini kontrol edin ve değiştirilmiş değilse Modifiye değil 304 dönmek) HTTP caching başlıklarını kullanabilirsiniz kadar PHP betikleri ayarlayın. Bunu yaptıktan sonra, web sunucusu önünde bir Squid ters vekil, sopa ve Squid önbellek bulunuyor dışarı sayfalarını hizmet edelim.

Bu noktadan sonra, genel yaklaşım daha sunucularını kullanmaya başlamak için, ve sorun değil, ham hızdan, ölçekleme biri haline gelir. Genel plan web sitenize paylaşımsız bir mimariye sahip olduğundan emin olmak için - tüm kalıcı veriler veritabanında saklanır. Sonra, birden webservers yüklemek ayrı bir makineye veritabanı sunucusu taşımak ve bir önbelleğe alma ters proxy arkasında tüm şey çalıştırın. Fazla kapasite eklemek için, daha fazla makine ekleyin.

Tek yol: php accelerators, örneğin APC.

Başka; blog makaleleri okumak, mesela performance tuning overview.

Bir genel bir soru söyleyebilirim. Online OPTIMAZATION ipuçları arıyor deneyin ...

Çeşitli parametreler katılıyor:

  • I / O erişim (bunu kullanarak bir sürü - File_exists, is_file giderleri)
  • Veritabanı erişimi (, sorguları optimize saklı yordamları kullanmak, db önbellek kontrol edin)
  • (APC) gibi bir opcode önbellek kullanma
  • Sıkıştırma çıktı
  • Porsiyon js / css minified ve sıkıştırılmış (ve tarayıcı bunları sunmak için alt etki alanlarını kullanarak)
  • Daha hızlı erişim için belleğe verileri önbelleğe almak için memcache kullanarak

Sen optimizasyonlar önce ve sonra çevre sınamak için kıyaslama araçlarını kullanabilirsiniz.

Örneğin apache tezgah deneyin.

Filesize.

500 KB'lık bir dosya daha sonra 300 KB'lık bir dosyayı indirmek için daha uzun sürer. Yani kadar olabildiğince optimize ve ekin.

Accelators

Öz açıklanabilir: List of PHP accelerators

Server upgrade

Though this costs money, when dealing with a lot of traffic, it will have impact on how fast the .php files gets processes and how fast data will be send to the user. I don't recommend this though since there are other (free) ways to improve speed.

Don't user external resources

Eğer bazı görüntüleri yalak diğer sitelere bağlantı yapıyorsanız, indirme hızı kontrolü olmayacaktır. Bunun yerine, başkalarının görüntüleri kullanarak planlıyorsanız öncelikle kendi sunucusuna indirebilir (veya kendi sağlayıcısına yükleyin) ve bu şekilde onları yükleyin.

Review and improve your code

Kısa yolları bulmak, başkalarını vb yeniden, kullanılmayan değişkenleri silmek, gereksiz kod kaldırmak

Orada başka yolları vardır ama yukarıdaki bilgiler hızınıza en çok etkisi olduğuna inanıyorum

Muhtemelen, ancak bu sorunun mevcut cevapları için bazı arama yapmak gerekir ...

  • Opcode önbelleğe alma için APC
  • (Veritabanı sorgu sayısını azaltmak için) nesne saklamak için Memcached
  • / Yavaş SQL sorguları optimize kontrol edin
  • Tedbir ve darboğazları bulmak
  • Vb her sayfada yükü (yavaş) web hizmetleri, güvenmeyin

Yahoo web sayfaları, uygulamak için bunun çok çok kolay hızlandırmak bazı good basic advice var. Ayrıca firefox için YSlow + kundakçı indirmek isteyebilirsiniz; bir istemci isteği açısından olası temel darboğazları gösterir yardımcı olacaktır.

Burada tavsiye kalanı iyi, yani dışında başka çok eklemek alışkanlık; Eğer bir darboğaz buldum% 100 emin olana kadar herhangi bir kod optimize zahmet etmeyin. Ben herhelde. Eğer tek gerçek kanıt (yani performans profilleme) üzerinde hareket, daha hızlı şeyler yapacaktır "hissediyorum" çünkü zaman kodunu verdiği ya da yeni şeyler (yani önbelleğe alma) uygulama israf etmeyin.