Node-vibrant: Kurangi ukuran perpustakaan

Dibuat pada 21 Jun 2019  ·  9Komentar  ·  Sumber: Vibrant-Colors/node-vibrant

Saya melihat perpustakaan ini mendeklarasikan jimp sebagai ketergantungan untuk melakukan beberapa transformasi.

Saya menganalisis dependensi proyek saya (saya memiliki node-vibrant di package.json dan sepertinya jimp membutuhkan banyak ruang:

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

Intinya adalah, jimp menyertakan beberapa plugin secara default:

--- /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

tetapi tidak yakin apakah semua plugin relevan untuk node-vibrant .

Saya ingin menyarankan dua pendekatan:

Pertimbangkan untuk menggunakan sharp

(solusi favorit saya)

Seperti yang Anda lihat di bundel saya, saya juga memiliki sharp sebagai dependensi.

Perbedaan utama antara keduanya adalah jimp adalah kode javascript 100%, sedangkan sharp mendelegasikan ke binari anak.

Pada awalnya saya pikir jimp bisa lebih baik karena tidak memiliki dependensi, tetapi kenyataannya sangat berbeda: sharp mengirimkan binari pra-instal dan ukuran paket sebenarnya terlalu jauh lebih kecil dari jimp .

Faktanya, sharp perf lebih unggul, lihat
http://sharp.pixelplumbing.com/en/stable/performance/

Kecualikan saja jimp

Saya kira di dalam 185MB jimp ditambahkan di sana, hanya beberapa hal yang benar-benar digunakan.

Tidak yakin bagaimana melakukannya dari node-vibrant , tetapi misalnya menambahkan bagian kecil di README.md secara eksplisit mencantumkan plugin jimp harus cukup untuk siapa pun mengecualikan hal-hal yang tidak perlu lainnya ke langkah pra-pembuatan

enhancement

Komentar yang paling membantu

Berikut beberapa penelitian tambahan tentang bagaimana jimp dapat dikonfigurasi untuk mengurangi ukuran:

Paket @jimp/custom bertindak sebagai basis untuk menambahkan plugin dari awal. Ekspor defaultnya adalah fungsi configure yang menggunakan array types (tipe gambar yang didukung) dan plugins (plugin untuk digunakan).

@jimp/types mengekspor semua jenis yang disertakan dalam paket jimp , membuatnya mudah untuk mendapatkan dukungan untuk gambar yang sama yang didukung node-vibrant sekarang.

Satu-satunya plugin khusus yang tampaknya digunakan node-vibrant adalah resize function . Plugin yang sesuai adalah @jimp/plugin-resize .


Paket @vibrant/image-node dapat diperbarui dengan yang berikut ini di dekat bagian atas skrip:

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]
});

Semua 9 komentar

Cintai pekerjaan yang telah Anda lakukan untuk menyelidiki ini, terima kasih yang tulus.

sharp sepertinya bukan solusi yang dapat kami ambil, karena (terlepas dari namanya) kami mendukung browser untuk menjalankan node-vibrant sendiri.

Namun, Anda sepenuhnya benar bahwa jimp tidak diperlukan untuk sebagian besar penggunaan di node-vibrant . Saat ini kami membatasi pengembangan untuk basis kode "stabil" saat ini, kami sedang mengerjakan penulisan ulang basis kode menjadi monorepo (yang berarti Anda dapat memilih apa yang ingin Anda gunakan dari node-vibrant di masa mendatang juga !) dan saya telah mengonfirmasi bahwa itu adalah pengoptimalan ukuran yang dapat kami lakukan di sana juga.

Saya memiliki minggu yang sangat sibuk di depan saya, tetapi akan melakukan yang terbaik untuk mengulang kembali akhir pekan depan untuk membuat perubahan ini

Jika tidak, kami selalu menyukai dan menerima permintaan tarik

Saya mencatat hal lain di balik @jimp : mereka memiliki core-js sebagai dependensi, dan dependensi ini diinstal per setiap plugin!

Itulah mengapa ukuran @jimp adalah 185MB: core-js membutuhkan 7,4MiB x 27 modul = TERLALU BANYAK RUANG.

Mungkin core-js dapat dideklarasikan dengan cara yang dapat mereka bagikan di antara plugin

Berikut beberapa penelitian tambahan tentang bagaimana jimp dapat dikonfigurasi untuk mengurangi ukuran:

Paket @jimp/custom bertindak sebagai basis untuk menambahkan plugin dari awal. Ekspor defaultnya adalah fungsi configure yang menggunakan array types (tipe gambar yang didukung) dan plugins (plugin untuk digunakan).

@jimp/types mengekspor semua jenis yang disertakan dalam paket jimp , membuatnya mudah untuk mendapatkan dukungan untuk gambar yang sama yang didukung node-vibrant sekarang.

Satu-satunya plugin khusus yang tampaknya digunakan node-vibrant adalah resize function . Plugin yang sesuai adalah @jimp/plugin-resize .


Paket @vibrant/image-node dapat diperbarui dengan yang berikut ini di dekat bagian atas skrip:

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]
});

Sepertinya saya mungkin perlu menulis beberapa pengetikan, tapi terima kasih banyak @NotWoods. Saya akan mencoba untuk menyelesaikan ini minggu ini

Pengetikan memakan waktu lebih lama dari yang saya kira awalnya. Saya tahu saya akan menempuh jalan yang jauh, tetapi saya ingin memastikan bahwa saya memperbaiki ekosistem serta kebutuhan kita sendiri

Pengetikan untuk jimp akhirnya memakan waktu sedikit, tetapi ini merupakan kontribusi yang bagus di hulu:

https://github.com/oliver-moran/jimp/pull/770

Setelah ini digabungkan, saya akan melakukan optimasi ke node-vibrant

Dengan rilis Jimp 0.8.4, ini sekarang bisa dilakukan! Saya akan membuka PR malam ini dengan itu! :D

Menunggu https://github.com/oliver-moran/jimp/pull/815 untuk memperbaiki beberapa masalah setelah jimp 0.8.4 dengan impor

Ini telah diselesaikan pada rilis 3.1.5

Apakah halaman ini membantu?
0 / 5 - 0 peringkat