FastCGI C + + vs A Script Dili (PHP / Python / Perl)

16 Cevap php

Aynı işi yapmak için PHP / Python / Perl vs FastCGI C + + kullanarak inişler ve çıkışlar nelerdir.

Herhangi bir performans ya da tasarım tuzaklar veya diğer üzerinden birini kullanarak? Hatta görüşler açıktır. (Bir ya da diğer kayalar, bir veya diğer berbat neden söyle).

16 Cevap

Birkaç yıl önce, ben daha çok ya da daha az iş web uygulaması programlama öğrendim. C biliyordum ana dili olduğunu, bu yüzden ben C. Bad hataya (oldukça büyük-ölçekli) web uygulaması yazdı. C'nin string işleme ve bellek yönetimi sıkıcı ve birlikte web uygulamaları deneyimi benim eksikliği ile, hızlı bir şekilde sabit-korumak proje oldu.

std::string char* daha çok güzel esas olarak, çünkü C + +, önemli ölçüde daha iyi olurdu.

(PHP ile başlamak için korkunç bir seçim, ve belki de kolay değil gerçi) Ancak, şimdi ben Python her zaman kullanmak istiyorum. Python string işleme harika ve sorunsuz Unicode işler. Python C + + çok daha iyi bir web araçları ve çerçeveler vardır, ve onun regex taşıma ve standart kütüphaneleri (urllib, e-posta, vb) çok iyi çalışır. Ve bellek yönetimi hakkında endişelenmenize gerek yok.

Ben ciddi RAM kısıtlamalı (gömülü bir mikro olduğu gibi) oldu ya da ben büyük ihtimalle sadece bir web uygulaması için C veya C + + kullanmak istiyorum Google'da çalışmış ve sorguları binlerce cevap zorunda olacak bir arama motoru kodlama olsaydı Saniyede.

betik dilleri C daha yavaş olabilir, ama bu bir sorun mu? hemen hemen hiç. performans bir sorun olursa ve sadece kritik bölümlerini tercüme başlar.

twitter / yakut iyi bir örnektir; yakut yavaş. (ilk etapta yakut güzel yapmak) dil özelliklerinden bazıları sadece (orada bu konuda jruby adam tarafından büyük bir makale? bu Bini ola ... idi hatırlamıyorum) optimizasyon farklı engeller.

yakut fast enough, çünkü hala, twitter, yakut tarafından desteklenmektedir. uzun zaman önce, "bloglar" performans nedenleriyle ... Gerçeği sadece mesajlaşma sıra (ve arka uç diğer bölümleri) scala taşındı oldu için scala göç twitter bildirdi. yahoo dil karışımı üzerinde çalışır; önyüz için php performans kritik olduğu, diğer, daha hızlı dil kullanılır.

bu yüzden, neden performans o kadar önemli değil mi? çeşitli nedenleri vardır:

  • veritabanı darboğaz: scripting yavaş değil, veritabanı
  • clientside darboğaz: tarayıcıda işleme isteği daha uzun sürer. sunucu tarafı optimize ve kimse fark edeceksiniz
  • Yatay ölçekleme: genellikle başka bir sunucu eklemek ve böylece uygulamayı optimize etmek daha istekleri / sn üçlü ucuz
  • geliştirici zaman ve bakım projenin en pahalı parçalarıdır. Eğer daha kısa sürede web-etkin c-kodlayıcı daha app korumak daha ucuz piton devs alırsınız
  • hiçbir derleme, kısa dev döngüleri

Başka bir pro-scripting noktası: betik dillerin çoğu inlining veya hızlı (C) kodu dahil destekler:

  • piton, inline c
  • php: c uzantıları
  • Sunucu tarafı javascript gergedan aracılığıyla: java / jvm (a good example for this is orf.at, one of the biggest websites in austria, powered by helma doğrudan erişim - serverside JVM-yorumlanır javascript)

i özellikle web gelişimini üst düzey komut dosyası artılarını eksilerini çok outweight düşünüyorum.

C + + kullanarak PHP, Perl ve Python daha radikal Daha hızlı uygulama sonuçlanması muhtemel ve biraz daha hızlı C # veya Java daha - bu bir fark olmayacak bu durumda, DB için bekleyen onun çoğu zaman harcıyor sürece. Bu aslında en sık görülen durumdur.

Öte yandan, nedeniyle C + + 'da bir web uygulaması geliştirme, söz benhoyt nedenlerle daha uzun sürer ve korumak için daha zor olacaktır. Ancak C + + kendi webapps yazılı olsaydı tampon taşması olacak ve onların tüm ağlar yerine sadece veri daha p0wned almak olacak - Ayrıca, çok daha büyük olasılıkla ciddi güvenlik açıkları (nowadys herkes SQL enjeksiyonu ve XSS hakkında en çok endişelendiren içeren bulunuyor .)

Hemen hemen hiç kimse C + +, bu günlerde web uygulamaları yazıyor Ve bu yüzden.

Birisi zemin sınamak ve konsept çözümleri kanıt sağlamak, WebApp / C + + konudaki öncü olması gerektiğini düşünüyorum.

Boost ayrıştırma STL ve gelişme gelişiyle birlikte metin C + + ile son derece kolay oldu. Ben CSV verilerini ayrıştırmak zorunda olsaydı, iki yıl önce, Python veya PHP kullanmak istiyorsunuz. Şimdi STL / Boost ile C + + kullanın. Vektörlere CSV dosyasını okuma? Hiç sorun değil, basit getline + boost :: bölünmüş + lexical_cast. Bilgisayar çiftlerinin bir vektör veri toplamı? Hiç sorun değil:

pair<int, double> sum_int_double(pair<int,double> & total, pair<struct in_addr, pair<int,double> > & a) {
    total.first += a.second.first;
    total.second += a.second.second;
    return total;
}
pair<int,double> mixedSum = accumulate(mixedVec.begin(), mixedVec.end(), emptyPair, sum_int_double);

Çiftlerinin vektörüne harita veri aktarma? Hiç sorun değil:

mixedVec.assign(amap.begin(), amap.end());

Her şey iyi tanımlanmış ve keskin. String işlemleri, regexp'nin, algoritmalar, OOP, vb her şey iyi tanımlanmış ve C + + olgun edilir. App olacaksa gerçek uygulaması gibi, ve OOP özellikleri ile metin tabanlı, daha sonra C + +, aynı zamanda iyi bir seçim ayrıştırma değil.

Eğer C / C + + ile yazılmış olan bir çalışan işlemi (örn. daemon), web hizmetleri uygulamak mümkün olmak istiyorum. O süreç bu arabirim için FastCGI protokolünü uygulamak yapmak mantıklı. Apache bir soket aracılığıyla FastCGI yoluyla dış dünya ve alan isteklere HTTP (2-yönlü SSL vb) başa alın. PHP bu yaparsanız, PHP kodu yanı sıra sürecini sürdürmek anlamına gelir ki, sizin sürecine konuşmak için PHP almak zorunda.

Soru, "nerede değeri yarattı?" Dir

Eğer değer Bellek yönetimi, dikkatli sınıf tasarım ve çalışmak için gece yapı oluyor oluşturulur düşünüyorsanız, sonra C + + kullanın. Sen başvurulan artık nesneleri silme gibi önemli şeyler yapmak için bir sürü kod yazma çok zaman harcamak için alırsınız.

Eğer değer insanların kullanabileceği uygulamaları dağıtmak olduğunu düşünüyorsanız, o Django çerçeve ile Python kullanın. Django öğretici yaklaşık 20 dakika içinde yukarı ve çalışan bir uygulama var olduğunu gösterir. Bu üretim-hazır, ve önemli şeyler odaklanmak olabilir:

  • Bu model. Sadece Python modelini yazmak ve ORM katman sizin için veritabanı etkileşimi tüm işler. Hiçbir SQL. Hiçbir manuel haritalama.

  • Sunumu. Sadece ile HTML sayfalarınızı tasarlayabilirsiniz birkaç {{}} "Burada bir değer doldurmak" ve birkaç {% for thing in object_list %} yapıları ve sayfaları gitmek için hazırız. Hiçbir dize manipülasyon.

  • Görünümü işlevleri. Sitenizin işleme kısmını saklanması basit Python fonksiyonları yazın. Değil doğrulama (bu formları vardır), sunu değil (ki şablonlar oldu) değil, altta yatan modeli (yani modeli sınıfları oldu), ama yetki denetimi, sorgu işleme ve yanıt formülasyonu biraz. Python koleksiyon sınıfları zengin bir set olduğundan, bu kod çok kısa ve noktaya olan rüzgarlar.

  • Diğer şeyler. URL eşleştirmeleri Python regexes vardır. Formlar modeline eşleştirilir; özelleştirilmiş giriş doğrulama ve işleme eklemek için varsayılan alt sınıf.

  • Düşük seviyeli bir model özelliklerinin yanı sıra uçtan uca operasyonlar için harika birim test çerçevesi.

Hayır bellek yönetimi, özetleri ve arayüzleri ile hiçbir vicdanlı sınıf tasarımı. Hiçbir dize manipülasyon nasıl optimize endişesi. Hiçbir gece oluşturmak. Tıpkı gerçek değer şeyler yaratmak.

Bir FastCGI web uygulaması (madde C hayır + +, PHP, Perl, Python, Ruby vb) olması, bir CGI uygulaması daha ilk başlangıç ​​zamanı verir. Tarafından initial startup time Sana yazdım ilk kod satırı çalıştırdığınızda web sunucusu isteği ve zaman aldığı zaman arasında geçen ortalama süre, yani ilk başlangıç ​​süresi, web minimum süre ziyaretçiler uygulama her istek için beklemek zorunda. Uygulama büyük ya da (örneğin, Ruby on Rails gibi) geniş bir çerçeve kullanıyorsanız, özellikle eğer, 1 saniye bir ilk başlatma süresini olması anormal değildir. FastCGI FastCGI genellikle aşağı birkaç milisaniye için, (çok ilki hariç) tüm sonraki istekleri ilk başlangıç ​​süresini azaltır böylece, ilk talebine cevap verdi sonra uygulamalar çalışmaya devam eder.

PHP kullanıyorsanız, genellikle varsayılan yapılandırma yeterince iyi bir başlangıç ​​tepki süresi (hatta FastCGI olmadan) sağlar, ancak (bkz. http://en.wikipedia.org/wiki/PHP_accelerator) daha iyi performans elde etmek için üretim sunucusuna bir PHP hızlandırıcı kullandığınızdan emin olun lütfen.

Çoğu programlama dilleri ve çerçeveler size kodu değiştirmeden, uygulamanın yapılandırmaları değiştirerek (örneğin CGI, Fast CGI, dahili web sunucusu, Apache modülü gibi) farklı sunucu modları, aynı uygulamayı çalıştırın. Eğer kod değiştirdikten sonra, bunu değişiklikleri alır böylece uygulamayı yeniden başlatmanız gerekebilir, ama bir FastCGI uygulamasını yeniden başlatmanız genellikle hantal olduğundan, uygulamayı yazarken FastCGI genellikle en iyi seçim değildir. CGI veya dahili bir web sunucusu yeniden başlatmayı çok daha kolaydır. Sadece üretim konfigürasyonunda FastCGI kurmak gerekir.

http://cppcms.sourceforge.net/wikipp/en/page/main: önce bu soruldu insanlar var

CppCMS proje C + + kullanarak web geliştirme için bir çerçeve sunmaktadır.

Büyüklük yaklaşık iki emir - http://cppcms.sourceforge.net/wikipp/en/page/benchmarks: Sen fark ne olduğunu anlamak için aşağıdaki kriterleri bir göz atabilirsiniz.

The problem of PHP/Python that they are very slow, there are many problems in caching data in FastCGI process of PHP.

C + + büyük sorun, C Web geliştirme kaynaklarının düşük miktarda olduğunu + +. Ancak, CppCMS gibi bir çerçeve alarak hayatı daha basit hale getirir.

Bir orta yol burada. Python 100 üzerinden C'den 99 kez işlevleri çağırmak için izin (ve ben Perl ve Ruby inanıyorum), size ihtiyacınız olmayacak. Ama eğer sen lüzum bir seçenek olduğunu bilmek güzel.

Genellikle webapps için, programlama dilinin hızı sadece bir sorun değildir. Tek bir veritabanı sorgu yürütmek için gereken süre içinde, bir işlemci birkaç milyar komutlar olabilir. Bu http veri alma ve gönderme için aynı hakkında.

Eğer siteniz gerçekten büyük büyür kadar yeterli olmalıdır zamanı performansı almak için PHP / Python / Ruby / Perl ile FastCGI kullanabilirsiniz. Ve o zaman bile, betik dilleri vazgeçmeden daha ölçekli mimari iyileştirmeler (veritabanı ayarlama, önbelleğe alma vb) yapabilirsiniz. Bazı oldukça büyük siteler PHP / Python / Ruby / Perl yapılır.

Yüksek seviyeli dilleri kullanarak elde büyük bir kazanç programcı performans. Ve bu ilk endişe gereken budur. Bu sayfa yanıt süresi kapalı bazı milisaniye kırpmak yerine, kullanıcıların özellik taleplerine hızlı cevap verebilmek için daha önemli olacaktır.

Peki ... Sen C / C + + vs Python / Perl / Ruby / Java / .NET ile bellek ve CPU güç kazandıracak. C / C + + kullanarak kaydedilen kaynaklar (bir FastCGI bir robot gömülü gemide çalışan) mevcuttur toplam kaynakların büyük bir kısmını temsil ediyorsa, o zaman evet, C / C + +. Else, neden rahatsız?

Muhtemelen sizin birisi [1], bir web toolkit tamamen C + + ile yazılmış Wt ilginç olabilir. Bu cppCMS bir alternatif olabilir. Ben bu yılbaşı tatilleri hem çalışıyorum ..

[1] http://www.webtoolkit.eu/wt

Too bad there are no benchmarks of C/C++ vs Perl CGI.
Without FastCGI I think C/C++ would be a lot faster, with FastCGI possibly it'll be faster (but maybe a little less - all the initialization part is executed once).
Again this is very application dependent, so some sort of benchmarks for different dynamic web pages should be provided.

Personally I think that if your company has resources it should/could invest in C/C++ (given that they have to find proper ones...), otherwise is better to stick to a scripting language.
Naturally if you want to deploy fast applications you should use C/C++.

Günün sonunda derlenmiş dil hızlıdır. Ama muhtemelen iyi bir C / C + + devs bulmak zor nowdays nedir?

Alkış,

C + + güçlü yazılmış bir dildir ... yani vb, yüzen, İnts ilan edebilir ... genellikle daha verimli programlayabilir Eğer zayıf yazılı dil ile yapabilirsiniz daha. PHP C + + geçildiğinde Facebook% 50 iyileşme bildirilmiştir. Ben dilleri prototip için betik dilleri düşünün ... Eğer üretim seviyesi verimliliği derlenmiş bir dil kullanmak istediğinizde.

Google üzerinden her arama C / C + + gibi web sayfaları bilgi ararken veya bir veritabanından bilgi alma gibi işlevleri gerek web uygulamaları için en iyi performansı verir gösterir.

Bunun için bazı yeni cevaplar vardır.

  1. Eğer bir derlenmiş bir uygulama gerekiyorsa, o Google's Go language, modern özelliklere sahip bir güzel derlenmiş bir dildir bulabilirsiniz.
  2. (Perl kullanmak) bir betik dili bir uygulama yazma CGI, FastCGI, Mod_perl üzerinde çalıştırabilirsiniz Mojolicious or Dancer , and then by employing a PSGI/Plack denetleyici gibi çerçeveler yoluyla yapılabilir, yerli (Mojolicious itibaren Hypnotoad gibi) sunucuları veya tüm değişiklik olmadan bulut dağıtım,. Benzer kavramlar diğer betik dilleri için var.