Questa domanda è stata posta prima here, ma nessuna delle risposte ha realmente cercato di rispondere alla domanda effettiva, quindi la sto chiedendo in un modo diverso. Caricare una singola classe di 20.000 linee con 100 di funzioni richiede più risorse in termini di risorse rispetto alla suddivisione del codice in classi più piccole con meno funzioni ciascuna e caricando queste classi più piccole quando necessario?"impatto sulle prestazioni" quando si utilizza una linea singola 20K classe singola
risposta
Più grande è uno script o una classe, maggiore è la memoria utilizzata per ogni istanza. PHP non ha un modo per condividere lo spazio di memoria di librerie e classi, quindi creare enormi script per un sito Web non è una grande idea.
L'approccio tipico dovrebbe essere quello di suddividere le classi in blocchi in modo tale che è necessario includere solo per script ciò che è effettivamente necessario per eseguire quello script.
Inoltre, è improbabile che causi problemi di prestazioni a meno che tu non abbia un'enorme quantità di traffico - e quindi potresti probabilmente risolvere i tuoi problemi più facilmente delle classi di refactoring.
Quando uno script viene caricato, richiede una quantità di memoria fissa per analizzarlo. Più è grande, più memoria richiede. Successivamente, lo script stesso viene eseguito, eseguendo qualsiasi codice di livello superiore (non in una classe o una funzione globale). Se questo include qualsiasi istruzione require/include, questi script vengono caricati (se necessario). Se crea oggetti, questo richiede più memoria.
Tuttavia, la dimensione di ogni istanza della classe è influenzata solo dai dati memorizzati. A parte questa correzione, il consiglio qui è azzeccato: dividi le tue classi in base alle responsabilità. La ragione di questo ha anche a che fare con la facilità di sviluppo rispetto alle prestazioni. Supponi di avere una classe mostro piena di metodi statici. Se l'applicazione utilizza la maggior parte di questi metodi per ogni richiesta, la suddivisione non avrà alcun vantaggio in termini di prestazioni poiché entrambi gli script finiranno per essere caricati comunque. Ma se puoi raggruppare i metodi in sottosistemi logici, saranno più facili da capire e da lavorare.
concordato. Un meccanismo in grado di renderlo semplice (dopo aver suddiviso la libreria in classi e file singoli) è il PHP [autoloading] (http://www.php.net/manual/en/language.oop5.autoload.php). –
@Pekka, per favore non menzionare la parola A. Lo odio ufficialmente, perché non capisco come aggiungerlo. – jblue
@jblue, stai parlando di "autoloading"? Ci sono dei bei tutorial per questo, se hai qualche problema. – shamittomar
Una grande classe richiede un ciclo singolo per la compilazione in codice binario (codice op).
Molte classi più piccole utilizzano meno memoria ma richiedono più compilazione e l'utilizzo della memoria per la compilazione verrà accumulato.
In realtà dipende dal numero di classi/file inclusi in fase di esecuzione.
Quindi, soluzione per questo, irrompere in più classi e utilizzare APC
o equivalente.
PS: il consumo di memoria per il grande file è molto più piccolo, perché PHP non hanno bisogno di ri-compilare il sorgente in op-code (se riluttante a rompere il grande classe in più piccola)
- 1. Impatto sulle prestazioni dell'ereditarietà virtuale
- 2. Log.d e impatto sulle prestazioni
- 3. Markers vs. Vector point - impatto sulle prestazioni
- 4. Grande dimensione Permgen + impatto sulle prestazioni
- 5. Impatto sulle prestazioni della direttiva ng-csp
- 6. Implicazioni sulle prestazioni quando si utilizza "_var" su "_" in Elixir?
- 7. Punto di rottura dell'eclisse in lambda a linea singola/singola?
- 8. Legenda singola quando si utilizza gruppo, tipo di linea e colore in ggplot2?
- 9. IntelliJ collasso metodi linea singola
- 10. I selettori nidificati hanno un impatto sulle prestazioni e MENO
- 11. Impatto del layout WPF (Silverlight) Trasformazione sulle prestazioni dell'app
- 12. l'ordine dei membri di oggetti di una classe ha un impatto sulle prestazioni?
- 13. Impatto di Intrinsics e inlining sulle prestazioni di Lambda?
- 14. Impatto sulle prestazioni del passaggio a interfacce generiche
- 15. ACL su Linux ha un impatto sulle prestazioni
- 16. Perché rendere Haskell pigro ha un impatto sulle prestazioni?
- 17. Impatto sulle prestazioni dell'applicazione di LayoutTransform o RenderTransform?
- 18. Importazione modulo Python: linea singola o multilinea
- 19. ReSharper - forzare parentesi graffe intorno singola linea
- 20. Linea singola Android TextView senza punti
- 21. Differenza di velocità per la concatenazione di una linea singola
- 22. Aggiungi una singola riga nell'istogramma
- 23. Come posso sopprimere un avviso JSLint per una singola linea?
- 24. Perché devo dichiarare ogni singola classe nel mio hibernate.cfg.xml quando si usano le annotazioni?
- 25. Impatto delle prestazioni dell'utilizzo di CDI
- 26. Dichiarazione di una stringa di linea singola looooong in C#
- 27. Centro verticale a linea singola e multi linea
- 28. L'operatore ternario in una funzione a linea singola
- 29. Matlotlib che traccia una singola linea che cambia continuamente colore
- 30. Quando si viola il SRP (Principio della singola responsabilità)?
Ovviamente questo dipende dal caso d'uso. Se li rompi, e finisci usando solo dire l'1% di esso e carichi solo questo 1% di esso, ovviamente sarà meno dispendioso in termini di risorse rispetto al caricamento del 100% e quindi usando l'1%. – houbysoft
Stai chiedendo due cose diverse qui. L '"impatto sulle prestazioni" è zero. Mentre "ad alta intensità di risorse", sì lo è, in termini di memoria. Se si rompe il codice in parti più piccole, si avrà un minore utilizzo di memoria, ma alla fine più I/O. Usa xdebug invece di consigli generalizzati. – mario
Le prestazioni non dovrebbero essere la vostra preoccupazione qui ... i vantaggi che otterrete in termini di manutenibilità e la possibilità di leggere il codice supereranno di gran lunga qualsiasi (probabilmente minore) impatto sulle prestazioni che potrebbe verificarsi. – Thanatos