Meslektaşlarım ve ben yüksek bir trafik web sitesi geliştirmek için bir web çerçevesi seçme sürecinde. Biz gerçekten çok iyiyiz
node.js + express ve
php + symfony2. Her ikisi de harika çerçeveler ama biz Symfony2 hakkında biraz endişeliyiz çünkü çoğu web çerçevesinin orada daha iyi performans gösterdiği görülüyor.
İşte bunu kanıtlayan kriterler:
http://www.techempower.com/benchmarks/
Bu nedenle muhtemelen node.js + express'i kullanacağız, ancak hala Symfony2'nin neden bu kadar kötü performans gösterdiğini merak ediyorum.
Sonunda hepsi düzeltmek için aşağı geliyor önbellek kullanımı...
Symfony veya PHP genel olarak diğer dillerden veya çerçevelerden daha yavaştır, bu sayede zengin, güvenli ve test edilebilir web uygulamalarını gerçekten hızlı bir şekilde oluşturma araçları sunar.
Ters bir proxy kullanırsanız vernik ve ESI (kenar taraf içerir) ve şablonlarınızın bazı kısımlarına hizmet vermeyi sonlandırın ve gerçekten de symfony yoluyla güncellemeniz gerekir. şaşırtıcı derecede hızlı bir deneyime sahip olacaksınız.
Ayrıca bir opcode önbellek gibi kullanırsanız APC ve bir optimize edilmiş veritabanı Bir insan kullanıcısı, gerçek bir dünya uygulamasında birkaç ms'nin farkını fark etmeyecektir.
İstek başına biraz daha derine ineceğim ve düşünecek birkaç şey daha vereceğim.
[ Önbelleğe Alma ve Performans ]
Cloud-services (s3, ec2, gae, ...) ile yük dengeleyiciler, kolay provizyon (şef, kukla, ...) ile eşleştirilen neredeyse hiçbir ücret ödemeden, ve tüm bu korkak şeyleri bile kolayca ve uygun fiyatlı hale geldi Büyük şirketler ve büyük veri ve / veya yüksek trafik uygulamaları yönetmek ve yönetmek için küçük şirketler.
Daha fazla depolama alanı önbellek için daha fazla alan anlamına gelir - daha fazla bilgi işlem gücü daha hızlı önbellek ısısı demektir.
insanlar php veya framework-performansından bahsediyorsa sıklıkla duyacağınız şeyler:
- facebook php ile çalışır
- youp ** n symfony ile geliştirildi
- ...
Peki bu siteler neden tamamen bozulmaz? Çünkü önbellek rutinleri akıllıdır.
Örneğin, bir durum güncellemesi yazdığında facebook'un ne yaptığını biliyor muydunuz?
Tüm durum güncellemeleriniz ile bir veritabanı tablosuna doğrudan kaydetmez ve bir arkadaşım akışını ziyaret ederse, tüm arkadaşlarından gelen tüm statüler servis edilmeden önce veritabanından getirilir.
facebook, tüm arkadaşlarınızın haber akışlarına durumunuzu yazar ve önbelleklerini ısınmaya başlar.
Artık tüm akarsular hizmete hazırlanmakta ve arkadaşlarınızdan biri akışını ziyaret ettiğinde, hemen hemen hiç kod yürütme işlemi yapılmadan anında önbelleğe alınmış bir sürümde sunulacaktır.
Akış sadece önbellek ılıkması bittiğinde yeni oluşturulmuş durumunuzu gösterir. ms'den bahsediyoruz burada ...
Bu bize ne anlatıyor? Oldukça sık kullanılan modern uygulamalarda hemen hemen her şey önbellekten sunulmakta ve kullanıcı, sayfanın gerçek hesaplamasının 1 ms veya 5 saniye sürdüğünü fark etmeyecektir.
Bir "gerçek dünya" senaryosunda son kullanıcı, çerçeveler arasında req / sn arasında bir fark olmadığını fark edecektir.
Mikro önbelleğe alma gibi basit şeylerle bile, vp'nin barındırdığı blog'unuzu hackernews açılış sayfasında yaptığınız andan itibaren anında düşürmeyebilirsiniz.
Sonunda daha önemli olan şey şudur: Benim çerçevem, araçları, belgeleri, öğreticileri ve örnekleri, her şeyi hazırlayıp hızlı ve kolay bir şekilde yürütmesini sağlar. Symfony benim için yapar!
Eğer takıldıysanız ... performansla ilgili sorularınızı cevaplamak için kaç kişi istekli ve istekli olabilir?
Bu çerçevede yakın gelecekte hangi gerçek dünya uygulamalarının halihazırda oluşturulduğu ya da olacağı oluşturulacak?
Bir çerçeve seçerek bir topluluk seçersiniz!
... tamam için bu bölümleri ... şimdi bu kriterlere geri dönüyor mu?
[ Karşılaştırmalar ve Ayarlar ]
Tüm bu parlak renkler ve karşılaştırma grafiğindeki fantezi grafikler sayesinde, her biri için tek bir kurulum (web sunucusu, veritabanı, ...) test edildiğinden, bunların her biri için çok çeşitli konfigürasyonlara sahip olabilirsiniz. .
Örnek: symfony2 + doctrineORM + mysql kullanmak yerine symfony + doctrineODM + MongoDB kullanabilirsiniz.
MySQL ... MongoDB ... İlişkisel Veritabanları ... NoSQL Veritabanları ... ORM ... mikro ORM'ler ... ham SQL ... hepsi bu konfigürasyonlarda karıştırılır ------> elma ve portakal.
[ Karşılaştırmalar ve Optimizasyon ]
Hemen hemen tüm kıyaslamalarla - sadece php çerçevelerini karşılaştıranlar bile - web çevresinde ve ayrıca "TechEmpower Web Framework Benchmarks" ları ile ilgili yaygın bir problem Eşitsiz optimizasyon.
Bu kriterler, bu çerçeveler üzerinde mümkün olan (ve deneyimli geliştiriciler tarafından bilinen) optimizasyonları kullanmazlar ... en azından symfony2 ve testleri için bu bir gerçektir.
En son testlerinde kullanılan symfony2 kurulumuyla ilgili birkaç örnek:
- Optimize edilmiş bir classmap autoloader'ı boşaltmak için -o bayrağıyla "besteci yükleme" çağrılmıyor (kod)
- Symfony2, apc_cli = 1 olmadan Doctrine meta veri ek açıklamaları için APC önbelleğini kullanmaz ( konu )
- tüm DI konteyneri, sadece birkaç gerekli servis yerine kontrolöre enjekte edilir
- Burada setter enjeksiyonu kullanılır -> nesne oluşturur ve kabı doğrudan yapıcıya enjekte etmek yerine setContainer () yöntemini çağırır. BenchController uzanır kontrolör uzanır ContainerAware)
- Bir takma ad ($ this-> get ('service_name')) doğrudan erişim yerine konteynırdan servis almak için kullanılır ($ this-> container-> get ('service_name')). ( kod )
- ...
liste devam ediyor ... ama sanırım bunun nereye gittiğini anladın. 90 açık konu şimdi ... sonsuz bir hikaye.
[ Geliştirme ve Kaynaklar ]
Sunucular ve depolama gibi kaynaklar ucuzdur. Gerçekten ucuz ... gelişme süresine kıyasla.
Ben oldukça yaygın oranlar talep eden bir serbest meslek mensubuyum. zamanımın 2-3 gününü alabilirsin ... ya da bir bilgisayar yükü ve depolama yükü!
Bir çerçeve seçerken, aynı zamanda hızlı gelişim için bir araç takımı seçiyorsunuz - arzularınız için size iyi bir ödeme yapacak olan, tamamen tatmin olmamış, titiz bir müşteriye karşı mücadeleniz için bir silah.
Bir ajans (veya bir freelancer) olarak, kısa sürede zengin özelliklere sahip uygulamalar oluşturmak istiyorsunuz. Bir şeyle takıldığınız noktalarla karşılaşacaksınız ... belki performansla ilgili bir sorun. Ancak, geliştirme maliyetleri ve zamanla karşı karşıyasınız.
Daha pahalı ne olacak? Ek bir sunucu veya ek bir geliştirici mi?
Bu blog, sorunuzun ikinci bölümüne cevap veriyor:
http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage
Bir "merhaba, dünya" testinin hızı, çünkü symfony reddetme
FooBar çerçevesinde olduğu kadar iyi bir hata. Ham hız değil
profesyoneller için anahtar faktör. Maliyet önemli faktördür. Ve maliyeti
Symfony ile bir uygulamanın geliştirilmesi, barındırılması ve bakımı
diğer çözümler için ne olduğundan daha az.
Bir çerçeve seçerken, toplam kalkınma maliyetlerini dikkate almalıdır. Bu, çerçevenin kod kalitesine (birim testleri, dokümantasyon, vb.), Performansa (ve barındırma maliyetlerine), kutudan çıkarılan özelliklerin niceliğine ve niteliğine, topluluğun büyüklüğüne, kuruluşların kullanımına bakılması anlamına gelir. seninki gibi, ölçeklenebilirlik, vb.
Symfony geliştiricisi olarak, WordPress'i teknik açıdan tutkulu bir şekilde nefret ediyorum. Ama yine de basit bir web sitesi için tavsiye ederim (ve hatta kullanın!). Sadece popüler olmasından değil, aynı zamanda topluluğun büyüklüğü nedeniyle: bir WordPress tasarımcısı / geliştiricisini işe almak çok kolay. WordPress ve Symfony arasındaki bir performans karşılaştırmasına bakıldığında, bu durumda herhangi bir anlam ifade edilmeyecektir.