PDA

View Full Version : گفتگو: فشرده سازی فایل ها توسط GZipe خوب است یا نه ؟؟



aminghaderi
چهارشنبه 04 مرداد 1391, 12:20 عصر
با سلام خدمت دوستان عزیز.
فشرده سازی فایل های جاوااسکریپت که بعضی وقت ها به نام gzip نام برده می شود و گاهی به نام base 62 و گاهی با نام های دیگر ظاهر می شود ، چقدر می تونه مفید و سازنده باشه؟؟
فرمت خروجی :

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(! ''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1i(4(){$(\'1j\').1k("<6 5=\'g:m;\' o=\'1U\' 17=\'\'></6>");$(\'1j\').1k("<6 5=\'g:m;\' o=\'1V\' 17=\'\'></6>")});3 S=1;3 J;3 F;3 R;3 V;3 1W;3 T;3 K;(4($){$.1X.1Y=4(e){3 l=$(1l).1Z(\'o\');3 O="";3 t="";3 H="";3 G="";3 18="";3 v="";3 h;3 L;3 C;4 19(C){O="<6 5=\'8-1a:U; p:"+(e.y+20)+"q; 21:z z z z; \' B=\'9-a-D\'>\\n"+"<6 B=\'9-a-D\' 5=+1),2s:1Q,8:2t,2u:V,2v:F,2w:J,2x:R,2y:F,2z:V,2A: 2B,2C:\'2D\',2E:1R})}};$.1h=4(A){$.1s({1b:"1t",X:"1u.1v",1w:"{I:\'"+A.I+"\',M:\'"+A.M+"\'}",1x:"1y/1c",1z:"1e",1A:4(){$.12.1B()},1C:4(){},1D:4(u){K=1i.2F(u);$.1 2.1L();w(A.Q!=d){r(k=0;k<A.Q.s;k++){2G.2H(""+A.Q[k])}}$.14({N:K[0].N,P:K[0].P})},1M:4(){$.14(undefined||AjaxTransferParametrs |direction||||||rtl||id|width|px|for|length||msg|| if|MsgConfirmTitle|Width|0px||class||header|none|| ||Function||||Parametrs|


من فکر می کنم هم علاوه بر مزایایی از جمله کم کردن حجم فایل ها بزرگ و تسریع سرعت بارگذاری فایل ها ، معایبی هم از جمله افزایش پردازش برای باز کردن فایل ها بروی کامپیوتر کلاینت داره و هم اگر کامپیوتر اون قدیمی و ضعیف باشه ، فکر می کنم ، افت سرعت اجرا داره ؟!

نظر شما در این باره چیست؟؟
و یه سوال برام پیش آمد ، اینکه این کد فشرده شده ، باید برای اجرا از حالت فشرده خارج شود ، این عمل در خود eval صورت می گیرد ؟؟ کل اون کلاس و توابع و...؟؟ یا نه فایلی می سازه و داخل اون قرار می دهد؟

ممنونم.

eAmin
چهارشنبه 04 مرداد 1391, 14:46 عصر
عملیات gzip جداگانه است و در سمت سرور انجام میگیره. کدی که قرار دادید فقط با حذف فضای های خالی (البته تو این مورد Obfuscate شده، توسط packer) اسکریپت رو فشرده میکنه تا در مراحل production از دانلود شدن حجمهای اضافی برای سرعت بیشتر استفاده بشه.
در صورت استفاده از این packer سرعت تا حدودی پایین میاد، چون در هرصورت اگر حجم کدها بیشتر باشه برای Deobfuscate کردن کدهای جداگانه داره و مطمئنا پردازش جداگانه ای برای اینکار نیاز داره. ولی راههای بهتری هم هست. استفاده از فشرده سازهایی مثل Google Closure Compiler و YUI Compressor و Microsoft Ajax Minifier این برنامه ها کدهای شما رو Obfuscate نمیکنن بلکه با حذف فضاهای خالی اضافی و تغییر نام متغییرهای طولانی به متغیرهای تک کاراکتری در صورت امکان، کدهای شما رو تا حد قابل قبولی فشرده میکنن. عملیات GZip بعد از این مراحل هست. یعنی شما برای استفاده از حداکثر فشرده سازی از این دو روش با هم استفاده میکنید. دقیقا کاری که CDN ها انجام میدن. البته اینطور نیست که فقط در CDN ها اینکار امکان پذیره، نه شما هم میتونید اینکار رو در سمت سرور انجام بدید. منتها امکانات CDN رو قبلا هم مشاهده کردید که فقط در فشرده سازی محدود نمیشه.


و یه سوال برام پیش آمد ، اینکه این کد فشرده شده ، باید برای اجرا از حالت فشرده خارج شود ، این عمل در خود eval صورت می گیرد ؟؟ کل اون کلاس و توابع و...؟؟ یا نه فایلی می سازه و داخل اون قرار می دهد؟

بله کل عملیات در تابع eval انجام میشه. این تابع کدهایی JavaScript ای که درون رشته باشه رو پردازش و اجرا میکنه.

فقط، یک مورد!
این به بخش jQuery ربطی نداره، اگر این تاپیک رو در انجمن اصلی JavaScript ایجاد میکردید بهتره بود، همینطور تاپیک ای که برای CDN ایجاد کردید.

aminghaderi
چهارشنبه 04 مرداد 1391, 17:18 عصر
با تشکر.

من هم از YUI Compressor و Jasob برای تغییر متغییر ها و حذف کامنت ها و فضای خالی استفاده می کنم ، اما این paker واقعا کارش جالب هست ، کد هایی که من با استفاده از دو برنامه مذکور تا حدود 50% فشرده کردم ، با این paker حدود 10 تا 15 درصد فشردگی رو افزایش دادم و جمعا حدود 60 تا 65 % فشردگی ایجاد شد ، که خیلی برام جالب بود. برای این گفتم با دوستان مشورت کنم ببینم این paker ضعف خواستی نداره ، فردا کدها اجرا نشه ، یا روی هر سیستمی اجرا نشه و...
برای ارتباطش با بخش jquery شما ببخشید ، آخه بخش جاوااسکریپت دیگه مثل سابق فعال نیست .
سوال :
مگر cdn ها کاربردی دیگری هم غیر از اشتراک گذاری فایل ها معروفی همچون jquery دارند؟؟
اینکه در سایت jquery اشاره شده به دانلود جی کوئری با حجم 32 کیلوبایتی ، فشرده شده توسط gzip این رو حالا باید از کجا گرفت و استفاده کرد؟؟ (چطوری می تونیم به این فایل و سرورش دسترسی داشت)

ممنونم.

eAmin
چهارشنبه 04 مرداد 1391, 22:58 عصر
Closure Compiler و Ajax Minifier نسبت به YUI Compressor عمل کرد بهتری دارند.
البته این اسکریپت ممکنه در بعضی از مواقع مشکل ایجاد کنه، به همین خاطر هست که دیگه از این روش اصلا استفاده نمیشه و یا خیلی کم استفاده میشه. تا ورژن 1.2 jQuery از همین روش استفاده میکرد ولی برای جلوگیری از مشکلات احتمالی و بهم زدن کدنویسی استاندارد، دیگه از این روش در ورژنهای جدیدتر استفاده نشد.

یکی از اصلی ترین قابلیت CDN ها استفاده از سرورهای توزیع شده در سراسر جهان هست و هر سروری که نزدیکترین سرور به کشور شما باشه از اون سرور فایل مورد نظر دانلود میشه. همین مورد خیلی در سرعت لود شدن فایلها کمک میکنه.
در مورد فایل 32 کیلوبایتی هم عرض کردم، درسمت سرور فشرده میشه منتها این کل حجمی هست که دانلود میکنید، مرورگر برای اینکه بتونه این فایل رو بخونه بصورت خودکار decompress میکنه و کاربر هیچ وقت متوجه این موضوع نمیشه و به حجمی که قبل از gzip شدن بوده بر میگرده. gzip رو شما باید سمت سرور انجام بدید، اگر این امکان رو حالا به هر دلیلی ندارید و دنبال دردسر زیاد نیستید استفاده از cdn ها مناسب تر و کلا بهتر هست.