تخطَّ إلى المحتوى الرئيسي
Tooletto

أداة تصغير JS

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

  • الملفات لا تغادر جهازك أبدًا
  • مجاني، بدون تسجيل
  • بدون علامات مائية
  • يعمل دون اتصال بعد التحميل
Loading tool…

كيفية استخدام أداة تصغير JS

  1. 1

    الصق شيفرتك

    أفلت أي ملف أو مقطع جافاسكريبت صالح.

  2. 2

    اختر خياراتك

    أبقِ تشويش المتغيرات مفعَّلًا لأصغر مُخرَج، أو أوقفه إذا احتجت قراءة النتيجة.

  3. 3

    انسخ النتيجة

    انسخ الشيفرة المُصغَّرة، مع حجم المساحة الموفَّرة.

ما الذي يفعله التصغير فعليًا تحت الغطاء

إزالة المسافات البيضاء والتعليقات هو الجزء السهل والواضح من التصغير — وبمفرده بالكاد يُحرِّك المؤشر في شيفرة مكتوبة جيدًا. يأتي التقليل الحقيقي في الحجم من تحويلين أعمق: التشويش (Mangling)، الذي يعيد تسمية كل متغيّر محلي ووسيط دالة إلى أقصر مُعرِّف ممكن (`accumulator` تصبح `a`، و`temporaryResult` تصبح `t`)، وإزالة الشيفرة الميتة (Dead-code elimination)، التي تزيل الفروع والتعبيرات التي يمكن للتحليل الساكن للشيفرة إثبات أنها لن تُنفَّذ أبدًا أو لن تؤثر على المُخرَج أبدًا. كلاهما يتطلب فهم بنية الشيفرة فعليًا — نطاقاتها، وأي الأسماء محلية مقابل مُصدَّرة، وأي الفروع غير قابلة للوصول بشكل مُثبَت — وهذا سبب إنتاج أداة حقيقية قائمة على مُحلِّل صياغة مثل Terser مُخرَجًا أصغر بشكل ملموس مما يمكن لاستبدال بحث نمطي بسيط عن المسافات البيضاء إنتاجه أبدًا.

لماذا نادرًا ما يلمس معظم المطورين أداة تصغير مستقلة بعد الآن

أدوات التجميع مثل Webpack وesbuild وRollup وVite تُصغِّر مُخرَجها تلقائيًا كجزء من بناء الإنتاج، غالبًا باستخدام Terser أو محرك متوافق مع Terser تحت الغطاء — لذا بالنسبة لأي شخص يعمل داخل مشروع جافاسكريبت حديث، يحدث التصغير بالفعل بشكل غير مرئي في كل مرة يُشغِّل فيها أمر بناء. تغطي أداة مستقلة مثل هذه الحالات الخارجة عن ذلك المسار: وسم سكربت واحد بلا خطوة بناء، أو فحص سريع لمقدار تقلص مقطع شيفرة، أو ملف لمرة واحدة يحتاج ضغطًا دون سحب إعدادات أداة تجميع كاملة لهذا الغرض فقط.

عكس التنسيق، لا بديل عنه

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

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

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

هل تُرسَل شيفرتي إلى خادم؟

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

هل يمكن للتصغير أن يُعطِّل شيفرتي؟

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

هل المُخرَج المُصغَّر لا يزال جافاسكريبت صالحًا وقابلًا للتشغيل؟

نعم. المُخرَج جافاسكريبت عادي — فقط أقصر. يمكنك وضعه مباشرة في وسم `<script>` أو مُخرَج بناء تمامًا كما تفعل مع الملف الأصلي.

متى يجب أن أستخدم هذا فعليًا؟

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

لماذا يبدو المُخرَج غير قابل للقراءة؟

هذا هو المقصود. المسافات البيضاء والتعليقات وأسماء المتغيرات الطويلة موجودة للبشر الذين يقرؤون المصدر، لا لمحرك جافاسكريبت الذي يُنفِّذه. إزالتها (وتقصير الأسماء، إذا فُعِّل التشويش) تقلّل عدد البايتات المُرسَلة عبر الشبكة دون تغيير ما تفعله الشيفرة.