Kami mengukur perubahan kecepatan pemuatan situs web dalam berbagai kondisi jaringan (dan tidak hanya). Lebih nyaman sekarang

perfrunner



Halo. Saya ingin membagikan proyek saya yang telah saya lakukan dalam beberapa bulan terakhir. Ini adalah alat baris perintah sumber terbuka yang dirancang untuk mengumpulkan metrik kinerja situs web dengan mudah di berbagai lingkungan jaringan (dan tidak hanya).



Sudah menerapkan emulasi jaringan slow3g, fast3g, dan 4g, menguji dengan atau tanpa cache browser, emulasi pelambatan prosesor. Peristiwa render pertama dan terbesar, waktu yang dihabiskan untuk membuat tata letak dan menghitung ulang gaya, ukuran resource yang dimuat sebelum FCP, dan metrik berguna lainnya dikumpulkan.



Jika Anda tertarik dengan detailnya, sedikit kode dan sedikit tentang aturan CSS baru yang akan muncul di Chrome 85, silakan ikuti saya!



Untuk apa?



Saat instrumen baru muncul, pertanyaan nomor satu adalah "Mengapa?" Masalah apa yang Anda coba selesaikan (selain "karena saya bisa")?



Jadi mari kita mulai dengan masalahnya. Saat itu bulan Mei, saya mencoba untuk mengoptimalkan pemuatan satu aplikasi di React.JS dan, sejujurnya, saya sedikit lelah. Lelah kenapa? Karena untuk setiap bersin saya membutuhkan:



  • Pilih parameter jaringan (misalnya fast-3g)
  • Mulai membuat profil
  • ,


. , ? 12 . … , , - , , , :



perfrunner bagaimana semuanya dimulai



, , , . , , , . Perfrunner , ( ) .



?



( "--"), Perfrunner



  • . : online/regular4g/fast3g/hspa/slow3g. , , 100% . - .
  • . . . .
  • . , . - React. , Angular .
  • . , ( ), Perfrunner 3 . , --runs. requiredPositiveInteger, , , .


, , Perfrunner ( , ) . :



npx drag13.io --network slow-3g fast-3g hspa regular-4g online --cache true false


Perfrunner 24 , , HTML . , .



. :



  • first-contentful-paint, largest-contentful-pain, dom-interactive -. - c .
  • layout duration, script duration, recalculate-style-duration. ( ) .
  • , FCP. .
  • , .
  • , .


():



reporter perfrunner untuk fast-3g



jQuery . , CSS index.html SPA , preload prefetch, lazy-loading . 100 , , , slow-3g. , β€” - , , localhost.



, , .



?



. TypeScript, Lerna 3 – CLI, Reporters Core



CLI - command-line-args. , , slow3g:



export const Slow3g: NetworkSetup = {
  downloadThroughput: (0.4 * 1024 * 1024) / 8,
  uploadThroughput: (0.4 * 1024 * 1024) / 8,
  latency: 2000,
  name: "slow3g",
};


Reporters . HTML, JSON CSV . HTML , --reporter JSON, CSV , :



//reporer.js
module.exports = (outputFolder, data, args) =>
  console.log(outputFolder, JSON.stringify(data), args);


npx perfrunner drag13@io --reporter "./reporter.js"


HTML Parcel Mustache. , c Parcel , . TypeScript, . ( ) parcel-plugin-inline-source. ( , Parcel ` "), - . Chart.JS, , , .



Core. Puppeter , . , , ( ):



import puppeteer, { Browser, Page } from "puppeteer";

const browser = await puppeteer.launch({ headless: true, timeout: 60000 });
const page = await browser.newPage();

await page.setCacheEnabled(false);
await pageSession.send("Network.setCacheDisabled", { cacheDisabled: true });
await pageSession.send("Network.enable");
await pageSession.send("Network.emulateNetworkConditions", {
  latency: 20,
  downloadThroughput: 500000,
  uploadThroughput: 50000,
  offline: false,
});
await pageSession.send("Emulation.setCPUThrottlingRate", { rate: 4 });
await pageSession.send("Performance.enable");

await page.goto(url.href, { waitUntil: "networkidle0" });
const metrics = await page.metrics();
const entries = await page.evaluate(() =>
  JSON.stringify(performance.getEntries())
);
return { metrics, entries };


, , , .



, , largest-contentfull-paint performance.getEntries(), . . , , JavaScript- (, , ), , , . , , , . . (mimetype) ( , ).



, , . , , .



«» , . , , , , ( ). TTFB, Stalled , 1200-1500ms. Proxy, - Windows . , wtf/sec .



chai + mocha preversion prepublish husky. , hasky lint-staged, prepush prettier. CI/CD β€” Travis CI.



Content-Visiblity



- . , , Chrome 85 , , css β€” content-visibility. , , , , . , β€” . , .



Canary Chrome Puppeteer, , , headless . Perfrunner .



npx perfrunner "https://drag13.io" --network slow-3g fast-3g regular-4g --cache true false --executable-path" "C:\Users\ACCOUNT_NAME\AppData\Local\Google\Chrome SxS\Application\chrome.exe" --no-headless


:



Network Cache FMP before (ms) FMP after (ms) Diff (ms)
slow-3g false 4358 4267 91
slow-3g true 2953 2857 96
fast-3g false 421 329 92
fast-3g true 221 122 99
regular-4g false 316 223 93
regular-4g true 221 123 98


, 90ms 100ms 700 ( ) CoreI7 . .





, . . Perfrunner- Puppeter . β€” . , Perfrunner --chrome-args, --ignore-default-args , , --executable-path .



().



. jQuery critical CSS . , , .



, , . readme. . β€” perfrunner.config , , , commitizen.



, , , . .



P.S. C veri-ivanova raharrison .

P.P.S. ( ),




All Articles