2010-01-19 9 views
5

E 'una buona pratica da seguire tecniche di ottimizzazione durante iniziale codifica stessa o si dovrebbe concentrare esclusivamente sulla realizzazione di funzionalità di prima?È buona prassi eseguire l'ottimizzazione durante la codifica iniziale?

Se ci si concentra esclusivamente sulla funzionalità durante la codifica iniziale, poi quanto facile o difficile è per prendersi cura di ottimizzazione più tardi?

+0

Domanda simile (non in realtà un duplicato): http://stackoverflow.com/questions/895574/what-are-some-good-code-optimization-methods – TRiG

risposta

16

ottimizzare il vostro design e architettura - non rinchiudervi in ​​un disegno che non saranno mai in scala - ma non micro-ottimizzare l'implementazione. In particolare, non sacrificare la semplicità e la leggibilità per l'implementazione micro-ottimizzata ... almeno non senza il benchmarking del codice (idealmente l'intero sistema) prima.

misura è davvero il punto chiave quando si tratta di prestazioni. I colli di bottiglia non sono quasi mai dove ti aspetti che siano. Esistono molti modi diversi di misurazione; l'ottimizzazione senza alcuna misurazione è futile IMO.

+3

+1 per non limitarsi a citare Knuth. Se vedo ancora una volta questa citazione, potrei impazzire;) –

+1

@Dominic Rodger Questo http://stackoverflow.com/questions/2092562/is-it-a-good-practice-to-do-optimization-during-initial -coding/2092576 # 2092576? :) – jensgram

-1

ottimizzazione prematura è la radice di tutti i mali

Per elaborare più su questa famosa citazione, facendo ottimizzazione precoce ha lo svantaggio di voi distrarre dal fare un buon progetto. Inoltre, i programmatori sono notoriamente cattivi nel trovare le parti del codice che causano più problemi e quindi cercano di ottimizzare le cose che non sono così importanti. Devi sempre misurare prima per scoprire cosa deve essere ottimizzato e questo può accadere solo nelle fasi successive.

+1

Corollario: il suddetto non è inteso a sostenere * scadente, inaccettabilmente lento *, disegni – ZJR

2

Donald Knuth detto:

Dobbiamo dimenticare le piccole efficienze, dicono circa il 97% del tempo: l'ottimizzazione prematura è la radice di tutti i mali

0

Vedere http://en.wikipedia.org/wiki/Program_optimization per citazioni di Knuth.

Se ritieni che l'ottimizzazione possa rendere più difficile il tuo codice (a), in primo luogo, o (b) mantenere a lungo termine, allora è probabilmente meglio farlo bene prima. Avere buoni processi di sviluppo, come Test Driven Development, può aiutarti a fare ottimizzazioni in seguito.

E 'sempre meglio avere il lavoro giusto e lento, che torto e veloce.

1

dipende da cosa si vede come "ottimizzazione". La micro-ottimizzazione non dovrebbe essere eseguita nelle fasi iniziali e in seguito solo se si dispone di un motivo valido per farlo (ad es. Risultati del profiler o simili).

Tuttavia, scrivere codice ben strutturato e pulito seguendo le best practice e le linee guida di codifica comuni è una buona abitudine e, una volta che ci si è abituati, non ci vuole molto più tempo rispetto alla scrittura di codice sciatto. Questo tipo di "ottimizzazione" (non la parola corretta per questo, ma alcuni lo vedono come tale) dovrebbe essere fatto fin dall'inizio.

0

Giustamente detto da Donald Knuth "L'ottimizzazione prematura è la radice di tutti i mali", e rallenta la velocità di codifica. Il modo migliore per ottimizzare è di visitare nuovamente il codebase e il refactoring. In questo modo puoi sapere quale parte del codice è usata spesso o è un collo di bottiglia e dovrebbe essere ottimizzata.

0

L'ottimizzazione prematura non è una buona cosa. E ciò vale soprattutto per l'ottimizzazione a basso livello. Ma a un livello più alto il tuo design non dovrebbe escludere alcuna ottimizzazione futura.

Ad esempio.

Il recupero delle raccolte deve essere nascosto dietro la chiamata dei metodi, alla fine è sempre possibile decidere di memorizzare nella cache il recupero delle raccolte o meno. Dopo aver un'applicazione stabile e (!) Sono stati sviluppati i test delle unità di regressione. Puoi profilare l'applicazione e ottimizzare gli hotspot. E ricorda di dopo ogni fase di ottimizzazione dovresti eseguire il tuo set di test unitario completo.

0

È buona norma seguire le tecniche di ottimizzazione durante la codifica iniziale stessa oppure concentrarsi esclusivamente sulla realizzazione della funzionalità?

Se conosci le prestazioni sono critiche (o importanti), prendere in considerazione nella progettazione e scrivere correttamente la prima volta. Se non lo consideri anche nel tuo design ed è importante, stai perdendo tempo o "sviluppando una prova di concetto".

Parte di questo si riduce all'esperienza; Se conosci le ottimizzazioni e le aree problematiche del tuo programma o hai già implementato funzionalità simili in passato, la tua esperienza ti aiuterà sicuramente a creare un'implementazione più vicina al risultato finale la prima volta. Se hai ancora bisogno di una dimostrazione del concetto, non dovresti scrivere il programma vero e proprio fino a quando non è stato completato - lanciare alcuni test per determinare quale soluzione è appropriata per il problema, quindi implementarla correttamente.

Se ci si concentra esclusivamente sulla funzionalità durante la codifica iniziale, allora quanto è facile o difficile prendersi cura dell'ottimizzazione in seguito?

Alcune correzioni sono veloci, altri meritano riscritture complete. Quanto più deve cambiare e adattarsi dopo il fatto, più tempo sprecate a ripetere il test e mantenere un programma mal implementato. Le librerie che sono più facili da mantenere e sostenere le richieste sono in genere quelle che l'ingegnere ha compreso quale sia il design ideale e ha cercato di raggiungere quell'ideale durante l'implementazione iniziale.

Naturalmente, questo presuppone anche che si preferisca un programma di lunga durata!

Problemi correlati