KeroTools

تصغير أكواد JavaScript عبر Terser

صغّر كود JavaScript عبر Terser لتقليل حجم الملف وتسريع الموقع.

الإدخال
0 حرف
الناتج

مصدرك يبقى على جهازك

لا شيء يُحذف لاحقاً

مبنيّ للشفرة المملوكة

يعمل في كل متصفح حديث

كيف تعمل

  1. 1

    الصق شفرة JavaScript

    وحدةً أو سكربتاً أو مقطعاً تريده أصغر قبل الإطلاق.

  2. 2

    افحص النتيجة

    قارن الأحجام واقرأ التحذيرات قبل أن تستبدل أي شيء.

  3. 3

    انسخ المخرجات

    خذها إلى مخرجات بناء أو قالب أو وسم سكربت مضمَّن.

لماذا تستخدم هذه الأداة

إعادة تسمية محلية آمنة

لا تُقصَّر إلا الروابط التي ترى الأداة كل إشارة إليها، وهذا ما يُبقي المخرجات عاملة.

الحجم قبل وبعد

التوفير الخام معروضاً إلى جانب ما يصير إليه بعد الضغط، وهو الرقم الذي يهمّ.

أخطاء الصياغة مُبلَّغ عنها

المدخل الباطل يقول أين فشل بدل إنتاج مخرجات تنكسر عند التحميل.

التعليقات تُزال والتوجيهات تبقى

ترويسات الرخص و`"use strict"` تنجو، لأن إسقاطها بصمت يغيّر السلوك أو يخالف رخصة.

لا شيء يُرفع

تُعالَج الشفرة في متصفحك، فالمصدر المملوك لا يصل إلى خادم أبداً.

مجاني بلا حساب

بلا تسجيل، وبلا علامة مائية، وبلا حدّ لكمّ ما تصغّره.

التوفير يأتي من إعادة التسمية لا من حذف المسافات

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

ما يجب ألّا يُعاد تسميته، ولماذا لا تستطيع الأداة التمييز

الحالات الخطِرة كلها تتشارك شكلاً: اسمٌ مكتوب نصّاً في موضع لا يقرؤه المصغِّر شفرةً. فالوصول إلى خاصية بـ‎obj["someKey"]‎ مع كتابتها ‎obj.someKey‎ في موضع آخر يعني أن صيغةً تُعاد تسميتها والأخرى لا. ومفاتيح الكائنات التي عليها أن تطابق حمولة JSON من واجهة برمجية هي المشكلة نفسها — أعِد تسمية المفتاح فيكفّ الطلب عن مطابقة الخادم. وأطر حقن الاعتماديات الأقدم تقرأ أسماء المعاملات لتقرر ما تحقنه، ولهذا كان تصغير تطبيق AngularJS دون خطوة التوصيف طريقاً مشهوراً لكسره كلياً. وكل ما يفحص ‎Function.name‎ أو اسم صنف في زمن التشغيل، ومنه بعض شفرات التسلسل والتسجيل، له الانكشاف نفسه. والقاعدة العملية: الأسماء التي تعبر حدّاً — حمولة شبكة أو قالباً أو بحثاً بسلسلة — يجب أن تُقتبَس وتُترَك وشأنها.

الخرائط المصدرية تجعل المخرجات قابلة للتصحيح، وقد تفشي مصدرك

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

التصغير ليس تعمية ولا يحمي شيئاً

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

الضغط على السلك يؤدي معظم ما يُنسَب إلى التصغير

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

لماذا يهمّ التصغير المحلي في هذا النوع من النصّ

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

أخطاء شائعة يجب تجنّبها

  • خلط `obj.someKey` و`obj["someKey"]` للخاصية نفسها. صيغةٌ تُعاد تسميتها والأخرى لا، فتكفّان عن الإشارة إلى الشيء نفسه بعد التصغير.
  • إعادة تسمية مفاتيح يجب أن تطابق حمولة شبكة. مفاتيح الكائنات المرسَلة إلى واجهة برمجية أو المستقبَلة منها يطابقها الخادم سلاسلَ — اقتبسها ليتركها المشوِّه وشأنها.
  • الاعتماد على أسماء المعاملات أو الدوالّ في زمن التشغيل. حقن الاعتماديات باسم المعامل، والمنطق الذي يقرأ `Function.name`، ينكسران معاً لأن تلك الأسماء هي بالضبط ما يستبدله التشويه.
  • نشر الخرائط المصدرية في مسار علنيّ. الخريطة تحوي شفرتك الأصلية بما فيها التعليقات المُزالة — ارفعها إلى متتبّع أخطائك بدل تقديمها بجوار الحزمة.
  • معاملة التصغير حمايةً. الشفرة المصغَّرة تُعاد إزاحتها بخطوة واحدة، والسلاسل ونقاط النهاية والخوارزمية كلها ما تزال مقروءة، فلا شيء سرّيّ يمكن إطلاقه إلى متصفح.

كيف تُقارن

الجانبهذه الأداةمصغِّرات عبر الإنترنتمسار بناء
إرسال المصدر إلى خادملا يحدث أبداًغالباً نعملا
الحجم المضغوط معروضنعمنادراًبإضافة
إعداد مطلوبلا شيءلا شيءضبط
يزيل الشفرة غير المستعملةلالانعم
حساب أو تسجيلغير مطلوبمطلوب أحياناًغير مطلوب
السعرمجانيمجاني / باقات مدفوعةمجاني

المزايا

تشويه المعرّفات

أسماء المتغيّرات والدوالّ المحلية مقصَّرة، وهنا يأتي معظم التقليص.

إزالة المسافات والتعليقات

كل ما يتجاهله المحلّل يُسقَط، بما فيه الأسطر الجديدة التي تجعل الملف مقروءاً.

قياس واعٍ بالضغط

الحجم المصغَّر والحجم المضغوط معاً، لأن الثاني وحده يصل إلى المستخدم.

دعم الصياغة الحديثة

الأصناف والدوالّ السهمية والقوالب النصية والتسلسل الاختياري وصياغة الوحدات كلها مفهومة.

يتحمّل الملفات الكبيرة

حزم كاملة تُصغَّر دون رفع ولا سقف حجم.

تنسيق عكسيّ

ووضع تجميل أيضاً، لأن قراءة شفرة طرف ثالث مصغَّرة حاجة شائعة.

بلا تثبيت

بلا أداة بناء ولا بيئة تشغيل ولا اعتماديات — يعمل على صفحة الويب.

جاهز للعربية وRTL

واجهة كاملة بثماني لغات، منها العربية من اليمين إلى اليسار.

آمن افتراضياً

يُقدَّم عبر HTTPS، بلا تتبّع للمحتوى وبلا رفع إلى طرف ثالث.

من يستخدمها

مطوّرو الواجهات الأمامية

تقليص سكربت قائم بذاته لا يمرّ بخطوة بناء.

مهندسو أداء الويب

مقارنة الحجمين المصغَّر والمضغوط لرؤية أين التوفير فعلاً.

مطوّرون يقرؤون شفرة طرف ثالث

استعمال اتجاه التجميل لجعل مكتبة مصغَّرة مقروءة بما يكفي لتتبّعها.

كل من يضمّن سكربتاً

إنزال مقطع صغير إلى حجم معقول للتضمين في صفحة.

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

لا. كل شيء يعمل محلياً في متصفحك — نصّك لا يُرفع أو يُخزَّن أو يُشارَك أبداً.

نعم — مجاني تماماً، بلا حساب وبلا حدود.