تنقسم عملية ضغط JSA إلى خطوتين
الخطوة الأولى هي ضغط بناء الجملة ، على غرار Dojo يتقلص ، ولكن أكثر أمانًا من ذلك وأكثر كفاءة.
والخطوة الثانية هي ضغط النص ، حاليا
خوارزمية ضغط جافا سكريبت.
(http://dean.edwards.name/packer/)
يمكن تعيين هذه في نافذة الإعدادات.
بشكل افتراضي ، يتم استخدام ضغط بناء الجملة لأول مرة. يتم استخدام ضغط النص على الأساس الأصلي عندما يكون الملف أكبر من 1000Byte ويمكن ضغط ضغط النص إلى 90 ٪ من الحجم الأصلي.
فيما يلي مثال على ضغط البرنامج النصي لإظهار وظائف JSA بناء جملة وتحسين.
نسخة الكود كما يلي:
يحاول {
// xxxx () ؛
}
catch (e) {
yyyy () ؛
وظيفة F1 () {
}
}
أخيراً {
zzzz () ؛
}
الدالة F2 (var1) {
var var2 = 2 ؛
var var3 = 3 ؛
var withObject = {var2: -2}
مع (withObject) {
تنبيه (var2) ؛
}
}
نتائج مضغوطة (منسقة لسهولة الوصول):
نسخة الكود كما يلي:
zzzz () ؛
وظيفة f2 (a) {
var var2 = 2 ؛
var b = 3 ؛
var c = {var2: -2} ؛
مع (ج) {
تنبيه (var2) ؛
}
}
مقارنة مع أدوات الضغط الأخرى لنسب الضغط:
1. ضاغط JavaScript (http://dean.edwards.name/packer/)
باستخدام رمز أداة الضغط الخاص به كمثال (v2.02) Packer مضغوط بحجم 7،428 بايت (إزالة التعليقات).
ويمكن ضغط أداة الضغط الخاصة بنا إلى 7،256 بايت
7256 /7428 = 0.9768443726440496
2. Fojo يتقلص (الأشياء الخشنة غير فعالة وخطيرة على حد سواء. يوصى بتغيير المستخدم الأصلي في أسرع وقت ممكن)
مع رمز مصدر إطاره الخاص كمثال (v0.4.1):
يضغط الحجم إلى 149،518 بايت من تلقاء نفسه ، ويمكننا تقليصه إلى 81261 بايت بعد الضغط
81261 /149518 = 0.5434864029748927
تعليمات السلامة:
1. ضاغط javaScript
استنادًا إلى ضغط النص ، لم أنظر إلى المنطق فيه بعناية ، لكن إمكانية مشكلة الضغط هذه منخفضة للغاية. تستخدم أداة الضغط الخاصة بنا أيضًا خوارزمية الضغط الخاصة بها ، في JSI 1.1 A8 و
لم يتم العثور على استثناء في اختبار مكتبة الطرف الثالث المتكامل. وهناك أيضًا إطار عمل معروف ، لذلك أعتقد أنه لن تكون هناك مشكلة.
ملحق (2007-03-12): لقد وجدت اليوم أن هذا الشيء لديه خطأ عند تحليل بناء جملة سلسلة JavaScript متعدد الخطوط. ومع ذلك ، لن تكون هذه المشكلة موجودة بعد ضغطها بواسطة بناء جملة JSA.
2.dojo يتقلص خطير! ! ! ! !
استبدل اسم المتغير المحلي الطويل باسم أقصر ، وهو أداة ضغط غير آمنة للغاية ، على سبيل المثال:
نسخة الكود كما يلي:
وظيفة(){
var withObject = {variable1: 1}
var variable1 = 2 ؛
مع (withObject) {
تنبيه (متغير 1) ؛
}
}
ضغط إلى:
نسخة الكود كما يلي:
وظيفة(){
var _1 = {variable1: 1} ؛
var _2 = 2 ؛
مع (_1) {
تنبيه (_2) ؛
}
}
من الواضح أن هذا خطأ ، هذه القمامة لا تهتم ببعض بناء الجملة الخاص ، وديناميات JavaScript.
لا تتم معالجة لوظائف eval ، وعمليات الصيد ، ومع البيانات.
على النقيض من ذلك ، فإن JSA هي أداة الضغط الأكثر أمانًا والأكثر فعالية التي أعرفها في الوقت الحاضر.
لا توفر JSA وظائف ضغط الكود فحسب ، بل يمكن أيضًا استخدامها لتنسيق وتحليل البرنامج النصي.
يمكن استخدام تحليل البرنامج النصي لعرض معلومات البرنامج النصي وإيجاد مشاكل محتملة في البرامج النصية.
على سبيل المثال ، تحقق من الوظائف والمتغيرات المعلنة في البرنامج النصي.
تم استخدام تلك المتغيرات الخارجية. إلخ. . .