/ / Scala.js produrrà mai piccoli fasci? - scala.js, scalajs-bundler

Scala.js riuscirà mai a produrre piccoli pacchetti? - scala.js, scalajs-bundler

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 № 1

Risposta 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:

  1. Interoperabilità con JavaScript: la capacità di chiamare ed essere chiamato da codice / librerie JavaScript.
  2. 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.
  3. Prestazioni di runtime: il codice risultante dovrebbe essere il più veloce possibile.
  4. 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.ArrayS, js.FunctionNs e js.Promises ovunque, anziché ListS, => funzioni e Futures, per esempio. A questo punto, Scala.js smette di essere Scala, e quindi staresti meglio con un'altra lingua (ad esempio BuckleScript).