Rumah hujung hadapan web tutorial js Ujian Prestasi Mikro JavaScript, Sejarah dan Had

Ujian Prestasi Mikro JavaScript, Sejarah dan Had

Sep 11, 2024 am 06:42 AM

JavaScript Micro Performance Testing, History, and Limitations

Saya rasa pengoptimuman prestasi menarik minat ramai pembangun kerana mereka mempelajari lebih lanjut tentang cara yang berbeza untuk menyelesaikan tugas. Beberapa suara dalaman bertanya, "Cara mana yang terbaik?" Walaupun terdapat banyak peralihan metrik untuk "terbaik", seperti JavaScript 2008 Douglas Crockford: The Good Parts, prestasi boleh diakses kerana kami boleh mengujinya sendiri.

Walau bagaimanapun, menguji dan membuktikan prestasi tidak selalunya mudah untuk diperbaiki.

Sedikit Sejarah

Perang Pelayar

Menjelang awal 2000-an, Internet Explorer telah memenangi perang pelayar pertama. IE ialah penyemak imbas lalai pada Mac untuk seketika. Netscape yang pernah dominan telah dijual kepada AOL dan akhirnya ditutup. Mozilla spin-off mereka berada dalam versi beta selama bertahun-tahun untuk penyemak imbas kendiri baharu mereka Phoenix Firebird Firefox.

Pada tahun 2003 Opera 7 keluar dengan Presto, enjin pemaparan baharu yang lebih pantas. Apple juga mengeluarkan Safari, pelayar berfokuskan prestasi untuk Mac yang dibina pada enjin Konqueror KHTML yang kurang dikenali. Firefox dilancarkan secara rasmi pada tahun 2004. Microsoft mengeluarkan IE 7 pada tahun 2006, dan Opera 9 mengeluarkan enjin JavaScript yang lebih pantas. 2007 membawa Safari pada kedua-dua Windows dan iPhone baharu. 2008 melihat Google Chrome dan penyemak imbas Android.

Dengan lebih banyak penyemak imbas dan lebih banyak platform, prestasi merupakan bahagian penting dalam tempoh ini. Versi penyemak imbas baharu kerap mengumumkan bahawa ia adalah penyemak imbas terpantas baharu. Penanda aras seperti SunSpider Apple dan Kraken Mozilla sering disebut dalam keluaran dan Google mengekalkan suite ujian Octane mereka sendiri. Pada tahun 2010, pasukan Chrome juga membuat satu siri percubaan "ujian kelajuan" untuk menunjukkan prestasi penyemak imbas.

JavaScript Prestasi Tinggi

Ujian Prestasi Mikro mendapat banyak perhatian pada tahun 2010-an. Web telah beralih daripada interaktiviti pada halaman terhad kepada Aplikasi Halaman Tunggal sebelah pelanggan penuh. Buku seperti JavaScript Prestasi Tinggi 2010 Nicholas Zakas menunjukkan bagaimana pilihan reka bentuk dan amalan pengekodan yang kelihatan kecil boleh memberi kesan prestasi yang bermakna.

Perubahan Malar

Tidak lama kemudian, persaingan enjin JavaScript menangani beberapa kebimbangan prestasi utama ini dalam JavaScript Prestasi Tinggi, dan perubahan pantas dalam enjin menyukarkan untuk mengetahui apa yang terbaik sekarang. Dengan versi penyemak imbas baharu dan peranti mudah alih di sekeliling, ujian prestasi mikro menjadi topik hangat. Menjelang 2015, tapak ujian prestasi yang ditutup sekarang jsperf.com menjadi begitu popular sehingga mula mengalami masalah prestasinya sendiri disebabkan oleh spam.

Uji Perkara Yang Betul

Dengan enjin JavaScript yang berkembang, adalah mudah untuk menulis ujian, tetapi sukar untuk memastikan ujian anda adil malah sah. Jika ujian anda menggunakan banyak memori, ujian kemudian mungkin melihat kelewatan daripada pengumpulan sampah. Adakah masa persediaan dikira atau dikecualikan daripada semua ujian? Adakah ujian itu menghasilkan output yang sama? Adakah konteks ujian itu penting? Jika kami menguji !~arr.indexOf(val) vs arr.indexOf(val) === -1 adakah ia membuat perbezaan jika kami hanya menjalankan ungkapan atau menggunakannya dalam keadaan if?

Pengoptimuman Pengkompil

Memandangkan jurubahasa skrip digantikan dengan pelbagai penyusun, kami mula melihat beberapa faedah — dan kesan sampingan — kod yang disusun: pengoptimuman. Kod berjalan dalam gelung yang tidak mempunyai kesan sampingan, contohnya, mungkin dioptimumkan sepenuhnya.

// Testing the speed of different comparison operators
for (let i = 0; i < 10000; i += 1) {
  a === 10;
} 
Salin selepas log masuk

Oleh kerana ini menjalankan operasi 10000 kali tanpa keluaran atau kesan sampingan, pengoptimuman boleh membuangnya sepenuhnya. Namun, itu bukan jaminan.

Sasaran Bergerak

Selain itu, pengoptimuman mikro boleh berubah dengan ketara dari keluaran ke keluaran. Penutupan malang jsperf.com bermakna berjuta-juta perbandingan ujian sejarah ke atas versi penyemak imbas yang berbeza telah hilang, tetapi ini masih boleh kita lihat hari ini dari semasa ke semasa.

Perlu diingat bahawa ujian prestasi pengoptimuman mikro disertakan dengan banyak kaveat.

Apabila peningkatan prestasi mula meningkat, kami melihat keputusan ujian melantun. Sebahagian daripada ini ialah peningkatan dalam enjin, tetapi kami juga melihat enjin mengoptimumkan kod untuk corak biasa. Walaupun penyelesaian berkod yang lebih baik wujud, terdapat manfaat sebenar kepada pengguna dalam mengoptimumkan corak kod biasa dan bukannya mengharapkan setiap tapak membuat perubahan.

Peralihan Landskap

Lebih teruk daripada prestasi penyemak imbas yang berubah-ubah, 2018 menyaksikan perubahan pada ketepatan dan ketepatan pemasa untuk mengurangkan serangan pelaksanaan spekulatif seperti Spectre dan Meltdown. Saya menulis artikel berasingan tentang isu masa ini, jika itu menarik minat anda.

Pisah Fokus

Untuk merumitkan perkara, adakah anda menguji dan mengoptimumkan penyemak imbas terkini atau penyemak imbas yang paling rendah disokong projek anda? Begitu juga, apabila telefon pintar semakin popular, peranti pegang tangan dengan kuasa pemprosesan yang kurang ketara menjadi pertimbangan penting. Mengetahui tempat untuk memperuntukkan masa anda untuk hasil terbaik – atau hasil paling berkesan – menjadi lebih sukar.

Pengoptimuman Pramatang?

Pengoptimuman pramatang ialah punca segala kejahatan.
-- Donald Knuth

Ini disebut dengan kerap. Orang menggunakannya untuk mencadangkan bahawa setiap kali kita berfikir tentang pengoptimuman, kita mungkin membuang masa dan memburukkan kod kita demi keuntungan khayalan atau tidak penting. Ini mungkin benar dalam banyak kes. Tetapi ada lagi petikan:

Kita harus melupakan kecekapan kecil, katakan kira-kira 97% masa: pengoptimuman pramatang adalah punca segala kejahatan. Namun kita tidak seharusnya melepaskan peluang kita dalam 3% kritikal itu.

Petikan yang lebih lengkap menambah konteks kritikal. Kita boleh menghabiskan banyak masa untuk kecekapan kecil jika kita membenarkan diri kita melakukannya. Ini selalunya mengambil masa daripada matlamat projek tanpa memberikan banyak nilai.

Pulangan semakin berkurangan

Saya secara peribadi menghabiskan banyak masa untuk pengoptimuman ini, dan pada masa ini ia tidak kelihatan seperti satu pembaziran. Tetapi jika difikirkan semula, tidak jelas berapa banyak kerja itu berbaloi. Saya pasti beberapa kod yang saya tulis ketika itu telah mencukur milisaat daripada masa pelaksanaan, tetapi saya tidak dapat benar-benar mengatakan jika masa yang disimpan itu penting.

Google malah bercakap tentang pulangan yang semakin berkurangan dalam persaraan 2017 mereka bagi suite ujian Octane. Saya amat mengesyorkan agar anda membaca siaran ini untuk mendapatkan gambaran yang baik tentang batasan dan masalah dalam pengoptimuman prestasi yang dialami oleh pasukan yang berdedikasi untuk kerja tersebut.

Jadi bagaimana kita hendak fokus pada "3% kritikal" itu?

Aplikasi bukan Operasi

Memahami cara dan masa kod digunakan membantu kami membuat keputusan yang lebih baik tentang tempat untuk fokus.

Alat Bukan Peraturan

Tidak lama kemudian prestasi meningkat dan variasi penyemak imbas baharu mula menolak kami daripada jenis ujian mikro ini dan ke alat yang lebih luas seperti carta nyalaan.
Jika anda mempunyai 30 minit, saya mengesyorkan pembentangan Chrome DevSummit 2015 ini pada enjin V8. Ia bercakap tentang isu-isu ini dengan tepat... bahawa penyemak imbas terus berubah dan mengikuti butiran tersebut mungkin sukar.

Menggunakan pemantauan prestasi dan analisis aplikasi anda yang sedang berjalan boleh membantu anda mengenal pasti bahagian kod anda yang berjalan perlahan atau kerap berjalan dengan cepat. Ini meletakkan anda pada kedudukan yang baik untuk melihat pengoptimuman.

Fokus

Menggunakan alat dan pustaka pemantauan prestasi membolehkan anda melihat cara kod berjalan dan bahagian mana yang perlu berfungsi. Mereka juga memberi kami peluang untuk melihat sama ada kawasan yang berbeza memerlukan kerja pada platform atau pelayar yang berbeza. Mungkin localStorage jauh lebih perlahan pada Chromebook dengan memori terhad dan storan eMMC. Mungkin anda perlu menyimpan lebih banyak maklumat untuk memerangi perkhidmatan selular yang perlahan atau berjerawat. Kita boleh meneka apa yang salah, tetapi mengukur ialah penyelesaian yang lebih baik.

Jika pangkalan pelanggan anda cukup besar, anda mungkin mendapat manfaat dalam alatan Pemantauan Pengguna Sebenar (RUM), yang berpotensi memberitahu anda bagaimana pengalaman pelanggan sebenar. Ini di luar skop artikel ini, tetapi saya telah menggunakannya di beberapa syarikat untuk memahami julat pengalaman pelanggan dan memfokuskan usaha pada prestasi dunia sebenar dan pengendalian ralat.

Alternatif

Memang mudah untuk menyelami "bagaimana saya menambah baik perkara ini", tetapi itu bukan jawapan yang terbaik. Anda mungkin menjimatkan banyak masa dengan berundur dan bertanya, "Adakah ini penyelesaian yang tepat untuk masalah ini?"

Masalah memuatkan senarai elemen yang sangat besar pada DOM? Mungkin senarai maya di mana hanya elemen yang boleh dilihat dimuatkan pada halaman akan menyelesaikan isu prestasi.

Melakukan banyak operasi yang kompleks pada pelanggan? Adakah lebih pantas untuk mengira sebahagian atau semua ini pada pelayan? Bolehkah sesetengah kerja dicache?

Mengambil langkah yang lebih besar ke belakang: Adakah ini antara muka pengguna yang sesuai untuk tugas ini? Jika anda mereka bentuk lungsur turun untuk menjangkakan dua puluh entri dan anda kini mempunyai tiga ribu, mungkin anda memerlukan komponen atau pengalaman yang berbeza untuk membuat pilihan.

Cukup Baik?

Dengan mana-mana kerja persembahan, terdapat soalan sekunder "apa yang cukup"? Terdapat video hebat daripada Matt Parker dari Stand-up Maths bercakap tentang beberapa kod yang ditulisnya dan cara komunitinya memperbaiknya daripada minggu masa jalan kepada milisaat. Walaupun luar biasa bahawa pengoptimuman sedemikian boleh dilakukan, terdapat juga titik untuk hampir semua projek di mana anda mencapai "cukup baik".

Untuk program yang dijalankan sekali sahaja, minggu mungkin boleh diterima, jam kerja adalah lebih baik, tetapi berapa banyak masa yang anda luangkan untuk program itu dengan pantas menjadi pertimbangan penting.

Anda mungkin menganggapnya seperti toleransi dalam kejuruteraan. Kami mempunyai matlamat, dan kami mempunyai pelbagai penerimaan. Kita boleh menyasarkan yang sempurna sambil memahami bahawa kejayaan dan kesempurnaan tidak sama.

Mengenalpasti Matlamat Prestasi

Matlamat adalah bahagian penting dalam pengoptimuman. Jika anda hanya tahu bahawa keadaan semasa adalah buruk, "jadikan ia lebih baik" ialah matlamat terbuka. Tanpa matlamat untuk perjalanan pengoptimuman anda, anda boleh membuang masa cuba mencari lebih banyak prestasi atau lebih pengoptimuman apabila anda boleh mengerjakan sesuatu yang lebih penting.

Saya tidak mempunyai metrik yang baik untuk ini kerana pengoptimuman prestasi boleh berbeza-beza, tetapi cuba untuk tidak tersesat dalam lalang. Ini benar-benar mengenai pengurusan projek dan perancangan lebih daripada penyelesaian pengekodan, tetapi input pembangun adalah penting semasa menentukan matlamat pengoptimuman. Seperti yang dicadangkan dalam bahagian Alternatif, pembaikan mungkin bukan "jadikan ini lebih pantas".

Menetapkan Had

Dalam kes Matt Parker, dia memerlukan jawapan akhirnya, dan tidak perlu menggunakan peranti itu untuk perkara lain. Di dunia kita, kami sering mengukur prestasi pelawat dan kemungkinan kesan kewangannya lwn masa pembangun/pasukan dan kos peluang anda, jadi ukurannya tidak semudah itu.

Mari bayangkan kita tahu mengurangkan masa tambah ke troli sebanyak 50% akan meningkatkan pendapatan kita sebanyak 10%, tetapi ia akan mengambil masa dua bulan untuk menyiapkan kerja itu. Adakah terdapat sesuatu yang boleh memberi kesan kewangan yang lebih besar daripada kerja pengoptimuman dua bulan? Bolehkah anda mencapai beberapa manfaat dalam tempoh masa yang lebih singkat? Sekali lagi, ini adalah mengenai pengurusan projek daripada kod.

Asingkan Kerumitan

Apabila anda mendapati diri anda perlu mengoptimumkan kod, ini juga masa yang sesuai untuk melihat sama ada anda boleh mengasingkan kod itu daripada bahagian lain projek anda. Jika anda tahu anda perlu menulis pengoptimuman kompleks yang akan menyukarkan kod untuk diikuti, mengekstraknya ke utiliti atau pustaka boleh memudahkan penggunaan semula dan membolehkan anda mengemas kini pengoptimuman itu di satu tempat jika ia perlu berubah dari semasa ke semasa.

Kesimpulan

Prestasi ialah subjek yang rumit dengan banyak kelainan. Jika anda tidak berhati-hati, anda boleh menggunakan banyak tenaga untuk keuntungan praktikal yang sangat sedikit. Rasa ingin tahu boleh menjadi guru yang baik, tetapi ia tidak selalu mencapai hasil. Terdapat faedah untuk bermain dengan prestasi kod, tetapi juga masa untuk menganalisis sumber kelambatan sebenar dalam projek anda dan menggunakan alatan yang tersedia untuk membantu menyelesaikannya.

Sumber

  • Addy Osmani - Memvisualisasikan pemprosesan JS dari semasa ke semasa dengan DevTools Flame Charts
  • Stand-Up Maths - Seseorang meningkatkan kod saya sebanyak 40,832,277,770%
  • Imej tajuk dibuat dengan Microsoft Copilot

Atas ialah kandungan terperinci Ujian Prestasi Mikro JavaScript, Sejarah dan Had. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1669
14
Tutorial PHP
1273
29
Tutorial C#
1256
24
Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Python vs JavaScript: Keluk Pembelajaran dan Kemudahan Penggunaan Apr 16, 2025 am 12:12 AM

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Dari C/C ke JavaScript: Bagaimana semuanya berfungsi Apr 14, 2025 am 12:05 AM

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

JavaScript dan Web: Fungsi teras dan kes penggunaan JavaScript dan Web: Fungsi teras dan kes penggunaan Apr 18, 2025 am 12:19 AM

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

JavaScript in Action: Contoh dan projek dunia nyata JavaScript in Action: Contoh dan projek dunia nyata Apr 19, 2025 am 12:13 AM

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami Enjin JavaScript: Butiran Pelaksanaan Memahami Enjin JavaScript: Butiran Pelaksanaan Apr 17, 2025 am 12:05 AM

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Python vs JavaScript: Persekitaran dan Alat Pembangunan Python vs JavaScript: Persekitaran dan Alat Pembangunan Apr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Peranan C/C dalam JavaScript Jurubah dan Penyusun Peranan C/C dalam JavaScript Jurubah dan Penyusun Apr 20, 2025 am 12:01 AM

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

See all articles