Ottimizzazione del codice in un mondo che non vuole ottimizzare
Pubblicato: 2019-11-22L'ottimizzazione prematura è la radice di tutti i mali.
È un detto comune tra gli sviluppatori. Ha senso. L'ottimizzazione prematura può significare ripetere il lavoro in futuro e il tempo è la risorsa più limitata dello sviluppatore. Può significare dedicare quel tempo prezioso all'ottimizzazione per scenari che non esistono ancora per gli utenti di un prodotto. Può significare scrivere codice più difficile da capire con miglioramenti delle prestazioni poco chiari.
Mentre partecipavo con il team di revisione dei temi di WordPress circa un anno fa, mi sono imbattuto ancora una volta in quella pepita di consigli. L'ottimizzazione prematura è la radice di tutti i mali. La risposta è stata a un autore di temi che stava cercando di ridurre il numero e il peso degli script che il loro tema doveva caricare. Da un lato, l'autore del tema potrebbe caricare uno script da 1,29 kb senza dipendenze per portare a termine il lavoro. L'altra opzione era utilizzare lo script dipendente da jQuery incluso nel core di WordPress per un totale di 105 kb perché "la maggior parte" dei siti WordPress caricano comunque jQuery.
Per me la risposta era semplice. Utilizzare lo script più piccolo a meno che lo script principale non sia già stato caricato sul front-end. Non ci ho pensato in termini di ottimizzazione prematura . L'ho pensato come una semplice ottimizzazione quotidiana, vecchia e ordinaria.
Gli sviluppatori non dovrebbero confondere l'ottimizzazione prematura con il concetto di prendere decisioni di progettazione intelligenti all'inizio del processo. Né dovrebbero aspettare fino alla fase finale dello sviluppo per iniziare l'ottimizzazione, un momento in cui l'obiettivo è quello di fornire un prodotto agli utenti finali. Questo è un segno di un processo di progettazione del prodotto scadente.
Nell'ultimo anno, quella conversazione mi è rimasta impressa. Mi ha aiutato a diventare più consapevole di una tendenza terrificante, non solo nella comunità degli sviluppatori di WordPress, ma con lo sviluppo web in generale. Troppo spesso, gli sviluppatori sono così lontani dagli utenti normali e la tecnologia su cui fanno affidamento gli utenti che l'ottimizzazione è poco più di un ripensamento. Invece, dovrebbe essere sempre in prima linea nella mente di qualsiasi sviluppatore.
L'eccessivo affidamento su questa citazione utilizzata in modo improprio ha contribuito a spingere la tendenza a misurare il peso della pagina in megabyte anziché in kilobyte. Viene troppo spesso utilizzato come giustificazione generale per non eseguire alcuna ottimizzazione nella fase di sviluppo mentre si compensa con la compressione dei file e la memorizzazione nella cache in produzione.
Parte della scrittura del codice di qualità è l'ottimizzazione del codice durante ogni fase del processo di sviluppo. Si tratta di prendere decisioni difficili per tagliare le cose non necessarie mentre il software si unisce. La memorizzazione nella cache dovrebbe essere l'ultima risorsa dopo che tutto il resto è stato ripulito.
L'ottimizzazione prematura riguarda più il tentativo di ottimizzazione quando non ci sono vantaggi evidenti o il lavoro su micro-ottimizzazioni che alterano la progettazione del software con vantaggi minimi o nulli. Non significa trascurare gli ovvi aumenti delle prestazioni durante lo sviluppo.
Non tutti sono su Internet Gigabit
La maggior parte degli sviluppatori che conosco utilizza connessioni Internet super veloci, spesso con velocità di download di 1 Gbps e dati illimitati. In tale situazione, è facile dimenticare che grandi porzioni del mondo hanno ancora connessioni lente con limiti di dati.
Alcuni potrebbero persino associare connessioni lente con paesi del terzo mondo in cui milioni di persone utilizzano la tecnologia dei telefoni cellulari 2G. Tuttavia, ci sono ampie zone degli Stati Uniti e di altri paesi sviluppati che non hanno linee dirette via cavo o DSL, che sono comunemente disponibili nelle città e nei sobborghi.

Questa disconnessione è direttamente evidente quando altri sviluppatori hanno avviato chat con me. Negli ultimi due anni, è stato sempre più comune per loro chiedere una chat video. Non è nemmeno messo in dubbio se una cosa del genere sia possibile (le chat video sono inaffidabili nella migliore delle ipotesi per me). La possibilità di chattare in video in qualsiasi momento è data per scontata.
Ci sono due opzioni di servizi Internet nella zona in cui vivo: satellitare o dial-up. Anche la compagnia telefonica locale si rifiuta di offrire DSL in questa zona a causa dei costi infrastrutturali con linee telefoniche vecchie di decenni. A causa dei costi proibitivi dell'accesso a Internet via satellite, che in genere comporta limiti di dati, molti sono bloccati con la connessione dial-up. Le compagnie di telefonia mobile stanno cambiando il gioco in una certa misura, supponendo che il servizio sia affidabile, ma ci sono degli svantaggi nel seguire quella strada, che può includere dati o limitazioni dell'hotspot.
Per un paese così avanzato dal punto di vista tecnologico, molti dei suoi abitanti stanno a malapena recuperando il ritardo rispetto agli altri dieci anni fa.
Anche se sono abbastanza fortunato da scegliere dove vivo e non ho nulla che mi trattiene dal trasferirmi, la maggior parte non ha questa opzione. Sono bloccati con il meglio che possono permettersi. Anche nelle zone rurali, Internet è una parte inevitabile della vita quotidiana e gli sviluppatori non stanno rendendo le cose facili per queste persone.
Anche se questo è aneddotico, è la cruda realtà della vita rurale nelle tasche degli Stati Uniti.
Il vantaggio di vivere nei boschi dell'Alabama è che ha cambiato la mia prospettiva di sviluppatore. Significava che dovevo mettere in discussione ogni decisione di codice per ogni plugin e tema che ho creato. Con i limiti di dati, dovevo assicurarmi di non utilizzare troppe risorse.
Più di ogni altra cosa, avere un limite di dati ha cambiato il modo in cui utilizzavo Internet. Ora eseguo un blocco degli annunci. Ho un'estensione per uccidere i video dal caricamento automatico. Disattivo JavaScript sui siti pesanti che devo usare. Alcuni siti sembrano interessanti, ma non ci ritorno mai perché sono dei maiali di risorse.
Quando vivi in un posto in cui ogni byte è importante, tendi a evitare di sprecarli.
Sebbene non abbia sempre avuto successo, dal mio passaggio alla vita di una piccola città, ho tentato di creare applicazioni in un modo che servisse le persone che non hanno abbastanza privilegi da avere un accesso a Internet incredibilmente veloce.
Sottolinearlo significa assicurarsi che gli sviluppatori siano consapevoli dell'importanza dell'ottimizzazione. È importante in ogni fase del processo di sviluppo. È importante perché queste persone con connessioni lente e limiti di dati devono anche acquistare prodotti, utilizzare servizi, leggere contenuti e fare tutte le altre cose che le persone fanno sul Web.
Se sei uno sviluppatore che sta pensando di aggiungere quel dispositivo di scorrimento, un meccanismo di scorrimento per dispositivi mobili o qualche altro gadget elegante, pensa a chi deve attendere il caricamento di quella funzione. Verifica che le sue dipendenze non stiano caricando troppe risorse extra. Fai qualche ricerca per vedere se riesci a individuare un'implementazione più leggera. Ma, prima, chiediti se è necessario.
I temi e i plugin creati dagli sviluppatori di WordPress non dovrebbero mai essere il collo di bottiglia per un sito web. Possiamo fare di meglio.
