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:
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/
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
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
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 fungsiconfigure
yang menggunakan arraytypes
(tipe gambar yang didukung) danplugins
(plugin untuk digunakan).@jimp/types
mengekspor semua jenis yang disertakan dalam paketjimp
, 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: