Mentre adoro il linguaggio Scala e il progetto Scala.js, sono un po 'scoraggiato dalle dimensioni dell'eventuale bundle JS, anche in modalità fullOptJS.
La mia immediata necessità è quella di creare una libreria di piccole dimensioni da utilizzare nel browser. > 150kb è una grande richiesta e strumenti probabilmente comparabili come BuckleScript / ReasonML promettono un'esecuzione rapida e piccoli pacchetti.
Scala.js inizierà a produrre bundle più piccoli nel prossimo futuro?
risposte:
7 per risposta № 1Risposta breve: improbabile.
Quando si progetta una lingua, ci sono semprecompromessi da fare. In particolare, la compilazione incrociata di una lingua attraverso JavaScript e un altro target in genere porta a una serie di obiettivi più o meno contrastanti. Ad esempio, la produzione di "JavaScript idiomatico e leggibile" è spesso in contrasto con la produzione di "JavaScript altamente ottimizzato".
In quello spazio, i principali obiettivi di progettazione di Scala.js sono, in ordine decrescente di importanza:
- Interoperabilità con JavaScript: la capacità di chiamare ed essere chiamato da codice / librerie JavaScript.
- Compatibilità con Scala / JVM: a meno che non si utilizzino API intrinsecamente specifiche della piattaforma (ad es. Thread), lo stesso codice Scala dovrebbe compilare con Scala / JVM e Scala.js e comportarsi allo stesso modo.
- Prestazioni di runtime: il codice risultante dovrebbe essere il più veloce possibile.
- Dimensione del codice: il codice risultante dovrebbe essere il più piccolo possibile.
Mentre la dimensione del codice è sicuramente una preoccupazione, come puoi vedere, si colloca piuttosto in basso nell'elenco dei principali obiettivi di progettazione. Ciò significa che i problemi relativi alle dimensioni del codice generano generalmente altri problemi nell'elenco.
In particolare, è spesso in contrasto con il requisito di compatibilità con Scala / JVM. In effetti, Scala ha una libreria standard piuttosto grande, in particolare le raccolte, e molte parti di quella biblioteca si dipendono l'una dall'altra. Ciò significa che non appena usi, diciamo, una Scala List
, il codice richiede una parte significativa della libreria di raccolte Scala standard. Questa parte dello stdlib è ciò che fa pesare la maggior parte dei programmi Scala.js non banali sopra i 150 KB.
Dalle precedenti condizioni (obiettivi di progettazione +è improbabile che le interdipendenze tra le librerie delle collezioni cambino nel prossimo futuro, è altrettanto improbabile che Scala.js produca improvvisamente meno codice.
A rigor di termini, lo è possibile per scrivere un'applicazione Scala.js che produce solo 10 KB o poco più. Ma per farlo, devi stare molto attento a non usare mai nessuna parte della libreria delle collezioni. Dovresti usare js.Array
S, js.FunctionN
s e js.Promise
s ovunque, anziché List
S, =>
funzioni e Future
s, per esempio. A questo punto, Scala.js smette di essere Scala, e quindi staresti meglio con un'altra lingua (ad esempio BuckleScript).