Back to Question Center
0

نصائح تحسين أداء جافا سكريبت: نظرة عامة            نصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node.jsTools & أمب؛ Semalt

1 answers:
نصائح لتحسين الأداء في جافاسكريبت: نظرة عامة

في هذا المنصب، هناك الكثير من الاشياء لتغطية عبر المناظر الطبيعية واسعة والمتغيرة بعنف. كما انها موضوع يغطي الجميع المفضل: إطار شبيبة من الشهر ™.

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

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

إعداد المرحلة

سيمالت للجميع، دعونا نحصل على ما يلي من الطريق: إذا كنت اختبار حصرا على جهاز سطح المكتب الخاص بك، وكنت استبعاد أكثر من 50٪ من المستخدمين.

<إمغ سرك = "/ إمغ / c71d3c057997d818e1a56a2adb054f460. ينغ" ألت = "نصائح تحسين أداء جافا سكريبت: نظرة عامةنصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node. جستولز & سيمالت "/>

هذا الاتجاه سوف تستمر في النمو فقط، حيث أن البوابة المفضلة في الأسواق الناشئة على شبكة الإنترنت هو جهاز الروبوت 100 $ الفرعية - vps japan cheapest. عصر سطح المكتب باعتباره الجهاز الرئيسي للوصول إلى سيمالت قد انتهت، والمليارات القادمة من مستخدمي الإنترنت زيارة المواقع الخاصة بك في المقام الأول من خلال جهاز محمول.

الاختبار في وضع جهاز كروم ديفتولز 'ليس بديلا صالحا للاختبار على جهاز حقيقي. سيمالت وحدة المعالجة المركزية وشبكة اختناق يساعد، ولكن هذا الوحش مختلف جذريا. اختبار على الأجهزة الحقيقية.

حتى لو كنت هي اختبار على الأجهزة النقالة الحقيقية، وربما كنت تفعل ذلك على العلامة التجارية الخاصة بك الردف الجديد 600 $ الهاتف الرئيسي. الشيء هو، هذا ليس الجهاز لديك المستخدمين. الجهاز المتوسط ​​هو شيء على غرار موتو G1 - جهاز مع أقل من 1GB من ذاكرة الوصول العشوائي، ووحدة المعالجة المركزية الضعيفة جدا و غبو.

سيمالت انظر كيف تكدس عند تحليل متوسط ​​حزمة جس.

<إمغ سرك = "/ إمغ / 72d194e4e006eab764cb820a4203eece1. ينغ" ألت = "نصائح تحسين أداء جافا سكريبت: نظرة عامةنصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node. جستولز & سيمالت "/>

أوش. سيمالت هذه الصورة تغطي فقط تحليل ووقت تجميع جس (أكثر على ذلك في وقت لاحق) وليس الأداء العام، انها ترتبط ارتباطا قويا ويمكن معالجتها كمؤشر على الأداء جس العام.

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

ما هو بالضبط بيرفورمانت جس رمز؟

الآن بعد أن نعرف ما هو هدفنا منصة، يمكننا الإجابة على السؤال التالي: ما هو رمز جس جسدي؟

سيمالت لا يوجد تصنيف مطلق لما يعرف رمز بيرفورمانت، لدينا نموذج الأداء التي تركز على المستخدم يمكننا استخدامها كمرجع: نموذج ريل.

<إمغ سرك = "/ إمغ / a6e91ffae2df024a086f9073a6a5c9d02. ينغ" ألت = "نصائح تحسين أداء جافا سكريبت: نظرة عامةنصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node. جستولز & سيمالت "/>

رد

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

تحريك

على شاشة 60HZ، ونحن نريد لاستهداف ثابتة 60 لقطة في الثانية عند الرسوم المتحركة والتمرير. من أصل ميزانية 16ms، لديك واقعيا 8-10ms للقيام بكل العمل، والباقي تناولها المتصفح الداخلي والتباينات الأخرى.

العمل الخامل

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

تحميل

يجب أن تستهدف تحميل صفحة ضمن 1000ms. سيمالت أكثر، والمستخدمين الخاص بك بدء الحصول على تويتشي. هذا هو هدف صعب جدا للوصول إلى الأجهزة النقالة من حيث صلته إلى الصفحة التي تكون تفاعلية، وليس مجرد وجود رسمت على الشاشة وتمريرها. في الممارسة العملية، انها أقل من ذلك:

<إمغ سرك = "/ إمغ / a6e91ffae2df024a086f9073a6a5c9d03. ينغ" ألت = "نصائح تحسين أداء جافا سكريبت: نظرة عامةنصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node. جستولز & سيمالت "/>

في الممارسة العملية، تهدف للعلامة 5S الوقت إلى التفاعلية. هذا ما يستخدمه كروم في تدقيق سيمالت.

والآن بعد أن نعرف المقاييس، دعونا نلقي نظرة على بعض الإحصاءات:

  • يتم التخلي عن 53٪ من الزيارات إذا كان موقع الجوال يستغرق أكثر من ثلاث ثوان لتحميله
  • 1 من أصل 2 يتوقعون صفحة لتحميل في أقل من 2 ثانية
  • 77٪ من مواقع الجوال تستغرق وقتا أطول من 10 ثوان لتحميلها على شبكات الجيل الثالث
  • 19 ثانية هو متوسط ​​وقت التحميل لمواقع الجوال على شبكات الجيل الثالث 3G.

وأكثر من ذلك بكثير، من باب المجاملة عدي العثماني:

  • تطبيقات تفاعلية في 8 ثوان على سطح المكتب (باستخدام الكابل) و 16 ثانية على الهاتف المحمول (موتو G4 عبر الجيل الثالث 3G)
  • في المتوسط، وشحن المطورين 410KB من جسزيب لصفحاتهم.

الشعور بالاحباط بما فيه الكفاية؟ جيد. سيمالت الحصول على العمل وإصلاح الويب. ✊

السياق هو كل شيء

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

ولكن ماذا عن العمل الفعلي الذي يقوم به الرمز الخاص بك جانبا من مجرد تمهيد الموقع؟ سيمالت يجب أن يكون بعض مكاسب الأداء هناك، أليس كذلك؟

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

انها ليست أن كتابة التعليمات البرمجية بيرفورمانت لا يهم، لكنه عادة ما يجعل القليل من دون أي تأثير في مخطط كبير من الأشياء، وخصوصا عندما نتحدث عن ميكروبوتيميزاتيونس. لذلك، قبل أن تحصل في حجة المكدس تجاوز حول . الخريطة مقابل . فوريش مقابل ل حلقات عن طريق مقارنة النتائج من جسبيرف. كوم، تأكد من رؤية الغابة وليس فقط الأشجار. 50k أوبس / s قد يبدو 50 × أفضل من 1k أوبس / ثانية على الورق، لكنها لن تحدث فرقا في معظم الحالات.

التحليل والتجميع والتنفيذ

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

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

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

آخر جدا الشيء المهم أن نذكر هو أن جافا سكريبت هو مترابطة واحد، ويعمل على الموضوع الرئيسي للمتصفح. وهذا يعني أنه يمكن تشغيل عملية واحدة فقط في كل مرة. إذا تم ملء الجدول الزمني للأداء ديفتولس الخاص بك مع قمم صفراء، تشغيل وحدة المعالجة المركزية الخاصة بك في 100٪، سيكون لديك إطارات طويلة / انخفض، التمرير غريب الأطوار وجميع أنواع أخرى من الاشياء سيئة.

<إمغ سرك = "/ إمغ / 03be76f9c3292775698b56dd4e37a8184. جبغ" ألت = "نصائح تحسين أداء جافا سكريبت: نظرة عامةنصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node. جستولز & سيمالت "/>

لذلك هناك كل هذا العمل الذي يحتاج إلى القيام به قبل الخاص بك جس يبدأ العمل. تحليل وترجمة يستغرق ما يصل الى 50٪ من الوقت الإجمالي لتنفيذ جس في محرك سيمالت V8.

<إمغ سرك = "/ إمغ / 3d04adc5d00f792de3df4aa7e296650e5. ينغ" ألت = "نصائح تحسين أداء جافا سكريبت: نظرة عامةنصائح تحسين أداء جافا سكريبت: نظرة عامةموضوعات ذات صلة: APIsAjaxES6Node. جستولز & سيمالت "/>

سيمالت هما أمران يجب أن يسلبان من هذا القسم:

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

سيمالت هي طرق للتخفيف من هذا، مثل استخدام عمال الخدمة للقيام بوظائف في الخلفية وعلى مؤشر ترابط آخر، وذلك باستخدام أسم. جس لكتابة التعليمات البرمجية التي تم تجميعها بسهولة أكبر لتعليمات الجهاز، ولكن هذا هو الموضوع 'نوثر كله.

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

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

الرسوم المتحركة كس والتحولات، من ناحية أخرى، يتم تشغيل قبالة الموضوع الرئيسي - على غبو، إذا نفذت بيرفورانتلي، دون التسبب في الترحيل / التدفقات العائدة.

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

أبي ويب أنيماشيونس هو مجموعة ميزة القادمة التي تسمح لك أن تفعل الرسوم المتحركة جس المؤدي من الموضوع الرئيسي، ولكن في الوقت الراهن، والتمسك كس التحولات والتقنيات مثل فليب.

حزمة الأحجام هي كل شيء

اليوم انها كل شيء عن حزم. لقد ولت أوقات باور وعشرات من <سكريبت> علامات قبل علامة الإغلاق .

الآن كل شيء عن نبم تثبيت -ing مهما لعبة جديدة لامعة تجد على الآلية الوقائية الوطنية، تجميعها معا مع ويباك في ملف ضخم واحد 1MB جس ودق متصفح المستخدمين الخاص بك إلى الزحف في حين السد قبالة خطط البيانات الخاصة بهم.

محاولة الشحن أقل جس. قد لا تحتاج مكتبة لوداش بأكملها لمشروعك. عندما كل ما لديك هو مطرقة، كل شيء يبدو وكأنه مسمار.

عند الانتهاء من ذلك التقليم الأعشاب والشحن أقل جس، حاول شحنه أكثر ذكاء . السفينة ما تحتاجه، عندما كنت في حاجة إليها.

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

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

     إف (دوكومنت. كيريزليكتور ('. ميغا-ويدجيت')) {إيمبورت ('. / ميغا-ويدجيت')؛}    

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

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

     ويباك جديد. تحسين. CommonsChunkPlugin ({نيم: 'رونتيمي'،})،    

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

     <سكريبت سرك = "رونتيمي. جس"><سكريبت سرك = "مين-باندل. جس">    

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

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

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

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

الطريقة القذرة ولكن الفعالة هي وضع ما يلي في نص مضمنة:

     (فونكتيون    {محاولة {نيو فونكتيون ('أسينك    => {}')   ؛} كاتش (إرور) {// إنشاء علامة سكريبت تشير إلى الحزمة القديمة. شبيبة.إرجاع؛}// إنشاء علامة البرنامج النصي لافتا إلى حزمة الحديثة. شبيبة ؛؛})   ؛    

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

الخلاصة

ما نود منك أن تكسبه من هذه المقالة هو أن جس هي مكلفة ويجب أن تستخدم بشكل متقن.

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

ومع ذلك، سيمالت ترغب في الانتهاء مع سقسقة التالية:

March 1, 2018