Sto lavorando a un progetto con Zend Framework 1.11, Doctrine 2, alcuni componenti di Symfony 2 e altri strumenti & librerie.Ottimizza le mie prestazioni
Sto cercando di ottimizzare le prestazioni utilizzando Xdebug & Webgrind.
Ho già trovato alcuni colli di bottiglia come l'analisi di Ini config, ecc. E memorizzato nella cache.
Ora, mi rendo conto che solo il caricamento automatico è la parte più costosa della mia applicazione:
Opl\Autoloader\ApcLoader->loadClass 274 31.36 43.86
Zend_Loader_PluginLoader->load 150 4.80 12.29
Zend_Loader_Autoloader->getClassAutoloaders 278 1.42 1.91
Zend_Controller_Router_Route_Regex->_getMappedValues 291 1.29 1.35
Doctrine\ORM\UnitOfWork->createEntity 85 1.24 3.18
Come potete vedere non sto usando il default Zend_Loader_Autoloader
, sto usando Opl
che è, come per quanto ne so, più veloce di così, sto usando il classMapLoader
con una cache APC ma rallenta ancora un po 'rispetto al resto dell'applicazione.
Come potrei ottimizzare?
Ho circa 250 classi caricate, e sembra che solo ~ 40 siano lente, altre mostrano 0,00 come "Costo totale chiamate" ma altre sono in aumento da 0,08 a 0,57 sulla chiamata richiesta.
A proposito, da quando utilizza il caricatore automatico Opl, sembra che nel mio ambiente di produzione APC solo opcode memorizzi nel cache i file che sono "manualmente richiesti" e non quelli che vengono chiamati dal caricatore automatico.
grazie la tua grande risposta, infatti il mio problema è che ho migrato da una vecchia applicazione con ZF1.7 e Zend_Db e la sua transazione tasso (dato da assedio) restituisce qualcosa come 30/40/s in cui il mio è solo 10, tuttavia ho fatto un sacco di ottimizzazione come l'ottimizzazione delle query che riduce globalmente il tempo di richiesta ma sono un po 'deluso per avere tale velocità. Sicuramente l'acquisto di nuovo hardware è una soluzione, e lo sarà, ma non voglio che sia la soluzione. Osservando il caricatore automatico, sembra che Doctrine richieda più file rispetto a Zend Framework stesso. – Trent
Valuta se hai davvero bisogno di un ORM nella tua applicazione. In caso contrario, rilasciare doctrine e utilizzare semplicemente * table data gateway * o * row data gateway * offerte della libreria zend. O semplicemente attenersi alla propria astrazione db con il driver mysql nativo di PHP in PDO. Se il database è il collo di bottiglia, avvicina il tuo codice e il database per percorsi più brevi. Ciò potrebbe ridurre alcune delle opzioni di comfort offerte da ORM, ma sarete molto più veloci e codificate a vostro piacimento creando la vostra funzione per scaricare e inviare dati allo storage mysql. – hakre
Mi piace il suggerimento di eliminare tutti i tipi di cose (ad esempio alleggerire). Non mi interessa il suggerimento "acquistare un hardware migliore, che ottimizzerà automaticamente il tuo codice". È come dire che se il fantino è troppo grasso, prendi un cavallo più veloce. I laboriosi ingegneri dei fornitori di chip fanno un lavoro incredibile per fornirci hardware sempre più veloce. Mi chiedo se sanno che i programmatori si affidano a questo, piuttosto che ottenere il grasso dal loro codice? –