مستويات تجميع Closure Compiler

يتيح لك Closure Compiler الاختيار من بين ثلاثة مستويات للترجمة، تتراوح بين الإزالة البسيطة للمسافات البيضاء والتعليقات إلى عمليات تحويل مكثّفة للرموز.

WHITESPACE_ONLY

يزيل مستوى التجميع WHITESPACE_ONLY التعليقات من الرمز البرمجي، كما يزيل فواصل الأسطر والمسافات غير الضرورية وعلامات الترقيم الزائدة (مثل الأقواس وعلامات الفاصلة المنقوطة) وغيرها من المسافات البيضاء. تكون JavaScript الناتجة مماثلة وظيفيًا لرمز JavaScript المصدر.

سيستمر تحويل ميزات اللغة إلى لغة أخرى إذا كان وضع اللغة المطلوب مختلفًا عن وضع اللغة المستخدَمة في الإدخال. يمكنك الاطّلاع على --language_in و--language_out في العلامات والخيارات.

يوفر مستوى التجميع هذا أقل نسبة ضغط بين المستويات الثلاثة.

SIMPLE_OPTIMIZATIONS

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

يؤدي التجميع باستخدام SIMPLE_OPTIMIZATIONS دائمًا إلى الحفاظ على وظائف JavaScript الصالحة نحويًا، بشرط ألا يصل الرمز إلى المتغيرات المحلية باستخدام أسماء السلاسل (باستخدام عبارات eval()، على سبيل المثال، أو عن طريق استدعاء toString على الدوال).

SIMPLE_OPTIMIZATIONS هو مستوى التجميع التلقائي.

ADVANCED_OPTIMIZATIONS

ينفّذ مستوى التجميع ADVANCED_OPTIMIZATIONS عمليات التحويل نفسها التي ينفّذها المستوى SIMPLE_OPTIMIZATIONS، ولكنّه يضيف مجموعة متنوّعة من عمليات التحويل الشاملة الأكثر فعالية لتحقيق أعلى مستوى ضغط بين المستويات الثلاثة. يؤدي المستوى ADVANCED_OPTIMIZATIONS إلى ضغط JavaScript بشكل أفضل بكثير مما يمكن تحقيقه باستخدام أدوات أخرى.

ولإتاحة هذا الضغط الشديد، تضع ADVANCED_OPTIMIZATIONS افتراضات قوية بشأن الرمز البرمجي الذي تم تجميعه. إذا لم يتوافق الرمز مع هذه الافتراضات، سينتج عن ADVANCED_OPTIMIZATIONS رمز لا يمكن تشغيله.

على سبيل المثال، قد لا يعمل الرمز البرمجي الذي تم تجميعه باستخدام ADVANCED_OPTIMIZATIONS مع الرمز البرمجي غير المجمّع إلا إذا اتّخذت خطوات خاصة لضمان إمكانية التشغيل التفاعلي. إذا لم تضع علامة على الدوال والسمات الخارجية المشار إليها في الرمز، سيعيد Closure Compiler تسمية المراجع في الرمز بشكل غير ملائم، ما يؤدي إلى عدم تطابق بين الأسماء في الرمز والرمز الخارجي.

لمزيد من المعلومات حول كيفية إعداد الرمز البرمجي لـ ADVANCED_OPTIMIZATIONS، يُرجى قراءة مقالة الترجمة المتقدّمة والملفات الخارجية.

تشمل عمليات التحويل ADVANCED_OPTIMIZATIONS ما يلي:

  • إعادة تسمية أكثر صرامة:

    لا تؤدي عملية التجميع باستخدام SIMPLE_OPTIMIZATIONS إلا إلى إعادة تسمية المعلّمات والمتغيرات داخل الدوال. تعيد ADVANCED_OPTIMIZATIONS أيضًا تسمية المتغيرات العامة وأسماء الدوال والسمات.

  • إزالة الرموز البرمجية غير النشطة:

    تؤدي عملية التجميع باستخدام ADVANCED_OPTIMIZATIONS إلى إزالة الرموز التي يمكن إثبات عدم إمكانية الوصول إليها. ويكون ذلك مفيدًا بشكل خاص عند استخدامه مع مكتبات كبيرة. إذا كنت تستخدم بضع دوال فقط من ملف مكتبة كبير، يمكن للمترجم إزالة كل شيء باستثناء تلك الدوال من الناتج.

  • التضمين العام:

    يؤدي التجميع باستخدام ADVANCED_OPTIMIZATIONS إلى استبدال بعض استدعاءات الدوال بنص الدالة. يُعرف هذا التحويل باسم "التضمين". لا يضمّن المترجم البرمجي الدوال إلا عندما يرى أنّ تضمينها آمن ويوفّر مساحة. تضمّن عملية التجميع مع ADVANCED_OPTIMIZATIONS أيضًا الثوابت المضمّنة وبعض المتغيرات عندما يحدّد المجمّع أنّه يمكنه إجراء ذلك بأمان.

كيفية ضبط مستوى التجميع

لضبط مستوى التجميع في تطبيق Closure Compiler، أدرِج علامة سطر الأوامر --compilation_level مع قيمة WHITESPACE_ONLY أو SIMPLE أو ADVANCED، كما في الأمر التالي:

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js