فشرده ساز اسکریپت گوگل

از زمانی که استفاده از جاوا اسکریپت در اینترنت رونق پیدا کرد، توسعه دهنده ها به این فکر افتادند که ابزارهایی برای فشرده سازی یا بهتر بگیم چلاندن اسکریپت ها بنویسند. منظور از چلاندن(Minification)، خلاصه  و کوتاه کردن اسکریپت بدون تغییر در عملکرد آن است. که این کار با حذف فضاهای خالی، کامنت ها و یکسری تکنیک‌های دیگر انجام می‌شود.

اولین ابزارهایی که در این زمینه تولید شدند الگوریتم های ساده ای داشتند که با استفاده از Reqular Expression ها کار می‌کردند و به همین دلیل مشکلاتی هم داشتند. برای مثال JSMin و Dean Packer از چلاننده(Minifier) های معروفی هستند که به همین روش کار می‌کنند. مثلا JSMin نمی‌تواند همه‌ی کاراکترهای خط جدید (line feed) را حذف کند چون ممکن است باعث بوجود آمدن باگ در برنامه شود. Dean Packer هم برای اینکه درست کار کند باید تمام دستورات اسکریپت به «;» ختم شده باشند.

این شد که توسعه دهنده ها به فکر تولید چلاننده‌هایی افتادند که بتواند مثل یک موتور اسکریپت (JavaScript Engine) اسکریپت را تفسیر نموده و به بهینه ترین نحو بچلاند. اولین چلاننده از این نسل Dojo ShrinkSafe بود که بر پایه موتور اسکریپت Rhino نوشته شده است. کمی بعد یاهو هم چلاننده ای تولید کرد با نام YUI Compressor که نسبت به سایر چلاننده‌‌های موجود از کارایی بهتری برخوردار بود و این برتری را تا مدتها حفظ کرد و هم اکنون که بیش از دو سال از انتشار نسخه‌ی اول آن می‌گذرد اکثر پروژه ها و فریم ورک های جاوااسکرپیت از این چلاننده برای چلاندن اسکریپت‌هایشان استفاده می‌کنند.

حدود یکی دو ماه پیش گوگل هم پا به عرصه رقابت گذاشت و چلاننده‌ی خودش را با نام Closure Compiler عرضه کرد. این چلاننده از تکنیک های جدیدی استفاده میکند که باعث شده نرخ فشرده سازی آن حدود 10 تا 20 درصد از YUI بیشتر باشد. از نکات قابل توجه در این چلاننده این است که قابلیت شناسایی و حذف کدهای بلااستفاده(dead code) را از درون اسکریپت دارد.

چلاننده‌ی گوگل مشابه YUI یک برنامه Java است که از خط دستور اجرا میشود ولی علاوه بر این گوگل این برنامه را به صورت اپلیکشن تحت وب و API هم ارائه کرده است.

برای مقایسه‌ی تکنیک های بکار رفته در YUI Compressor و Closure Compiler دیدن این slideshow رو توصیه می‌کنم.

برچسب‌ها: , , , ,

10 دیدگاه برای “فشرده ساز اسکریپت گوگل”

  1. منتظری گفته:

    سلام
    مرسییییییی SmartOptimizer، میبینم که پلاگین JA Compress هم از SmartOptimizer استفاده میکنه.

    http://www.joomlart.com/addons/components_and_modules/ja_compress_-_speed_up_joomla_with_css_and_javascript_optimization.html

  2. علی گفته:

    سلام
    چه جالب، خودم نمیدونستم.

  3. محمد گفته:

    سلام علی آقا
    این چه به درد ما می خوره گوگل کلا 403.اگه داری یک جایی آپلودش کن ما هم استفاده کنیم.
    بازم ممنون.

  4. علی گفته:

    سلام محمد جان،
    فایلش رو گذاشتم اینجا:
    http://farhadi.ir/downloads/google-closure-compiler.zip

  5. نبی گفته:

    جالب بود.
    البته میدونم هدفت معرفی بود نه مقایسه. اما بد نیست در مقام مقایسه YC و GC پیرو ماحصل این اسلاید، این چند جمله هم یادآوری بشه تا متعصبان اینبار چشم بسته سراغ مصحولات گوگولی نروند!:
    در مجموع YC قابل اطمینانتر است و GC شگفت‌انگیز و امیدوار کننده است و تقریباً درمورد کدهای ساده مطمئن است ولی نه درمورد کدهای پیچیده!

  6. علی گفته:

    GC برای فشرده سازی level های مختلف داره و فقط level پیشرفتش هست که اگه ندونی چه جوری باهاش کار کنی کدت رو از کار میندازه. و اون دو level دیگش تقریبا مطمئنه.
    حتی jquery هم الان از GC استفاده میکنه و مشکلی نداره.

  7. سینا سالک گفته:

    بسیار جالب توجه.
    فکر می کنم مشکلاتی که حالت پیشرفته داره هم به تدریج رفع بشه. ولی دیگه یه جورایی کد رو باز نویسی می کنه!!
    من الان چند سالی است که از gz استفاده می کنم و حجم فایل های جاواسکریپت اینقدر کم میشه که دیگه به چشم نمی یاد. خوشبختانه اکثر مرورگر ها هم قادر به بازکردن فایل های فشرده هستند.

  8. eAmin گفته:

    خوب بود.
    در همین راستا، بد ندیدم، تا در اینجا Ajax Minifier مایکروسافت رو هم به دوستان معرفی کنم:
    http://ajaxian.com/archives/microsoft-ajax-minifier-vs-yui-compressor
    البته باز هم در اینجا برنده ی اصلی YUI هست. باز هم بخاطر قابل اطمینان بودن.
    به نظر بنده باید AM و GC رو با هم مقایسه کرد، تا دید نتیجه ی بین این دو چه خواهد بود!

  9. سینا گفته:

    سلام
    آقا اخبار جدید در رابطه با اینترنت مخابرات :
    http://sina.salek.ws/fa/node/1313/revisions/1336/view?diff=1

  10. حمید گفته:

    وبلاگ خوبی دارید.

    تشکر
    تشکر
    مثل خودتان
    شاد باشید.

دیدگاهی بنویسید