تفاعل وأداء و -500 مللي ثانية في البداية - تاريخ التحسينات بالأرقام

السيطرة على الخط الأحمر


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


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


بالحديث عن رد فعل. مع اختيار الإطار ، اتضح أنه مضحك. اقترحت Angular ، حيث كان لدينا بالفعل مكتبة مكونة مكتوبة جزئيًا ، لكن العميل طلب رد الفعل ، لأن "الدورة العامة قد اتخذت من أجل رد الفعل" ، "سنكون جميعًا هناك" وبشكل عام. ولكن بعد البداية ، اتضح أن رد الفعل ، فجأة ، "عفا عليه الزمن للغاية" والآن يتم أخذ المسار العام في Vue. ضحكنا ، ودعونا مشروع الإرث الحالي واستمرنا في الكتابة.


. — react-router-dom, — mobx. — SCSS ( ) + css.modules . . , . "-" PureComponent React.memo, bundlesize + source-map-explorer. , .


, *. - mobile-first, client-facing, . . — . . . , , - UI . , , , + . Server Side Rendering. , , , .NET, . — .


* , ?


0,


- , , . , ( — 1000ms) Performance Audit devtools (online 4x CPU slowdown). :


  • Firts Paint (FP): 618ms
  • First Meaningful Paint (FMP): 2090ms

FP , (), FMP , UI ( ) - . , , 1000 ms (+) . , , . . — 4g* fast 3g **.


EventWIFI4GFast 3G
First Paint618ms815ms2389ms
First Contentful Paint2090ms2270ms3811ms

, 4g — 2270ms . , , , .


* 4g preset- - . — : download 4000kb/s, upload 3000kb/s, latency 20ms:
** *** , .
*** -, 3 , 10. , — , .


1, React.lazy


, . :


Index.html, React, . js — . , . , , . , .


, *, . — React.lazy, , . , lazy , , . .


:


EventWIFI4GFast 3G
FP658ms (+6%)791ms (-3%)2258ms (-5%)
FMP2135ms (+2%)2286ms ( )3725ms (-3%)

( ). , , , . ? shared , App.tsx. . , .


* , .


2, Core LazyComponent


, shared module . shared core , , — , , - .


, , , React.Lazy. "" , . , . , . : , . :


export const LazyComponent = <T extends {}>(importStatement: () => Promise<{ default: ComponentType<T> }>) => {
    const component = React.lazy(importStatement);
    return { component, load: importStatement };
};

:


EventWIFI4GFast 3G
FP487ms (-21%)570ms (-30%)1829ms (-23%)
FMP1965ms (-6%)2048ms (-10%)3468ms (-9%)

, , , 400ms fast3g - . . .


3, Spinner


, , . , ? "" ! , index.html , . index.html "" ? , . css, .


EventWIFI4GFast 3G
FP212ms (-56%)226ms (-60%)845ms (-53%)
FMP2150ms (+9%)2387ms (+17%)4593ms (+32%)

? , FP . FMP? :


// AppComponent.load();

. , .


EventWIFI4GFast 3G
FP208 (-57%)221 (-61%)782 (-57%)
FMP2002 (-2%)2065 ( )3487 ( )

, fast3g. , , , , - .


4,


. … ! , . / index.html . . . Fetch IE ( ), promise . . .


index.html :


(function(){const path = `${window.app.api}`; window.app.data = fetch(path); }());

. , promis- , , . — . , index.html .


:


EventWIFI4GFast 3G
FP245ms (+17%)219ms ( )786ms ( )
FMP1740ms (-13%)1735ms (-16%)3441ms (-1%)

. 300ms . , . , . , .


, API , . preconnect, API. Preconnect IE 11


.


5,


, ? , , . . , ?


LazyComponent ( , ), suspense, . :


EventWIFI4GFast 3G
FP262ms (+7%)387ms (+76%)1630ms (+107%)
FMP1729ms ( )1826ms (+5%)3280ms (-4%)

FP ( ). FMP . ? — - , , . , JS , index.html . :


تأخير CSS


.


, css. - , , CSS . JS ( ). ? — . , CSS JS . , css , JS ( , ), CSS , JS .


6,


. — .


, , , . … , . ! , font-weight 100 .


, , :


  • . . . - .
  • ( 5-6 , HTTP v 1.x)
  • . , .
  • , , .

( , , JS).


. , . . , font-swap ( , ). , LightHouse .


. link/preload:


<link rel="preload" href="best_font_ever.otf" as="font" type="font/otf" crossorigin="anonymus">


EventWIFI4GFast 3G
FP136ms (-44%)201ms (-8%)666ms (-15%)
FMP1519ms (-12%)1418ms (-18%)3743ms (+8%)

, fast3g (, ). , . , . , UI - .


, :


EventWIFI4GFast 3G
FP-480ms-614ms-1700ms
FMP-570ms-852ms-68ms

500-850ms . , "" .


7,


defer (- page speed LightHouse ), , , .


, (0.5 1 - index.html) ( 480ms 1700ms), 500-800ms . , .


():



, .


, :


  1. ( )
  2. Brotli, gzip.
  3. HTTP2.0.

Jeff Cooper .


. ? . . // ( , ). - Google latency 100-400ms, 0.2%-0.6% ( ). CloudFlare , 2.4ms 3.3ms 0.4%, . . , , .


!


All Articles