هل يجب علي استخدام ضاغط YUI أو مترجم Google Linure الجديد لضغط JavaScript الخاص بي؟

StackOverflow https://stackoverflow.com/questions/1686428

سؤال

كان ضاغط YUI أفضل أداة للتقليل، لكن الإغلاق يبدو أنه قد يكون أفضل.

هل كانت مفيدة؟

المحلول

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

هذا لا يعني أنك لا ينبغي أن تستخدم الإغلاق .... فقط جولتي حول القول، لا أعتقد أن هناك إجابة متاحة لهذا حتى عدد من الأشخاص الذين استخدموا 2 والمقارنة معهم.

تحرير: هناك بضع مقارنات مبكرة، قائلة إن الإغلاق يعطي تحسنا:http://blog.feedly.com/2009/11/06/google-closure-vs-yui-min/
http://news.ycombinator.com/item؟id=924426.

مزيد من التحرير: يستحق إبقاء العين على قائمة العدد للإغلاق: http://code.google.com/p/closure-compiler/issues/list.

نصائح أخرى

من المقارنات التي رأيتها، يبدو أن الإغلاق هو الفائز الواضح من حيث تقليل حجم الملف. تستخدم هذه المقالة ثلاثة مكتبات JS شهيرة (مسج، النموذج الأولي، Mootools) لمقارنة الضغط بين محمول YUI ضاغط وإغلاق:http://www.bloggingdeveloper.com/post/closure-compiler-vs-yui-compressor-comparing-the-javas-compression-tools.aspx.

يخرج الإغلاق في المقدمة في كل اختبار، خاصة في وضعه المتقدمة، حيث "يقلل من حجم التعليمات البرمجية حوالي 20-25٪ أكثر من ضاغط YUI من خلال توفير ضغط ما يقرب من 60٪."

يمكن استخدام الإغلاق في الوضع البسيط أو الوضع المتقدم. الوضع البسيط آمن إلى حد ما لمعظم رمز JavaScript، لأنه يعيد تسمية المتغيرات المحلية فقط في وظائف للحصول على مزيد من الضغط.

الوضع المتقدم أكثر عدوانية. سيقوم بإعادة تسمية المفاتيح في حرفيات الكائنات، وظائف وظيفة مضمنة إذا كان يمكن أن تحدد أنهم يرجعون القيم البسيطة دون أي آثار جانبية.

علي سبيل المثال:

function Foo()
{
  return "hello";
}

alert(Foo());

يترجم إلى:

alert("hello");

وهذا الرمز:

var o = {First: "Mike", Last: "Koss"};
alert(o);

يترجم إلى:

alert({a:"Mike",b:"Koss"});

يمكنك منع الوضع المتقدمة من تغيير القيم الرئيسية في حرفيات الكائنات عن طريق نقلا عن أسماء مثل هذا:

{'First': "Mike", 'Last': "Koss"}

يمكنك تجربة هذه الأمثلة وغيرها من الأمثلة في Google التفاعلية إغلاق مترجم الموقع.

يشبه jQuery 1.5. انتقل للتو إلى uglifyjs.:

بالإضافة إلى ذلك مع هذا التبديل، انتقلنا إلى استخدام UglifyJs من محمول إغلاق Google. لقد رأينا بعض تحسينات حجم الملفات الصلبة أثناء استخدامه لذلك نحن سعداء جدا بالتبديل.

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

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

أنا أتكلم عن تجميع متقدم وضع هنا، تجميع بسيط وضع كما أشار البعض آمن إلى حد ما للاستخدام.

وهنا رأي مختلف - جوجل إغلاق؟ انا لست مندهشا. وبعد ربما تكون القاسية قليلا جدا، ولكن قراءة لطيفة. أعتقد أن الوقت فقط سيحكي أيهما أفضل =)

اعتبارا من أكتوبر 2012، يبدو أن ضاغط YUI مهملا الآن، أو لم يعد على الأقل سيستخدم في YUI: http://www.yuiblog.com/blog/201/10/16/state-of-yui-compressor/

يمكنك إجراء بعض الاختبارات هنا، ونرى ما هو أفضل في كل متصفح:http://jsperf.com/closure-vs-yui.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top