2013-05-22 15 views
44

I miei colleghi e io siamo in procinto di scegliere un framework web per sviluppare un sito web ad alto traffico. Siamo davvero bravi con node.js + express e php + symfony2. Entrambi sono ottimi framework, ma siamo un po 'preoccupati per Symfony2 perché sembra essere sovraperformato dalla maggior parte dei framework web disponibili.Perché Symfony2 si comporta così male nei benchmark e ha importanza?

Ecco i parametri di riferimento che lo dimostra: http://www.techempower.com/benchmarks/

Per questo motivo ci sarà probabilmente usare node.js + esprimono, ma ancora mi chiedo il motivo per cui è Symfony2 eseguendo così male nei benchmark.

+2

Trovo strano che Zend Framework non sia stato incluso come parte del test, anche se alcuni risultati interessanti altrimenti. –

risposta

125

Alla fine tutto si riduce a correggere la gestione della cache ...

symfony o PHP, in generale, è più lento di altre lingue o quadri così ti fornisce gli strumenti per creare ricco, sicuro e verificabile web applicazioni davvero veloci.

Se si utilizza un proxy inverso come Vernice e ESI (Edge Side Includes) e finisce per servire le parti dei modelli si ha realmente bisogno di avere aggiornato attraverso symfony. Avrai un'esperienza incredibilmente veloce.

Inoltre se si utilizza una cache codice operativo come APC e un database di un utente umano ottimizzato non sarà effettivamente notare la differenza di pochi ms in un'applicazione reale mondo.

Come da richiesta, mi immergerò un po 'più a fondo e ti darò qualche altra cosa su cui riflettere.


[Caching & prestazioni]

con la nube-servizi (S3, EC2, gae, ...) praticamente senza alcuna perdita in coppia con load-balancer, facile provisioning (cuoco, marionette, ...) e tutto questo materiale originale è diventato facile e conveniente anche per le piccole aziende per gestire e gestire grandi quantità di dati e/o applicazioni ad alto traffico.

Più spazio di archiviazione significa più spazio per la cache: più potenza di calcolo significa più veloce riscaldamento della cache.

cose Si sente spesso se la gente si parla di php o di un quadro prestazioni:

  • facebook corre con php
  • youp ** n è stato sviluppato con symfony
  • ...

Quindi perché questi siti non si rompono completamente? Perché le loro routine di cache sono intelligenti.

Sapevi ad esempio cosa fa Facebook se si scrive un aggiornamento di stato?

Non lo salva direttamente in una tabella di database con tutti gli aggiornamenti di stato e se un amico visita il suo stream, tutti gli stati di tutti i suoi amici vengono recuperati dal database prima di essere pubblicati.

facebook scrive il tuo stato su tutti i flussi di notizie dei tuoi amici e inizia a riscaldare il loro cache.

ora tutti gli stream sono pronti per essere serviti e ogni volta che uno dei tuoi amici visita il suo stream verrà pubblicata una versione memorizzata nella cache ... all'istante quasi senza alcuna esecuzione di codice.

lo stream mostrerà lo stato appena creato al termine del warmimg della cache. stiamo parlando di ms qui ...

Cosa ci dice questo? Nelle moderne applicazioni molto frequentate quasi tutto viene servito dalla cache e l'utente non si accorgerà se il calcolo effettivo della pagina ha richiesto 1 ms o 5 secondi.

In uno scenario "reale", l'utente finale non noterà alcuna differenza in req/sec tra i framework.

Anche con cose semplici come la micro-cache, è possibile far sì che il tuo blog di vps host non scenda istantaneamente dopo averlo fatto sulla pagina di destinazione di hackernews.

Alla fine la cosa più importante è ... il mio framework fornisce gli strumenti, la documentazione e le esercitazioni e gli esempi ... per ottenere tutto questo rapidamente funzionante &. symfony fa per me!

Se sei bloccato ... quante persone sono disponibili e in grado di rispondere alle tue domande relative alle prestazioni? Quante applicazioni del mondo reale sono già state o saranno create nel prossimo futuro con questo framework?

scegli una community scegliendo un framework!

... questo è bene per la parte che importa ... ora torna a questi parametri :)


[Benchmarks & Impostazioni]

In tutti questi colori brillanti e di fantasia i grafici nel benchmark ti perdono facilmente il fatto che c'è una sola installazione (webserver, database, ...) testata con ciascuno di questi framework mentre puoi avere un'ampia varietà di configurazioni per ognuno di essi.

Esempio: invece di usare symfony2 + doctrineORM + mysql potresti anche usare symfony + doctrineODM + MongoDB.

MySQL ... MongoDB ... Database relazionali ... Database NoSQL ... ORM ... micro ORM ... SQL grezzo ... tutto mescolato in queste configurazioni ------> mele e arance.


[benchmark & Ottimizzazione]

Un problema comune con quasi tutti i parametri di riferimento - anche quelli solo confronto framework PHP - trovati in tutto il web e anche quelle "TechEmpower web Benchmarks quadro" è disuguale ottimizzazione.

Questi benchmark non si avvalgono di possibili (e per sviluppatori esperti ben noti) ottimizzazioni su questi framework ... almeno per symfony2 e per i loro test questo è un dato di fatto.

Qualche esempio per quanto riguarda la messa a punto di Symfony2 utilizzato nelle loro ultime prove:

  • "compositore install" non viene chiamato con il flag -o salvare un classmap caricatore automatico ottimizzato (code)
  • Symfony2 non utilizzare la cache APC per Doctrine annotazioni di metadati senza apc_cli = 1 (issue)
  • contenitore intera dI viene iniettato nel controllore anziché solo pochi servizi necessari
  • inj presente setter essione è utilizzato -> Crea l'oggetto quindi chiamare setContainer() il metodo invece di iniettare il contenitore direttamente al costruttore (vedi: BenchController estende Controller estende ContainerAware)
  • un alias ($ this-> get ('service_name')) è usato per recuperare servizi dal contenitore invece di accedervi direttamente ($ this-> container-> get ('nome_servizio')). (code)
  • ...

la lista continua ... ma credo che si capito dove questo sta conducendo. 90 open issues ormai ... una storia senza fine.


[Sviluppo & Ressources]

Ressources come server e storage sono a buon mercato. Davvero economico ... rispetto ai tempi di sviluppo.

Sono un freelancer che paga tariffe considerevolmente comuni. puoi avere 2-3 giorni del mio tempo ... o un carico di potenza di calcolo e archiviazione!

Quando si sceglie un quadro, si sceglie anche un kit di strumenti per lo sviluppo rapido - un'arma per la lotta contro il cliente mai completamente soddisfatto e strisciante ... che ti pagherà per i suoi desideri.

In qualità di agenzia (o di libero professionista), si desidera creare applicazioni ricche di funzioni in breve tempo. Affronterai punti in cui sei bloccato con qualcosa ... forse un problema legato alle prestazioni. Ma stai affrontando anche costi di sviluppo e tempo.

Cosa sarà più costoso? Un server aggiuntivo o uno sviluppatore aggiuntivo?

+5

Sei sicuro che "tutto" arriva alla memorizzazione nella cache. Symfony et Express hanno la stessa capacità di cache (modelli/contenuto statico/...). Stai dicendo che il numero di richieste/secondi in modo irrilevante che non dovremmo tenerne conto? –

+2

+1 "_Che sarà più costoso? Un server aggiuntivo o uno sviluppatore aggiuntivo? _" Questo viene trascurato da così tanti appassionati di Web che credono ciecamente il più basso 'ms' in un benchmark è l'opzione migliore. –

+12

Ottima risposta. La migliore spiegazione che ho visto su questo argomento. – d0001

1

Questo blog risponde alla seconda parte della tua domanda: http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

Allontanando symfony perché la velocità di un "ciao, mondo" test non è buono come con quadro FooBar è un errore. La velocità non è il fattore chiave per i professionisti. Il costo è il fattore chiave. E il costo dello sviluppo, hosting e manutenzione di un'applicazione con symfony è inferiore a quello di altre soluzioni.

Quando si sceglie un quadro, è necessario considerare i costi totali di sviluppo. Ciò significa guardare la qualità del codice del framework (test unitari, documentazione, ecc.), le prestazioni (e costi di hosting), la quantità e la qualità delle funzionalità disponibili, la dimensione della comunità, l'utilizzo da parte di organizzazioni come la tua, scalabilità, ecc.

Come sviluppatore di Symfony, ho una passione odio WordPress da un punto di vista tecnico. Ma lo raccomando ancora (e anche usare!) Per un semplice sito web. Non solo perché è la popolarità, ma perché la dimensione della sua comunità: è molto facile assumere un designer/sviluppatore WordPress. Guardare un confronto delle prestazioni tra WordPress e Symfony non avrebbe alcun senso in questo caso.

Problemi correlati