PHP performans hususlar?

7 Cevap php

Ben bir PHP site inşa ediyorum, ama şimdi ben kullanıyorum sadece PHP belirli sayfalarda yarım düzine ya da öylesine içerir olduğunu. (Ben muhtemelen sonunda bazı veritabanı sorgularını kullanacağız.)

Statik HTML aksine basit, () beyanlara hız veya ölçekleme için bir endişe içerir? Ne tür şeyler bir site çıkmaza neden eğilimindedir?

7 Cevap

Sunucu kod herhangi bir yorumlama yapmak zorunda olmadığından Açıkçası, düz HTML her zaman bir sunucu tarafı yaklaşım daha hızlı hizmet verecek.

Büyük soruyu yanıtlamak için, orada are sitenizin çıkmaza neden olacak şeyler bir dizi; kodunuzu PHP vs soruna neden olduğunda sadece belirli bir eşik var. (Yahoo'nun sitelerin çoğu PHP odaklı olduğunu akılda tutmak, bu yüzden PHP ölçek olamaz sanmıyorum).

One thing I've noticed is that the PHP-driven sites that are the slowest are the ones that include more than is necessary to display a specific page. OSCommerce (oscommerce.com) is one of the most popular PHP-driven shopping carts. It has a bad habit, however, of including all of their core functionality (just in case it's needed) on every single page. So even if you don't need to display an 'info box', the function is loaded. On the other hand, there are many PHP frameworks out there (such as CakePHP, Symfony, and CodeIgniter) that take a 'load it as you need it' approach.

Ben şu tavsiye ediyorum:

  1. Belirli bir sayfa için ihtiyacınız olandan daha fazla işlevsellik dahil etmeyin
  2. (Mümkün olduğunda bir MVC yaklaşımı kullanabilirsiniz) ayrı baz işlevleri tutun
  3. Eğer (örneğin sayfa bir dosya C içeren dosya B içerir) içeren iç içe olacak düşünüyorsanız require_oncenin yerine dahil kullanın. Bu birden fazla kez aynı dosyaya dahil önlemek olacaktır. Bir dosya bulunamazsa eğer o da süreci durur; böylece sorun giderme işlemi yardım ;)
  4. HTML olarak önbellek statik sayfalar eğer mümkünse - şey değişmez ne zaman yeniden ayrıştırma zorunda kalmamak için

Kesinlikle () statik sayfaların daha yavaştır içerir. Eğer hiç - Ancak, modern sistemler ile uzun bir süre için bir darboğaz olarak görmek olası değil. Kullanmanın faydaları Eğer kötü bir kullanıcı deneyimi yol açar ve yaklaşık böylece kötü duygular güncellemek unuttum çünkü bir sayfada farklı bir navigasyon sahip (benim görüşüme göre, minik bir başarımdan daha ağır güncel sitenizin ortak parçaları tutmak içerir edin site / şirket / ne olursa olsun).

Önbelleğe alma özelliğini kullanma gerçekten ya yardımcı olmaz - önbelleğe kod sadece include () daha yavaş olacak. (Web sayfalarında çok nadir) hesaplama-yoğun hesaplamalar yapıyor, ya da bir veritabanından veri kapma eğer sadece zaman önbelleğe alma olduğunu yararlanacaktır.

Eğer erken optimizasyon biraz katılıyor gibi görünüyor. Performans kaygıları farkında olmak iyi iken uygulama, yerleşik değilse, birincil endişe app yazılı almak gerekir.

Içeren hayatın bir gerçeğidir. , Sayı hakkında endişe de (ben Zend Framework sınıf dosyalarının yapısına bakmak bahsettiğimi bilmiyorum ARMUT klasör yapısı, hoş bir şey) organize kod tutmak endişe etmeyin.

Soyutlama makul bir miktarda yazılı uygulama alma odaklanın. Onlar merkezi bulunan sorguları Refactor ve optimize etmek için zamanı geldiğinde kod tekrarını (KISS prensiplerini ve tüm) en aza indirmek ve böylece grup DB tüm bir sınıf (ya da sınıflar) çağırır. Ayrıca regresyon önlemek için bazı birim test başlamak.

Uygulama ve çalışıyor sonra, daha hızlı veya daha iyi, engel olacak her uygulama bağlıdır çünkü ne olduğunu bize sormayın. Bu içeren çok var olsa bile, döngüler zaman kadar yeme, ya da her neyse olduğunu ortaya çıkabilir. XDebug ve profile your code kullanın onun yukarı ve çalışan bir kere. Sonra Refactor zaman orantısız bir miktarda yiyorsun kod kesimleri arayın. Eklemek ve senkronize çalışan bu kıvırmak istekleri kahvaltı yerken bir hayaleti bitireceğiz include_onceyi arasındaki performans hit artık çok fazla odak varsa.

Arada, iyi öneri php.net kılavuzu dikkatle bakmak ve varsa Yapmanız çalıştığınız şey yapıyor işlevi yerleşik, bunu kullanmak emin olsa! PHP'nin C-tabanlı uzantıları her zaman yazabilirsiniz herhangi bir PHP kodu daha hızlı olacak, ve zaten yapılır ne kadar yapmanız çalışıyoruz ne şaşıracaksınız.

Fakat yine de, ben bu herhelde, premature optimization is BAD!!! Sadece soyutlama iyi seviyede yerden uygulama kalkmak, o profil, daha sonra aslında ne kadar vaktini yemek yerine ne düşünüyorsun sabitleme yemek olabilir düzeltmek zaman kadar.

Nah içerir, orada endişelenecek bir şey gayet iyi.

Bazı noktada önbelleğe alma başlıklarını biraz verdiği düşünmek isteyebilirsiniz, ama önemli hit alıyoruz sürece hiçbir sorun olmalıdır. Bu tüm statik veriler varsayarsak, hatta statik HTML tüm site (: web sunucusu ile her sayfayı alır ve bir eşleştirme dir yapıda dışarı döker bir senaryo yazmak kolay yolu) dönüştürme düşünebiliriz

Çoğu web uygulamaları kendi veritabanı hızı (veya ne olursa olsun, harici depolama, ama bu bir veritabanı olacak 9/10 kat) ile sınırlıdır, 'uygulama kodu nadiren endişeye neden olduğu, ve sizin gibi gelmiyor şey yapıyor re henüz hakkında endişelenmenize gerek.

Eğer siteniz için kod yapısı hakkında herhangi bir uzun ömürlü bir karar almadan önce, ben "Sen = Model-View-Controller tasarım deseni. Başkaları olsa da bu bir web geliştirme çevrelerinde zemin büyük bir kazanıyor ve kesinlikle bir süre civarında olacak görünüyor. Enterprise Application Architecture onun Desenler Martin Fowler tarafından önerilen diğer tasarım desenleri bazı bakmak isteyebilirsiniz ilgili herhangi bir nihai karar vermeden önce ne tasarım tür ihtiyaçlarınıza en uygun olacaktır.

Projenizin büyüklüğü ve kapsamı ile ilgili olarak, kendi çözümünüzü oluşturmak için karar verebilir Trax ya da sizin üzerinde Zend Framework veya PHP gibi PHP için bir hazır çerçeve ile gitmek isteyebilirsiniz.

Özellikle HTML içerik oluşturma konusunda Ben kuvvetle senin ekran mantığı ayrı iş mantığı tutmak için çiftleşmiş çeşit kullanmanızı tavsiye ederim. Ben bir veya gerekli diğer değiştirilecek benim gelişiminde bu basit bir kural bana çalışma saatleri kurtardı olduğunu tespit ettik. Ben http://www.smarty.net/ ">Smarty kullandım ve ben orada çerçevelerin çoğu kendi bir şablon sistemi veya bir yapmanızı sağlar plug-in mimarisi sağlamak da biliyoruz kendi tercih yöntemini kullanın. Olası çözümleri bakmak gibi, ben size önbelleğe alınmış sürümlerinin oluşturma yeteneğine sahip biri için bakmak tavsiye ederim.

Lastly, if you're concerned about speed on the back-end then I would highly recommend that you look at ways to minimize your calls your back-end data store (whether it be a database or just system files). Try to avoid loading and rendering too much content (say a large report stored in a table that contains hundreds of records) all at once. If possible look for ways to make the user interface load smaller bits of data at a time. And if you're specifically concerned about the actual load time of your html content and its CSS, Javascript or other dependencies I would recommend that you review these suggestions from the guys at Yahoo!.

JAYTEE sözü ne eklemek için - yükleme işlevselliği ihtiyacınız olduğunda. Zaten değilse belirli bir sınıf örneğini zaman temelde, kendi mantığı çağrılabilir - bunu otomatik olarak yapmak çerçevelerin herhangi birini kullanarak değil ediyorsanız, PHP5 tanıtıldı __ autoload () işlevsellik içine bakmak isteyebilirsiniz yüklenir. Bu size) (on-demand bu sınıfı tanımlayan bir dosya eklemek için bir şans verir.

Sizin uygulamayı hızlandırmak için yapabileceğiniz en büyük şey APC gibi, bir Opcode önbellek kullanmaktır. Mükemmel bir liste ve Wikipedia geçerli tanım var.

Bildiğim kadarıyla basit içeren söz konusu, disk gibi I / O uygulama iyi ölçeksizdir neden olabilir her istek üzerine çok fazla dosya eklemek için dikkatli olun. Bir kaç düzine ince olmalıdır içerir, ancak sadece birini içerir var ve bu yüzden tek bir komut halinde en sık dahil dosyalarını paketlemek için genellikle iyi bir fikirdir. Eğer yüklü gerekmez burada ve orada birkaç sınıfları sahip anısına maliyeti daha küçük yüzlerce dosya dahil olmak üzere bir disk I / O maliyeti daha iyi olacaktır.