Vedo molti motivi per cui dovresti utilizzare i linguaggi preelaborati e cercherò di dimostrare i vantaggi di tali strumenti.
1. Spostamento di paradigma
Secondo me, la più grande caratteristica di qualsiasi linguaggio pre-elaborato è la capacità di sviluppare e risolvere problemi in un modo diverso rispetto al modo standard HTML / CSS / JS. In breve, la pre-elaborazione può portare a (ma non sempre) un cambio di paradigma.
Perché è potente? Alcuni problemi sono facilmente risolvibili in un paradigma, altri in un altro paradigma. Ciò che è potente è che puoi creare qualsiasi paradigma e convenzione che mappa in HTML / CSS / JS per risolvere in modo efficiente un particolare problema.
Il più famoso cambio di paradigma è fatto dai compilatori C, trasformando il C / C ++ facile da scrivere in un ASM efficiente ma difficile da scrivere.
In teoria, potresti creare una mappatura tra CSS e JS sufficientemente complessi, qualsiasi designer CSS-aware potrebbe quindi utilizzare JS tramite strumenti ben noti.
2. Ottimizzazione offline
Non è necessario essere pre-elaborati per spostare il paradigma, jQuery cambia paradigma in fase di runtime. Ciò che è fantastico con gli strumenti pre-elaborati è che il costo è (soprattutto) invisibile in fase di runtime.
L'utilizzo di un linguaggio compilato rispetto a una libreria o un toolkit run-time è, secondo la mia esperienza, sempre migliore in termini di prestazioni finali. Questo è molto intuitivo, se una parte di codice viene compilata una volta in un codice di basso livello ottimizzato senza alcuna dipendenza, dovrebbe funzionare meglio rispetto allo stesso pezzo di codice eseguito in fase di esecuzione da una libreria.
Questo non è affatto nuovo, i compilatori sono stati i primi (per quanto ne so) a introdurre questo tipo di trasformazioni e il primo a introdurre ottimizzazioni. Questa tecnica si è dimostrata efficiente molto tempo in passato in ambiente non Web.
3. Polyfill a livello di lingua
Il mondo web è basato su browser (boom! mind blown!), questi browser sono aggiornati e distribuiti a ritmi diversi, la maggior parte degli sviluppatori web potrebbe dover gestire browser obsoleti un giorno o l'altro.
Fino ad ora, molte grandi biblioteche sono riuscite a colmare queste lacune per noi. Sì, sto pensando al grande e potente jQuery, molte grazie a coloro che hanno contribuito a questa fantastica libreria. Il problema è che la libreria può essere scritta solo all'interno dello scopo del linguaggio in cui sono scritti e, a differenza di Ruby, non è possibile eseguire la meta-programmazione di tutto in JS. Purtroppo, i browser non riescono ancora a capire il rubino.
Questo è applicabile principalmente a JS ma è valido anche con CSS e HTML. Per implementare una nuova parola chiave o una nuova struttura linguistica (per risolvere i problemi più velocemente, cambiare il paradigma e tutto il resto), è necessario utilizzare la pre-elaborazione. La pre-elaborazione ti libera da molti tipi di limiti all'interno della lingua, a differenza delle librerie.
Vuoi usare il nuovo ES6 adesso perché il tuo codice sarà più manutenibile che mai? Puoi! Vuoi seguire il tuo linguaggio di programmazione e scegliere come target un browser? Puoi! (usa emscripten).
4. Perché possiamo (in un ragionevole lasso di tempo)
Poiché il tempo di scrivere, compilare (SASS o Coffeescript nel mio caso) non è più un problema, è istantaneo e può essere attivato su file salvati con la toolchain giusta.
Anche la build toolchain si è evoluta, vediamo sempre più grandi strumenti di sviluppo come bower, yeoman, gulp, ...
Lo sviluppatore del frontend ora è armato con una toolchain matura ed è pronto ad affrontare ogni problema comune in pochi secondi. Facili da installare e gestire, gli strumenti e i processi di creazione dovrebbero far parte del progetto e ora dovrebbero essere pronti per accettare una fase di pre-elaborazione. (anche se tu solo ti rendi conto)
Conclusione
L'uso di linguaggi / strumenti compilati non è più un problema, e dovresti utilizzare qualsiasi strumento che soddisfi le tue esigenze. Il fatto che debba essere compilato non dovrebbe essere un blocco.