مطالب برچسب شده ‘JavaScript’

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

یکشنبه, 29 آذر 1388

از زمانی که استفاده از جاوا اسکریپت در اینترنت رونق پیدا کرد، توسعه دهنده ها به این فکر افتادند که ابزارهایی برای فشرده سازی یا بهتر بگیم چلاندن اسکریپت ها بنویسند. منظور از چلاندن(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 رو توصیه می‌کنم.