تصغير حجم الملفات (البرمجة)

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

يمكن تمييز عملية التصغير عن المفهوم الأكثر عمومية لضغط البيانات من حيث أنه يمكن تفسير المصدر المصغر على الفور دون الحاجة إلى خطوة فك الضغط: يمكن للمفسر نفسه العمل مع كل من المصدر الأصلي والمصدر المصغر.

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

مثال

على سبيل المثال، كود جافا سكريبت

// هذا تعليق سيتم حذفه بواسطة أداة التصغير var array = []; for ( var i = 0 ; i < 20 ; i ++ ) { array [ i ] = i ; }

يعادل ولكن أطول من

for ( var a = [], i = 0 ; i < 20 ; a [ i ] = i ++ );

تاريخ

في عام ٢٠٠١، قدّم دوغلاس كروكفورد برنامج JSMin، [ ١ ] الذي أزال التعليقات والمسافات البيضاء من كود جافا سكريبت. [ ٢ ] تبعه برنامج YUI Compressor في عام ٢٠٠٧. [ ٢ ] في عام ٢٠٠٩، أتاحت جوجل مجموعة أدوات Closure، بما في ذلك Closure Compiler الذي احتوى على ميزة رسم خرائط المصدر بالإضافة إلى إضافة لمتصفح فايرفوكس تُسمى Closure Inspector. [ ٣ ] في عام ٢٠١٠، قدّم ميهاي بازون برنامج UglifyJS ، الذي تم استبداله ببرنامج UglifyJS2 في عام ٢٠١٢؛ وكان الهدف من إعادة كتابة البرنامج هو دعم خرائط المصدر. [ ٤ ] منذ عام ٢٠١٧، تولّى أليكس لام صيانة وتطوير UglifyJS2، واستبدله ببرنامج UglifyJS3 الذي وحّد واجهة سطر الأوامر مع واجهة برمجة التطبيقات. [ 5 ] في عام 2018، تم تطوير Terser كنسخة معدلة من uglify-es [ 6 ] [ 7 ] ، واكتسب زخمًا منذ ذلك الحين؛ ففي عام 2020، تفوق على UglifyJS من حيث عدد التنزيلات اليومية. [ 8 ] ومنذ أواخر عام 2018، أوصى Terser باستخدام أداة تجميع الملفات RollupJS . [ 9 ]

رسم خرائط المصادر

خريطة المصدر هي صيغة ملف تسمح لأدوات برمجية جافا سكريبت بعرض شفرة برمجية مختلفة للمستخدم عن الشفرة التي ينفذها الحاسوب فعليًا. على سبيل المثال، للمساعدة في تصحيح أخطاء الشفرة المصغّرة، يتم "ربط" هذه الشفرة بشفرة المصدر الأصلية غير المصغّرة .

ابتكر جوزيف شور الصيغة الأصلية كجزء من مشروع تصغير برنامج Closure Inspector. [ 10 ] قلّص الإصداران الثاني والثالث من الصيغة حجم ملفات الخرائط بشكل ملحوظ. [ 10 ] في عام 2024، اعتمدت اللجنة الفنية TC39 التابعة لمنظمة Ecma International معيار خرائط المصدر تحت مسمى ECMA-426 . [ 11 ]

الأنواع

يمكن تصغير موارد جافا سكريبت وأوراق الأنماط المتتالية (CSS)، مما يحافظ على وظائفها مع تقليل حجم ملفاتها بشكل ملحوظ. تتوفر مكتبات عبر الإنترنت قادرة على تصغير الملفات وتحسينها بدرجات متفاوتة. كما تقوم بعض المكتبات بدمج ملفات برمجية متعددة في ملف واحد ليسهل على المستخدم تنزيله. تُمكّن خرائط مصدر جافا سكريبت من جعل الكود قابلاً للقراءة والتصحيح حتى بعد دمجه وتصغيره. [ 12 ]

مراجع

  1. كروكفورد، دوغلاس (11 سبتمبر 2001). "JSMin: أداة تصغير جافا سكريبت" . Crockford.com . منشور ذاتيًا . مؤرشف من الأصل في 5 أبريل 2002.
  2. 1 2 "تصغير حجم الكود" . webplatform.github.io . مشروع منصة الويب. مؤرشف من الأصل بتاريخ 24 أبريل 2016.
  3. بول، رايان (6 نوفمبر 2009). "جوجل تفتح أدوات تطوير جافا سكريبت للجميع" . آرس تكنيكا .
  4. بازون، ميهاي (8 نوفمبر 2012). "هل يجب عليك التبديل إلى UglifyJS2؟" . lisperator.net . منشور ذاتيًا .
  5. "uglify-js NPM" . npmjs.com . 6 مايو 2017.
  6. "terser · مجموعة أدوات لتشويه وضغط أكواد جافا سكريبت لـ ES6+" . terser.org . تم الاطلاع عليه بتاريخ 29 يناير 2023 .
  7. "تحديث README.md · terser/terser@3ef6879" . جيثب .
  8. "Terser vs uglify-js" . اتجاهات NPM .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  9. ^ سانتوس ، فابيو (28 ديسمبر 2018). "تحديث README.md - terser/terser@b2e0736" . جيثب . تم الاسترجاع 2026-01-23 .
  10. 1 2 "مقترح مراجعة خريطة المصدر 3" . 11 يناير 2011. مؤرشف من الأصل في 8 مارس 2016. تم الاطلاع عليه في 16 أبريل 2016 .
  11. "مواصفات تنسيق خريطة المصدر" . tc39.es. 14 مارس 2026. مؤرشف من الأصل في 24 أبريل 2026. تم الاطلاع عليه في 26 أبريل 2026 .
  12. سيدون، رايان (21 مارس 2012). "مقدمة إلى خرائط مصدر جافا سكريبت" . HTML5 Rocks . مؤرشف من الأصل في 28 ديسمبر 2021.