Poiché il codice PHP funzionerà correttamente anche se è pieno di avvisi e notifiche su indici non definiti e metodi non statici chiamati come statici, la domanda è, se passo il tempo a rimuovere TUTTE le notifiche e gli avvisi dal mio codice funzionerà più rapidamente? ?Il php funziona più velocemente senza avvertimenti?
risposta
Ho inserito un segnalibro in un articolo in cui l'autore ha effettuato alcuni benchmark; purtroppo, è in francese ... ma qui è (forse capirete alcune parti di esso): Ne faites pas d'erreur
E qui sono i numeri, per aiutare le persone che non leggono francese:
- avvisi 10k, con
error_reporting
edisplay_errors
abilitati: 5,162.76 ms - stesso, ma con
display_errors
disabili: 136.18 ms - stesso, ma con
error_reporting
disabilitate anche: 117.79 ms - e, infine, dopo aver patchato il codice in modo che non produce alcun preavviso più: 19.51 ms
Il che significa che, sì, il codice PHP corre più veloce, senza comunicazioni/avvisi/errori, anche quando quelli che non vengono visualizzati né riportato.
Derick Rethans dice la stessa cosa in questo articolo: Five reasons why the shut-op operator (@) should be avoided(citando):
Motivo 3: E 'lento (parte 2)
Ogni volta che PHP genera un errore messaggio interno, è elaborato e formattato fino al messaggio formattato completamente che può essere in uscita tre al browser.
Solo poco prima che venga visualizzata l'impostazioneerror_reporting
è selezionata. Tuttavia, questo non è correlato esclusivamente al @ -operator.
Il messaggio di errore è sempre completamente formattato prima cheerror_reporting
sia selezionato odisplay_errors
per quella materia.
A seconda della quantità di avvisi, ma la gestione degli errori in PHP è, anche quando si nascondono i messaggi di errore, relativamente relativamente costoso.
Quello che avrebbe dovuto fare per stimare l'effetto è profiling a livello C: Installare valgrind (supponendo che si sta su Linux) e quindi eseguire
callgrind /path/to/bin/php /path/to/script.php
questo genera un file chiamato callgrind.12345
o giù di lì, carica questo file in un'app come kcachegrind e cerca php_error_docref0
o php_error_cb
per vedere quanto tempo è stato speso nel gestore degli errori.
Si prega di prestare attenzione ai documenti cachegrind e valgrind quando si esegue questa operazione e si tenga presente che sono coinvolte molte variabili dipendenti dal sistema.
MODIFICA: Oh un'altra nota: presumo che il modo sia trascorso mentre si parla di database e sistemi simili. e ancora un'altra nota aggiuntiva: la correzione delle notifiche di solito rende il codice più solido per le modifiche future, quindi è una buona idea indipendente dalle prestazioni.
+1 per la modifica :-) – TheHippo
Non lo definirei un miglioramento "significativo" per la maggior parte dei casi, ma il codice in esecuzione che non genera errori di qualsiasi tipo è naturalmente più veloce del codice che deve generare una traccia di stack su ogni altra linea.
Check out: http://www.noamdesign.com/Web-Design-Blog/15-tips-to-optimizing-your-php-code/ per ulteriori informazioni sulle ottimizzazioni minori che è possibile apportare al codice.
Nella mia esperienza personale, ho riscontrato che il 95% dell'ottimizzazione del codice di solito si occupa dell'utilizzo del database.
- 1. Perché la mia CPU improvvisamente funziona il doppio più velocemente?
- 2. Perché il mio codice PHP non funziona più senza motivo?
- 3. Perché questo puntatore funziona senza avvertimenti o errori?
- 4. Come eliminare più velocemente?
- 5. IE funziona più velocemente con le chiamate di funzione?
- 6. Come creare indici più velocemente?
- 7. In che modo GDI + funziona così velocemente?
- 8. Avvertimenti per funzioni senza specifiche di tipo?
- 9. Il codice JavaScript funziona più velocemente quando JS Profiling è attivo? Che cosa?
- 10. Come elencare le directory più velocemente?
- 11. Come caricare i frammenti più velocemente?
- 12. Come inserire i dati il più velocemente possibile con Hibernate
- 13. fare il mio immagini di sfondo caricare più velocemente
- 14. Come caricare Android WebView più velocemente?
- 15. Come posso sottrarre questi elenchi più velocemente?
- 16. UPDATE più velocemente in SQLite + BEGIN TRANSACTION
- 17. query più velocemente con l'attributo top
- 18. Compilare più velocemente in Visual Studio 2005
- 19. Calma avvertimenti PostSharp giù alla costruzione senza saltare PostSharp
- 20. Un'estensione di testo sublime per mostrare avvertimenti ed errori PHP
- 21. Più MKOverlay su MKMapView portano ad avvertimenti di memoria
- 22. Eclipse: contraddicendo avvertimenti
- 23. Come decodificare velocemente il codice huffman?
- 24. Questa ricerca di ampiezza può essere effettuata più velocemente?
- 25. elemento con scrollLeft scorre più velocemente del resto del documento
- 26. Simula PHP Include senza PHP
- 27. Come funziona PHP - letteratura
- 28. Come posso aprire questa cartella di lavoro VBA più velocemente?
- 29. Questa query SQLite può essere eseguita molto più velocemente?
- 30. Le pagine Web valide si caricano più velocemente?
Huh, mi sono reso conto dopo la pubblicazione: questa è la mia millesima risposta ^^ –
+1 per il test finale. Avvisi e Avvisi sono i tuoi peggiori errori in particolare perché non ti costringono a risolvere il problema immediatamente. Gli indici di array mancanti sono così facili da risolvere, ma troppo raramente indirizzati. Personalmente, tratto ogni avviso/avvertimento come se fosse E_FATAL. – Dereleased
Ora, una domanda è se il controllo degli errori non causerà più ritardo rispetto al gestore. Voglio dire: test per l'esistenza, ecc. Non fraintendetemi: odio avvertimenti e avvisi. Recentemente ho avuto un progetto simile, ma i risultati sopra riportati non mi convincono a investire la spesa. – Galvani