أرى أن هذه المكتبة تعلن أن jimp
تبعية لإجراء بعض التحويلات.
أقوم بتحليل تبعيات مشاريعي (لدي node-vibrant
في package.json
ويبدو أن jimp
بحاجة إلى الكثير من المساحات:
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
النقطة هي ، jimp
يتضمن بعض المكونات الإضافية افتراضيًا:
--- /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
لكن لست متأكدًا مما إذا كانت جميع المكونات الإضافية ذات صلة بـ node-vibrant
.
أريد أن أقترح طريقتين:
sharp
(الحل المفضل لدي)
كما ترى في الحزمة الخاصة بي ، لدي أيضًا sharp
كتبعية.
الفرق الرئيسي بين كليهما هو jimp
هو 100٪ كود جافا سكريبت ، بينما sharp
مندوب في ثنائيات الأبناء.
في المرة الأولى اعتقدت أن jimp
يمكن أن يكون أفضل لأنه لا يحتوي على تبعيات ، لكن الواقع مختلف تمامًا: sharp
شحن ثنائيات مثبتة مسبقًا وحجم الحزمة أصغر كثيرًا في الواقع من jimp
.
في الحقيقة ، sharp
perf هي الأفضل ، انظر
http://sharp.pixelplumbing.com/en/stable/performance/
jimp
غير الضروريأفترض أنه في داخل 185 ميجابايت تمت إضافة jimp
هناك ، يتم استخدام عدد قليل من الأشياء بالفعل.
لست متأكدًا من كيفية القيام بذلك من node-vibrant
، ولكن على سبيل المثال ، إضافة قسم صغير على README.md سرد صراحةً الإضافات الضرورية jimp
يجب أن تكون كافية لأي شخص يستبعد بقية الأشياء غير الضرورية في خطوة ما قبل البناء
أحب العمل الذي قمت به للنظر في هذا ، شكرًا جزيلاً لك.
sharp
غير المحتمل أن يكون node-vibrant
بمفرده.
ومع ذلك ، فأنت محق تمامًا في أن jimp
ليس مطلوبًا لكثير من الاستخدام في node-vibrant
. نقوم حاليًا بتقييد تطوير قاعدة الشفرة الحالية "المستقرة" ، ونعمل على إعادة كتابة قاعدة الشفرة إلى monorepo (مما يعني أنه يمكنك اختيار ما تريد استخدامه من node-vibrant
في المستقبل أيضًا !) وقد أكدت أن هذا تحسين للحجم يمكننا إجراؤه هناك أيضًا.
أمامي أسبوع مزدحم للغاية ، لكنني سأبذل قصارى جهدي للعودة في نهاية الأسبوع المقبل لإجراء هذا التغيير
خلاف ذلك ، نحن نحب دائمًا ونقبل طلبات السحب 👀
لقد لاحظت شيئًا آخر وراء @jimp
: لديهم core-js
كتبعية ، ويتم تثبيت هذه التبعية لكل مكون إضافي!
هذا هو السبب في أن الأحجام @jimp
هي 185 ميجابايت: يأخذ core-js
7.4 ميغا بايت × 27 وحدة = مساحة كبيرة جدًا.
ربما يمكن الإعلان عن core-js
بطريقة يمكن مشاركتها بين المكونات الإضافية
إليك بعض الأبحاث الإضافية حول كيفية تكوين jimp لتقليل الحجم:
تعمل الحزمة @jimp/custom
كقاعدة لإضافة المكونات الإضافية إليها من البداية. تصديرها الافتراضي هو دالة configure
تأخذ مصفوفات من types
(أنواع الصور المدعومة) و plugins
(الإضافات المراد استخدامها).
@jimp/types
بتصدير جميع الأنواع المضمنة في الحزمة الرئيسية jimp
، مما يجعل من السهل الحصول على دعم للصور نفسها التي تدعمها العقدة الآن.
المكوّن الإضافي الوحيد الذي يبدو أنه يستخدمه نابض بالحياة هو الوظيفة resize
. المكوّن الإضافي المقابل هو @jimp/plugin-resize
.
يمكن تحديث الحزمة @vibrant/image-node
بما يلي بالقرب من أعلى البرنامج النصي:
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]
});
يبدو أنني قد أحتاج إلى كتابة بعض الكتابة ، لكن شكرًا جزيلًا لك @ NotWoods. سأحاول إنهاء هذا الأسبوع
تستغرق الكتابة وقتًا أطول مما كنت أعتقده في الأصل. أعلم أنني أقطع شوطًا طويلاً ، لكني أريد التأكد من أنني أصلح النظام البيئي وكذلك احتياجاتنا الخاصة
انتهى الأمر بالكتابة في jimp قليلاً ، لكنها مساهمة جيدة في المنبع:
https://github.com/oliver-moran/jimp/pull/770
بعد دمج هذا ، سأقوم بالتحسين إلى node-vibrant
مع إصدار Jimp 0.8.4 ، يمكن القيام بذلك الآن! سآخذ علاقات عامة مفتوحة الليلة معها! :د
انتظار https://github.com/oliver-moran/jimp/pull/815 لإصلاح بعض المشكلات بعد jimp 0.8.4
مع الاستيراد
تم حل هذا باعتباره من إصدار 3.1.5
التعليق الأكثر فائدة
إليك بعض الأبحاث الإضافية حول كيفية تكوين jimp لتقليل الحجم:
تعمل الحزمة
@jimp/custom
كقاعدة لإضافة المكونات الإضافية إليها من البداية. تصديرها الافتراضي هو دالةconfigure
تأخذ مصفوفات منtypes
(أنواع الصور المدعومة) وplugins
(الإضافات المراد استخدامها).@jimp/types
بتصدير جميع الأنواع المضمنة في الحزمة الرئيسيةjimp
، مما يجعل من السهل الحصول على دعم للصور نفسها التي تدعمها العقدة الآن.المكوّن الإضافي الوحيد الذي يبدو أنه يستخدمه نابض بالحياة هو الوظيفة
resize
. المكوّن الإضافي المقابل هو@jimp/plugin-resize
.يمكن تحديث الحزمة
@vibrant/image-node
بما يلي بالقرب من أعلى البرنامج النصي: