Originariamente inviato da
Ma5t3r
La mia opinione?
Che si parla tanto di ottimizzazione, quando l'ottimizzazione c'entra poco o nulla
.
Senza andare su materiale complicato, basta leggere Wikipedia:
Ottimizzazione (informatica) - Wikipedia
Android è, per definizione, il contrario dell'ottimizzazione.
Le applicazioni girano sotto svariati livelli che le isolano dall'hardware, e già questo rende impossibile ottimizzare.
Più ti allontani, a livello applicativo, da quello che è il modo pensato di programmare, nel tentativo di ottimizzare, e più rendi il tuo codice schifoso e lento nell'immediato, e meno soggetto a migliorarsi con gli SDK successivi.
La buona programmazione, in Android,
NON consiste nell'ottimizzare, consiste nel seguire la documentazione per utilizzare i metodi del sistema senza farsi le cose a mano
.
Uscendo dal livello applicativo, Android è un sistema anarchico, in cui i processi vivono in concorrenza spietata.
È chiaro che ci sarà sempre una possibilità che qualcuno ti occupi il dispositivo di storage mentre devi leggere o scrivere, causando lag, ed è altrettanto chiaro che in un framework "chiuso" come quello Apple questo non possa succedere.
I produttori non fanno
niente per ottimizzare il sistema, né esiste qualcosa che possono fare.
Esistono dei parametri da settare, quali lo scaling della CPU o le soglie di RAM in cui far intervenire il garbage collector, ma non si parla di ottmizzazione, si tratta di scegliere dei compromessi tra velocità / batteria / numero di applicazioni aperte in background.
Inoltre, alla base di tutta la piramide ci sono i driver, i quali possono avere si un certo grado di ottimizzazione o meno, ma il problema non è che non sono ottimizzati - è che spesso i driver sono proprio scritti male, non vanno a sfruttare funzionalità hardware che permetterebbero di risparmiare cicli di clock, hanno pezzi di codice che generano errori e che il processore deve perdere tempo a gestire etc. .
Tutto questo è comunque necessario: il budget per lo sviluppo software è risicato, le deadline sono stringenti sia per l'hardware che per il software, e il mercato se non sforni cose che sulla carta e dal nome fanno impallidire quelle della generazione precedente non ti compra il prodotto.
Basti guardare l'insuccesso del Nexus S, all'uscita considerato al pari perché il suo predecessore aveva processore con stessa frequenza mentre c'erano già in giro i dual core (LG Optimus Dual).
Il discorso iOs è completamente diverso, perché l'architettura è molto più "smooth" da gestire e i device sono pochi (e quindi
il compilatore, e non i programmatori, ha maggior libertà di azione per applicare ottimizzazioni).
Con questo il costo di sviluppo di iOs è più alto di quello di Android, il sistema fa fatica a evolversi ora che deve affrontare la sfida di girare su un numero maggiore di dispositivi e le novità sono sempre "poche".
Non è un caso che si sia passati dal far gestire la memoria a mano dai programmatori (che si avvicina al concetto di ottimizzazione, in un certo senso) al farla gestire al sistema operativo, operazione costosa in termini di risorse e che può causare lag: bisogna abbassare i costi di sviluppo, rendere la vita facile agli sviluppatori di app e di dispositivi e intasare il mercato, altrimenti i competitor ti sbranano.