Utilizzo di Zend Framework per progetti highload

Zend Framework è un buon framework ma non molto veloce. Puoi dire se valga la pena utilizzare Zend Framework per progetti highload, ad esempio, per il servizio di email marketing che può contenere circa dieci o centinaia di migliaia di utenti? È ansible get performance accettabili con Zend Framework? Qualcuno ha una tale esperienza? Grazie mille.

Per quello che ho visto, la difesa definitiva delle performance di Zend Framework e le raccomandazioni per l'ottimizzazione delle performance provengono da Padraic Brady in:

Benchmark del framework PHP: divertente ma in definitiva inutile

In particolare, si noti le sue quattro raccomandazioni per l'ottimizzazione delle performance:

  1. Non usare Zend_Application. Benché Zend_App sia ideale per la creazione di bootstrap complessi coerenti all'interno di una struttura standardizzata, non presenta alcun impatto significativo sulle performance delle performance di base. Un bootstrap più diretto (tipico di ZF fino all'arrivo di Zend_App) è molto più veloce e può anche essere eseguito senza file di configuration.

  2. Salta usando il plugin ViewRenderer. Senza ViewRenderer, è necessario configurare manualmente Zend_View e aggiungere le chiamate render () ai controller. Questo è in realtà molto semplice da fare ed è abbastanza veloce – veloce non è mai stato davvero parte della genetica di ViewRenderer.

  3. Utilizza l'autoloading. Elimina le chiamate require_once dalla libreria di framework in modo che i file non necessari vengano ignorati. Sostituisci gli usi di Zend_Loader_Autoloader con una function di caricamento automatico non troppo folle. Infatti, pregare che Zend_Loader non venga mai usato – fa un sacco di operazioni sui file che, ad oggi, non mi sono mai state spiegate come aventi alcun valore.

  4. Precarica tutto (Symfony 2 Preview fa!). Ti compra alcuni cookie di performance e livella la velocità di base. Usare un semplice script di precaricamento non è difficile.

Abbiamo utilizzato ZF in molti siti ad alto traffico e finora non abbiamo avuto problemi. Però wheremmo saltare attraverso alcuni cerchi bassi.

Alcuni suggerimenti:

  • utilizzare Zend_Queue per aiutare con l'invio in batch
  • utilizzare Zend_Cache quando ansible
  • Utilizza la cache del caricatore di plugin
  • Elimina le chiamate require_once a favore dell'autoloading
  • Sbarazzati di componenti che non vuoi. (come suggerito, non avresti bisogno dello stack MVC per CLI / mail)
  • Abbiamo scelto la Sfinge in favore di Zend_Search_Lucene (enorme guadagno in termini di performance)

La linea di fondo per noi è stata questa: il tempo di sviluppo è molto, molto più costoso dell'hardware. La flessibilità e il maggiore riutilizzo del codice superano completamente qualsiasi minima perdita di performance che abbiamo dovuto affrontare. Per la maggior parte, il sovraccarico delle performance era molto fisso.

Tu chiedi:

È ansible get performance accettabili con Zend Framework? Qualcuno ha una tale esperienza?

Sì, ho esperienza con un sito con milioni di utenti. Ma è necessario utilizzare le tecniche per affrontare il carico elevato. Caching ecc …

Un CDN può essere di grande aiuto. Guarda nello sviluppo con il cloud. Amazon potrebbe essere un problema per iniziare, ma ti aiuta a ridimensionare se necessario.

Immagino che quello che sto dicendo sia che il Framework potrebbe costarti un po 'di performance, ma aiuta a rendere ansible la manutenzione e a costruirla più velocemente (una volta superata la curva di apprendimento). Poi devi valutare cosa deve essere fatto per migliorare le performance (anche se aiuta molto a pianificare quelli che saranno problemi evidenti, fin dall'inizio).

Conosco diverse società che utilizzano ZF in scenari ad alte performance / carichi elevati. Non so quali sono in grado di affermare e quali no, ma alcuni di essi sono aziende dei media che devono gestire programmi TV popolari. Altri gestiscono events sportivi in ​​diretta. Altri sono aziende da molti miliardi di dollari che hanno bisogno di servire le loro organizzazioni interne. Quindi, ZF viene utilizzato da molte aziende che gestiscono siti con un carico elevato. Uno dei nostri casi di studio è Fox Interactive (http://framework.zend.com/about/casestudies) e conosco molti altri clienti che lo utilizzano per siti Web ad alte performance.

Zend Framework MVC, pronto per l'uso, sarà abbastanza veloce. Il mio blog torna a circa 100ms senza cache e c'è una buona quantità di cose che accadono in prima pagina. Probabilmente potrei farlo scendere a 50 ms con un po 'di cache interna (il caching a tutta pagina potrebbe ridurlo a ms a una sola cifra, ma poi non sta toccando ZF).

Seconda risposta di Joe. Ho anche visto ZF distribuito su alcuni siti che gestiscono milioni di richieste e devono ancora incontrare un problema. Quando si ha a che fare con quella quantità di traffico è una buona idea usare altre strategie oltre la propria struttura, incluso ma non limitato al caching e all'uso di una CDN.

Ho scoperto che la maggior parte dei framework chiamerà o creerà molte istanze di classi per richiesta che penso sia ciò che spinge le persone a dire che il framework X è lento senza avere alcuna esperienza del mondo reale con esso. Qualsiasi colpo che fai lì può essere facilmente mitigato usando un acceleratore e il caching.

Se hai già un team di sviluppatori che hai assunto, ti suggerisco di utilizzare ciò con cui si sentono più a proprio agio e con la maggior esperienza. Caso migliore saranno in grado di sintonizzare il loro codice per quel quadro.

Gran parte del framework, qualsiasi framework in realtà, viene utilizzato per la creazione e la gestione dello sviluppo del progetto, ma il progetto risultante è 'solo' php, html, css ecc. Come qualsiasi altro sito Web php. Quindi quali prove avete, questo è il tempismo reale contro altri siti strutturati e non strutturati, non prove aneddotiche, che un sito del progetto Zend è lento.

Modifica – risposte a sotto – Non credo che la struttura utilizzata dal framework danneggi le performance. Potrebbe essere più una questione di accettabilità di PHP e quindi quanto "overhead" viene aggiunto con la progettazione del sito e l'ottimizzazione del caricamento dice JavaScript ecc. Immagino che usando le linee guida di Yui per minimizzare JavaScript e CSS e caricandole nel l'ordine corretto e l'assicurazione che il codice PHP sia efficiente aiuteranno. Puoi anche utilizzare altri elementi standard come DB Caching e Zend Accelerator accelererà le cose. Una cosa da fare attenzione sarebbe la connessione DB. L'uso di uno strato ORM potrebbe avere un impatto.

Tuttavia, tornando alla domanda iniziale sul framework, penso che sia simile a chiedere se l'utilizzo di Eclipse o Textmate abbia un effetto sulla velocità del sito risultante.