تخطَّ إلى المحتوى

تصغير JavaScript

النوع نفسه من أدوات التصغير الذي تستخدمه أدوات البناء، يعمل داخل هذه الصفحة. يفهم الصياغة الحديثة والوحدات، ولا يُخزَّن الكود المصدري أبدًا.

  • لا يُخزَّن أبدًا
  • لا طابور ولا انتظار
  • دون تسجيل ودون علامة مائية
بعد التصغير

يظهر JavaScript المصغّر هنا.

كيف تعمل الأداة

1

الصق كود JavaScript

أو أفلِت الملف هنا. الوحدات والفئات (classes) والصياغة الحديثة كلها مفهومة.

2

اختر الخيارات

إعادة تسمية المتغيرات المحلية، وحذف استدعاءات console، والإبقاء على تعليقات الترخيص — لكل منها مفتاح.

3

انسخ النتيجة أو نزّلها

مع الحجم قبل التصغير وبعده.

إعادة التسمية، والحذف، وما لا يجوز المساس به أبدًا

تحدث ثلاثة أشياء، مرتبة تصاعديًا بحسب ما توفّره وما تكلّفك إياه. تُحذف المسافات والتعليقات، وهذا بلا ثمن. ويُحذف الكود الميت — فرع لا يمكن أن يُنفَّذ أبدًا، أو متغير يُسند إليه ولا يُقرأ. وتُختصر الأسماء المحلية، فيصبح اسم مدروس مثل calculateMonthlyTotal حرفًا واحدًا. في هذا الأخير يكمن معظم التوفير، وهو أيضًا ما يجعل الناتج غير مقروء، وهذا مناسب للنشر وعديم الفائدة لتصحيح الأخطاء.

لا يمكن إعادة تسمية أي شيء يشير إليه العالم الخارجي باسمه، والخطأ في ذلك هو الطريقة التي تُفسد بها أدوات التصغير الكود. الدوال المُصدَّرة، وخصائص الكائنات التي يُوصل إليها كنصوص، وكل ما يُوصل إليه عبر window، والأسماء المستخدمة في eval، كلها يجب أن تبقى سليمة، لأن شيئًا في مكان آخر يبحث عنها بالاسم الذي كتبته. والخصائص تحديدًا تُترك كما هي افتراضيًا: فإعادة تسمية user.emailAddress ستُعطّل الكود لحظة تحويل ذلك الكائن إلى JSON أو قراءته بكود صُغّر بشكل منفصل.

احتفظ بخريطة مصدر أو بالملف الأصلي. بمجرد اختفاء الأسماء، يصبح تتبّع المكدس (stack trace) من مستخدم حقيقي خطأً في الدالة t عند الحرف 48,213، وهذا لا يخبرك بشيء على الإطلاق. خريطة المصدر تعيد الأسماء وأرقام الأسطر الأصلية في أداة التصحيح وفي تقارير الأخطاء، وإنشاؤها لا يكلّف شيئًا لأنها تُرسل كملف منفصل لا يُحمَّل إلا حين يفتح أحدهم أدوات المطوّرين.

تُحفظ تعليقات الترخيص افتراضيًا، وهذا موقف قانوني لا مسألة تفضيل. قدر كبير من الكود مفتوح المصدر مرخّص ترخيصًا متساهلًا بشرط واحد هو أن يرافقه إشعار حقوق النشر — وتنص على ذلك صراحةً رخصتا MIT وBSD. حذف تلك التعليقات من حزمة تحتوي على كود من أطراف أخرى يجعلك مخالفًا للترخيص الذي سمح لك باستخدامه. وهي لا تتجاوز بضع مئات من البايتات.

عندما تحتاج إلى شيء آخر

مكان هذه الخطوة هو عملية البناء لا تبويب في المتصفح، وأدوات التجميع الحديثة تقوم بها تلقائيًا. esbuild --minify وRollup وVite تصغّر الكود عند البناء، وتنشئ خرائط المصدر تلقائيًا، و— وهذا أهم بكثير — تجري هزّ الشجرة (tree shaking)، فتُسقط ما تُصدّره الحزم التابعة مما لا تستورده أبدًا. في تطبيق حقيقي، يوفّر ذلك أكثر بكثير مما يمكن أن يوفّره تصغير ملف جاهز.

قبل التحسين، قِس. عادةً ما يكشف محلّل الحزم (bundle analyser) أن حزمة تابعة واحدة كبيرة تشكّل معظم الملف — مكتبة تواريخ، أو مجموعة أيقونات، أو حزمة رسوم بيانية أُدرجت كاملة من أجل رسم واحد. استبدالها أو تحميلها عند الحاجة يتفوق على أي قدر من التصغير، وتقسيم الكود (code splitting) بحيث لا تحمّل الصفحة إلا ما تحتاجه يتفوق على الاثنين.

الأسئلة الشائعة

هل يُخزَّن الكود الخاص بي في أي مكان؟

لا، وهذا بالضبط المقصود مع الكود المصدري. لا يُخزَّن أي شيء ولا يراه أي خادم. لصق كود مصدري مملوك لشركتك في أداة تصغير أونلاين ترسله إلى مكان ما هو إفشاء له، أيًّا كان ما يقوله الموقع عن مدة الاحتفاظ — وهو بالضبط من الأمور التي تُفعل على عجل ودون تفكير.

هل هذه هي أداة التصغير نفسها الموجودة في أداة البناء لدي؟

على الأرجح نعم. هذا هو النوع نفسه من أدوات التصغير الذي تستخدمه webpack وRollup وVite ومعظم أدوات التجميع الأخرى. الفرق الوحيد أنها تعمل هنا، لا كشيء تثبّته.

هل ستغيّر الأداة ما يفعله الكود؟

لا ينبغي ذلك، وهذا أمر يُفحص لا يُفترض: تصغّر اختباراتنا وحدةً، ثم تستورد النسخة الأصلية والمصغّرة كلتيهما، وتشغّلهما، وتقارن النتائج. أما ما يتغيّر فعلًا: أسماء المتغيرات المحلية (ما لم تعطّل ذلك)، والتعبيرات الثابتة التي يمكن حسابها مسبقًا، والكود الميت. وأي شيء يعتمد على اسم الدالة وقت التشغيل، أو على Function.prototype.toString، قد يتعطل مع إعادة التسمية — فعطّلها إذا كنت تعتمد على أي منهما.

ماذا يعني خيار «التحليل كوحدة (module)»؟

يحدد ما إذا كان الكود يُحلَّل كوحدة ES أو كسكربت عادي. يمكن للوحدات استخدام import وexport، وتعمل دائمًا في الوضع الصارم (strict mode). الخيار مفعّل افتراضيًا لأن معظم الكود الحديث كذلك؛ أما إذا كان ملفك سكربتًا قديم الطراز يستخدم «with» أو يعتمد على سلوك غير صارم، فعطّله.

هل أحذف استدعاءات console؟

في بيئة الإنتاج، نعم عادةً — فهي ضجيج، وقد تكشف تفاصيل داخلية لأي شخص يفتح أدوات المطوّرين. الخيار معطّل افتراضيًا لأن حذف الكود بصمت ليس أمرًا ينبغي أن تفعله أداة دون أن يُطلب منها.

هل تحتفظ الأداة بتعليقات الترخيص؟

نعم، افتراضيًا. تُحفظ التعليقات التي تبدأ بـ /*! والتعليقات التي تحتوي على @license أو @preserve، لأن حذفها من مكتبة شخص آخر مرخّصة بـ MIT مخالفة للترخيص. أما التعليقات العادية فتُحذف.

هل يمكنها إنشاء خريطة مصدر؟

ليس في هذه الصفحة. خريطة المصدر لا تفيد إلا إلى جانب الملف الأصلي على رابط URL معروف، وهذا لا يناسب أداة تقوم على اللصق والنسخ — أداة البناء لديك هي المكان المناسب لذلك.

هل هناك حد للحجم؟

لا يوجد حد ثابت. بضعة آلاف من الأسطر تُصغَّر في أقل من ثانية بكثير؛ أما الملف المُجمَّع الكبير جدًا فيستغرق وقتًا أطول لأنه يُحلَّل بالكامل قبل إعادة تسمية أي شيء. إذا كنت تصغّر حزمة إنتاج كاملة، فأداة البناء لديك هي المكان الأنسب لذلك — هذه الصفحة لملف واحد أو لفحص سريع.

معلومة مفيدة: إعادة تسمية المتغيرات المحلية تجعل الملف أصغر والناتج غير مقروء، وهذا مناسب للنشر وعديم الفائدة لتصحيح الأخطاء — احتفظ بخريطة مصدر (source map) أو بالملف الأصلي. تُحفظ تعليقات الترخيص افتراضيًا، لأن حذفها قد يخالف ترخيص كود يُسمح لك باستخدامه.

أضِف هذه الأداة إلى موقعك

مجانية لأي مدونة أو صفحة فصل دراسي أو مقالة مساعدة. الصق مقتطفًا واحدًا وسيتمكن زوارك من استخدامها مباشرةً على صفحتك.