Je vois que cette bibliothèque déclare jimp
comme dépendance pour effectuer certaines transformations.
J'analyse les dépendances de mes projets (j'ai node-vibrant
dans mon package.json
et il me semble que jimp
besoin de beaucoup d'espaces :
ncdu 1.14 ~ Use the arrow keys to navigate, press ? for help
--- /deploy/out/node_modules ---------------
185.0 MiB [##########] /<strong i="11">@jimp</strong>
38.4 MiB [## ] /chrome-aws-lambda
34.2 MiB [# ] /sharp
11.0 MiB [ ] /<strong i="12">@browserless</strong>
11.0 MiB [ ] /<strong i="13">@babel</strong>
9.2 MiB [ ] /jimp
6.3 MiB [ ] /core-js
4.8 MiB [ ] /lodash
3.2 MiB [ ] /jsdom
3.1 MiB [ ] /moment
3.0 MiB [ ] /iltorb
2.4 MiB [ ] /colorable
2.1 MiB [ ] /cssstats
1.9 MiB [ ] /<strong i="14">@cliqz</strong>
1.7 MiB [ ] /<strong i="15">@microlink</strong>
1.7 MiB [ ] /graphql
1.7 MiB [ ] /port-numbers
1.7 MiB [ ] /node-vibrant
Le fait est que jimp
inclut un plugin par défaut :
--- /deploy/out/node_modules/<strong i="20">@jimp</strong> ---------
/..
7.6 MiB [##########] /plugin-print
7.0 MiB [######### ] /core
6.9 MiB [######### ] /plugin-resize
6.9 MiB [######### ] /plugin-color
6.8 MiB [######## ] /plugin-crop
6.8 MiB [######## ] /plugin-blur
6.8 MiB [######## ] /plugin-rotate
6.8 MiB [######## ] /png
6.8 MiB [######## ] /custom
6.8 MiB [######## ] /plugin-blit
6.8 MiB [######## ] /plugin-contain
6.8 MiB [######## ] /plugin-normalize
6.8 MiB [######## ] /plugins
6.8 MiB [######## ] /plugin-cover
6.8 MiB [######## ] /plugin-gaussian
6.8 MiB [######## ] /plugin-scale
6.8 MiB [######## ] /bmp
6.8 MiB [######## ] /plugin-mask
6.8 MiB [######## ] /plugin-displace
6.8 MiB [######## ] /jpeg
mais je ne sais pas si tous les plugins sont pertinents pour node-vibrant
.
Je veux proposer deux approches :
sharp
(ma solution préférée)
Comme vous pouvez le voir dans mon bundle, j'ai aussi sharp
comme dépendance.
La principale différence entre les deux est que jimp
est un code javascript à 100 %, tandis que sharp
délègue aux fichiers binaires fils.
Au début, j'ai pensé que jimp
pourrait être mieux car il n'a pas de dépendances, mais la réalité est si différente : sharp
expédie des binaires pré-installés et la taille du paquet est en fait trop petite que jimp
.
En fait, sharp
perf est supérieur, voir
http://sharp.pixelplumbing.com/en/stable/performance/
jimp
non nécessairesJe suppose qu'à l'intérieur de 185 Mo que jimp
s'y ajoute, seules quelques choses sont réellement utilisées.
Je ne sais pas comment faire cela à partir d'un node-vibrant
, mais par exemple, l'ajout d'une petite section sur README.md répertoriant explicitement les plugins jimp
nécessaires devrait être suffisant pour que quiconque exclue le reste des choses non nécessaires dans une étape de pré-construction
J'adore le travail que vous avez fait pour examiner cela, un sincère merci.
sharp
est peu probable que node-vibrant
tout seul.
Cependant, vous avez tout à fait raison de dire que jimp
n'est pas requis pour une grande partie de l'utilisation dans node-vibrant
. Nous limitons actuellement le développement de la base de code "stable" actuelle, nous travaillons sur une réécriture de la base de code en monorepo (ce qui signifie que vous pouvez également choisir ce que vous voulez utiliser à partir de node-vibrant
à l'avenir !) et j'ai confirmé que c'est une optimisation de taille que nous pouvons également faire là-bas.
J'ai une semaine extrêmement chargée devant moi, mais je ferai de mon mieux pour revenir en arrière le week-end prochain pour faire ce changement
Sinon, nous aimons et acceptons toujours les pull requests 👀
J'ai noté une autre chose derrière @jimp
: ils ont core-js
comme dépendance, et cette dépendance est installée pour chaque plugin !
C'est pourquoi la taille de @jimp
est de 185 Mo : core-js
prend 7,4 Mio x 27 modules = TROP D'ESPACE.
Probablement core-js
pourraient être déclarés d'une manière qu'ils peuvent partager entre les plugins
Voici quelques recherches supplémentaires sur la façon dont jimp pourrait être configuré pour réduire la taille :
Le package @jimp/custom
sert de base pour ajouter des plugins à partir de zéro. Son exportation par défaut est une fonction configure
qui prend des tableaux de types
(types d'images pris en charge) et plugins
(plugins à utiliser).
@jimp/types
exporte tous les types inclus dans le package principal jimp
, ce qui facilite la prise en charge des mêmes images prises en charge par les nœuds dynamiques maintenant.
Le seul plugin spécial que node-vibrant semble utiliser est la fonction resize
. Le plugin correspondant est @jimp/plugin-resize
.
Le package @vibrant/image-node
peut être mis à jour avec ce qui suit vers le haut du script :
import configure from '@jimp/custom';
import types from '@jimp/types'; // all of jimp's default types
import resize from '@jimp/plugin-resize'; // resize function
const Jimp = configure({
types: [types],
plugins: [resize]
});
On dirait que je devrais peut-être écrire quelques frappes, mais merci beaucoup @NotWoods. je vais essayer de finir ça cette semaine
Les saisies prennent plus de temps que je ne le pensais au départ. Je sais que je vais loin, mais je veux m'assurer que je répare l'écosystème ainsi que nos propres besoins
Les saisies pour jimp ont fini par prendre un peu, mais c'est une bonne contribution en amont :
https://github.com/oliver-moran/jimp/pull/770
Après avoir fusionné, je ferai l'optimisation à node-vibrant
Avec la sortie de Jimp 0.8.4, c'est désormais possible ! J'aurai un PR ouvert ce soir avec ça ! :RÉ
En attente sur https://github.com/oliver-moran/jimp/pull/815 afin de résoudre certains problèmes après jimp 0.8.4
avec l'import
Cela a été résolu depuis la version 3.1.5
Commentaire le plus utile
Voici quelques recherches supplémentaires sur la façon dont jimp pourrait être configuré pour réduire la taille :
Le package
@jimp/custom
sert de base pour ajouter des plugins à partir de zéro. Son exportation par défaut est une fonctionconfigure
qui prend des tableaux detypes
(types d'images pris en charge) etplugins
(plugins à utiliser).@jimp/types
exporte tous les types inclus dans le package principaljimp
, ce qui facilite la prise en charge des mêmes images prises en charge par les nœuds dynamiques maintenant.Le seul plugin spécial que node-vibrant semble utiliser est la fonction
resize
. Le plugin correspondant est@jimp/plugin-resize
.Le package
@vibrant/image-node
peut être mis à jour avec ce qui suit vers le haut du script :