Seorang pembangun mendapati bahawa menyambungkan penyahpepijat (debugger) Chrome DevTools melalui Playwright atau Puppeteer memperlahankan muat naik berasaskan fetch sebanyak lebih daripada 20 kali ganda, mengubah penanda aras prestasi harian menjadi data yang mengelirukan.

Teka-teki yang mencetuskan penyiasatan

Coffer, sebuah stor fail berasaskan pelayar yang menyulitkan data sebelum menghantarnya ke pelayan, secara rutin melakukan muat naik kelas gigabit melalui rangkaian tempatan. Apabila pasukan mengukur kelajuan muat naik, mereka melihat jurang: muat turun memenuhi kapasiti pautan, tetapi muat naik merangkak pada kira-kira satu per lapan daripada lebar jalur yang tersedia. Percanggahan ini mendorong tiga pusingan perubahan kod yang gagal membuahkan hasil, sehinggalah "pembaikan" keempat kelihatan memberikan lonjakan besar—hanya untuk hilang apabila penyahpepijat dialihkan.

Apa yang dicuba oleh pasukan terlebih dahulu

Jurutera mengejar suspek biasa:

  • Saiz chunk – Menggandakan blok daripada 16 MiB kepada 32 MiB tidak mengubah daya pemprosesan (throughput).
  • Pipelining – Menindih penyulitan blok seterusnya dengan muat naik semasa memberikan peningkatan kecil sebanyak 13%, yang tidak dapat dibezakan daripada hingar pengukuran (measurement noise).
  • Concurrency – Menjalankan beberapa muat naik secara selari dihadkan pada jumlah kelajuan yang sama, menunjukkan adanya had global.

Tiada satu pun daripada variasi ini menjelaskan kelembapan 8× tersebut.

Perbandingan bersemuka yang mengejutkan

Untuk mengasingkan masalah tersebut, pasukan menukar pelaksanaan klien. Menggunakan .NET HttpClient, mereka merekodkan 700 Mbps pada rangkaian yang sama; permintaan yang sama yang dikeluarkan daripada API fetch() Chromium tersekat pada 140 Mbps. Kontras yang ketara itu menunjukkan timbunan rangkaian (network stack) pelayar sebagai punca—sehinggalah eksperimen seterusnya membuktikan sebaliknya.

Kos tersembunyi penyahpepijat

Playwright dan Puppeteer menggerakkan Chrome melalui Chrome DevTools Protocol (CDP). Protokol tersebut menyambungkan penyahpepijat ke proses pelayar, mendedahkan peristiwa rangkaian, tangkapan skrin (snapshot) DOM, dan log konsol. Pasukan menjalankan ujian terfokus: satu panggilan fetch() yang menghantar muatan (payload) Uint8Array, sekali dengan penyahpepijat CDP yang disambungkan dan sekali lagi tanpanya.

  • Penyahpepijat disambungkan: 113 Mbps

Kehadiran penyahpepijat mengurangkan kelajuan muat naik sebanyak lebih daripada 20 ×. Ujian manual dalam tetingkap Edge biasa—tanpa penyahpepijat disambungkan—mencapai 600 + Mbps, mengesahkan bahawa pelayar itu sendiri boleh mengendalikan trafik apabila tidak terbeban.

Penambahbaikan sebenar yang sederhana

Walaupun penyahpepijat menyumbang kepada sebahagian besar kelembapan tersebut, pasukan masih menemui pengoptimuman yang tulen: menukar badan permintaan daripada Uint8Array kepada Blob meningkatkan kelajuan Chromium sebanyak kira-kira 30 %. Ia adalah pelarasan yang berguna, tetapi jauh daripada lonjakan "ajaib" yang diharapkan pada asalnya.

Mengapa ini penting kepada jurutera

  • Instrumen boleh menipu. Alat prestasi yang mengautomasikan pelayar adalah sebahagian daripada rantaian pengukuran itu sendiri.
  • Penanda aras yang kelihatan mustahil memerlukan pemeriksaan logik (sanity check). Jika angka menyimpang jauh daripada kapasiti rangkaian, persekitaran pengukuran harus menjadi suspek pertama.
  • Keputusan sifar adalah berharga. Mengesahkan bahawa sesuatu perubahan tidak memberikan kesan dapat mengelakkan pembaziran usaha mengejar pepijat fantom.
  • Kawalan manual adalah insurans yang murah. Menjalankan operasi yang sama dalam tetingkap pelayar biasa boleh mendedahkan lebihan (overhead) instrumentasi yang tersembunyi.

Pandangan balas: apabila penyahpepijat tidak boleh diabaikan

Penyahpepijat memberikan keterlihatan terhadap tingkah laku halaman, jejak ralat, dan garis masa rangkaian yang sukar dicapai dengan cara lain. Untuk ujian regresi, audit keselamatan, atau interaksi UI yang kompleks, menyambungkan penyahpepijat CDP selalunya tidak boleh dielakkan. Kuncinya adalah untuk memisahkan ujian fungsian daripada pengukuran prestasi mentah, dan untuk menyahaktifkan penyahpepijat apabila pengukuran prestasi adalah matlamatnya.

Rumusan: Alat yang membolehkan ujian automatik juga boleh menjadi punca utama herotan prestasi. Sebelum menyalahkan pelayar, rangkaian, atau kod, sahkan bahawa tiada penyahpepijat yang sedang memperlahankan aliran data secara senyap.