Node-vibrant: تقليل حجم المكتبة

تم إنشاؤها على ٢١ يونيو ٢٠١٩  ·  9تعليقات  ·  مصدر: Vibrant-Colors/node-vibrant

أرى أن هذه المكتبة تعلن أن 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 يجب أن تكون كافية لأي شخص يستبعد بقية الأشياء غير الضرورية في خطوة ما قبل البناء

enhancement

التعليق الأكثر فائدة

إليك بعض الأبحاث الإضافية حول كيفية تكوين 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]
});

ال 9 كومينتر

أحب العمل الذي قمت به للنظر في هذا ، شكرًا جزيلاً لك.

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

glomotion picture glomotion  ·  5تعليقات

eggers picture eggers  ·  3تعليقات

daviestar picture daviestar  ·  9تعليقات

asela-wijesinghe picture asela-wijesinghe  ·  4تعليقات

inbarshani picture inbarshani  ·  4تعليقات