/ / Est-ce que Scala.js produira un jour de petits paquets? - scala.js, scalajs-bundler

Scala.js produira-t-il de petits paquets? - scala.js, scalajs-bundler

Bien que j'aime Scala la langue et Scala.js le projet, je suis un peu déconcerté par la taille du bundle JS éventuel, même en mode fullOptJS.

Mon besoin immédiat est de créer une petite bibliothèque à utiliser dans le navigateur. > 150kb est une grosse demande, et des outils sans doute comparables comme BuckleScript / ReasonML promettent une exécution rapide et de minuscules bundles.

Scala.js commencera-t-il à produire des paquets plus petits dans un avenir prévisible?

Réponses:

7 pour la réponse № 1

Réponse courte: peu probable.

Lors de la conception d'une langue, il y a toujourscompromis à faire. En particulier, la compilation croisée d'un langage sur JavaScript et une autre cible conduit généralement à une série d'objectifs plus ou moins contradictoires. Par exemple, la production de "JavaScript idiomatique et lisible" est souvent contraire à la production de "JavaScript hautement optimisé".

Dans cet espace, les principaux objectifs de conception de Scala.js sont, par ordre décroissant d'importance:

  1. Interopérabilité avec JavaScript: la possibilité d'appeler et d'être appelé par du code / des bibliothèques JavaScript.
  2. Compatibilité avec Scala / JVM: à moins d'utiliser des API intrinsèquement spécifiques à la plate-forme (par exemple, des threads), le même code Scala doit être compilé avec Scala / JVM et Scala.js, et se comporter de la même manière.
  3. Performances d'exécution: le code résultant doit être aussi rapide que possible.
  4. Taille du code: le code résultant doit être aussi petit que possible.

Bien que la taille du code soit certainement une préoccupation, comme vous pouvez le voir, elle se situe assez bas dans la liste des principaux objectifs de conception. Cela signifie que les problèmes de taille de code se traduiront généralement par d'autres problèmes de la liste.

En particulier, il est souvent contraire à l'exigence de compatibilité avec Scala / JVM. En effet, Scala possède une bibliothèque standard assez importante, notamment des collections, et de nombreuses parties de cette bibliothèque sont interdépendantes. Cela signifie que dès que vous utilisez, disons, un Scala List, votre code a besoin d'une partie importante de la bibliothèque de collections Scala standard. Cette partie de stdlib est ce qui fait que la plupart des programmes Scala.js non triviaux pèsent plus de 150 Ko.

Depuis les conditions ci-dessus (objectifs de conception +les interdépendances des bibliothèques de collections) sont peu susceptibles de changer dans un avenir prévisible, il est également peu probable que Scala.js produise soudainement moins de code.

À strictement parler, il est possible pour écrire une application Scala.js produisant seulement 10 Ko ou un peu plus. Mais pour ce faire, vous devez faire très attention à ne jamais utiliser aucune partie de la bibliothèque de collections. Tu devrais utiliser js.Arrays, js.FunctionNle sable js.Promisepartout, au lieu de Lists, => fonctions et Futures, par exemple. À ce stade, Scala.js cesse d'être Scala, et donc vous feriez mieux avec un autre langage (par exemple, BuckleScript).