Rumah > hujung hadapan web > tutorial js > Teknik Pengoptimuman Prestasi JavaScript yang luar biasa untuk Pembangun

Teknik Pengoptimuman Prestasi JavaScript yang luar biasa untuk Pembangun

Linda Hamilton
Lepaskan: 2024-12-19 21:10:10
asal
857 orang telah melayarinya

owerful JavaScript Performance Optimization Techniques for Developers

Sebagai pembangun, saya mendapati bahawa mengoptimumkan prestasi JavaScript adalah penting untuk mencipta aplikasi web yang responsif dan cekap. Selama bertahun-tahun, saya telah meneroka pelbagai teknik untuk membuat profil dan meningkatkan prestasi kod saya. Berikut ialah tujuh kaedah berkuasa yang telah saya gunakan dengan jayanya:

Alat Pembangun Penyemak Imbas ialah sumber yang tidak ternilai untuk pemprofilan prestasi. Saya kerap menggunakan Chrome DevTools untuk menganalisis aplikasi web saya. Panel Prestasi menyediakan banyak maklumat tentang masa muat, penggunaan CPU dan penggunaan memori. Untuk memulakan pemprofilan, saya membuka DevTools, navigasi ke tab Prestasi dan klik butang rekod. Selepas berinteraksi dengan aplikasi saya, saya menghentikan rakaman dan memeriksa hasilnya.

Carta nyala dalam panel Prestasi amat berguna. Ia menunjukkan kepada saya fungsi mana yang paling banyak mengambil masa untuk dilaksanakan. Saya boleh mengezum masuk pada kawasan tertentu carta untuk melihat pecahan terperinci bagi panggilan fungsi dan tempohnya. Ini membantu saya mengenal pasti kesesakan dalam kod saya yang mungkin tidak saya perasan sebaliknya.

Ciri lain yang saya rasa berguna ialah panel Rangkaian. Ia membolehkan saya melihat berapa lama setiap sumber diambil untuk dimuatkan, yang penting untuk mengoptimumkan masa muat halaman awal. Saya boleh mensimulasikan keadaan rangkaian yang berbeza untuk memastikan aplikasi saya berfungsi dengan baik walaupun pada sambungan yang lebih perlahan.

Lighthouse ialah satu lagi alat berkuasa yang disepadukan ke dalam Chrome DevTools. Ia menyediakan audit automatik untuk prestasi, kebolehaksesan, apl web progresif dan banyak lagi. Saya sering menjalankan audit Lighthouse pada aplikasi web saya untuk mendapatkan gambaran keseluruhan yang menyeluruh tentang prestasinya.

Untuk menggunakan Rumah Api, saya membuka DevTools, pergi ke tab Rumah Api, pilih kategori yang ingin saya audit dan klik "Jana laporan." Laporan yang dihasilkan memberikan markah untuk pelbagai aspek aplikasi saya dan menawarkan cadangan khusus untuk penambahbaikan.

Salah satu ciri Rumah Api yang paling berharga ialah keupayaannya untuk mensimulasikan peranti mudah alih dan sambungan rangkaian yang lebih perlahan. Ini membantu saya memastikan aplikasi saya berfungsi dengan baik merentas pelbagai peranti dan keadaan rangkaian.

API Garis Masa Prestasi ialah alat yang berkuasa untuk memperalatkan kod dan mengukur operasi tertentu. Saya menggunakannya untuk membuat entri prestasi tersuai yang membantu saya menjejaki masa pelaksanaan bahagian kritikal aplikasi saya.

Berikut ialah contoh cara saya boleh menggunakan API Garis Masa Prestasi:

performance.mark('startFunction');
// Complex function or operation
complexOperation();
performance.mark('endFunction');

performance.measure('functionDuration', 'startFunction', 'endFunction');

const measures = performance.getEntriesByType('measure');
console.log(measures[0].duration);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kod ini mencipta tanda pada permulaan dan penghujung operasi yang kompleks, mengukur masa antara tanda ini dan mencatatkan tempoh. Ia merupakan cara yang mudah tetapi berkesan untuk menjejak prestasi bahagian tertentu kod saya.

API Pemasa Pengguna berkait rapat dengan API Garis Masa Prestasi dan menyediakan cara untuk menambah data pemasaan tersuai pada garis masa prestasi penyemak imbas. Saya mendapati ia amat berguna untuk mengukur tempoh fungsi atau proses kritikal dalam aplikasi saya.

Berikut ialah contoh cara saya menggunakan API Masa Pengguna:

performance.mark('startFunction');
// Complex function or operation
complexOperation();
performance.mark('endFunction');

performance.measure('functionDuration', 'startFunction', 'endFunction');

const measures = performance.getEntriesByType('measure');
console.log(measures[0].duration);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kod ini menandakan permulaan dan tamat proses, mengukur masa antara tanda ini dan mencatatkan tempohnya. Ini cara yang bagus untuk mendapatkan maklumat masa yang tepat untuk bahagian tertentu aplikasi saya.

Chrome Tracing ialah alat yang lebih maju yang membolehkan saya menangkap data prestasi terperinci untuk analisis mendalam tentang pelaksanaan dan pemaparan JavaScript. Walaupun ia lebih kompleks untuk digunakan berbanding alat pembangun terbina dalam penyemak imbas, ia memberikan tahap perincian yang belum pernah berlaku sebelum ini tentang perkara yang berlaku dalam penyemak imbas.

Untuk menggunakan Pengesanan Chrome, saya biasanya mengikut langkah berikut:

  1. Buka Chrome dan navigasi ke chrome://tracing
  2. Klik "Rekod" dan pilih kategori yang ingin saya jejak
  3. Berinteraksi dengan aplikasi saya
  4. Hentikan rakaman dan analisis keputusan

Fail jejak yang terhasil menunjukkan kepada saya apa yang dilakukan oleh penyemak imbas pada setiap milisaat, termasuk pelaksanaan JavaScript, pengiraan reka letak, lukisan dan banyak lagi. Tahap perincian ini tidak ternilai apabila saya cuba mengoptimumkan bahagian aplikasi saya yang kompleks atau kritikal prestasi.

Syot Kilat Memori ialah satu lagi ciri hebat Chrome DevTools yang saya gunakan untuk mengenal pasti kebocoran memori dan menganalisis corak pengekalan objek. Kebocoran memori boleh menyebabkan masalah prestasi yang ketara dari semasa ke semasa, jadi adalah penting untuk mengenal pasti dan membetulkannya.

Untuk mengambil gambar memori, saya ikuti langkah berikut:

  1. Buka Chrome DevTools dan pergi ke tab Memori
  2. Pilih "Timbunan gambar" dan klik "Ambil gambar"
  3. Berinteraksi dengan aplikasi saya
  4. Ambil gambar lain
  5. Bandingkan syot kilat untuk mengenal pasti objek yang dikekalkan tanpa perlu

Berikut ialah contoh mudah kod yang mungkin menyebabkan kebocoran memori:

performance.mark('startProcess');
// Complex process
for (let i = 0; i < 1000000; i++) {
    // Some complex operation
}
performance.mark('endProcess');

performance.measure('processTime', 'startProcess', 'endProcess');

const measurements = performance.getEntriesByName('processTime');
console.log(`Process took ${measurements[0].duration} milliseconds`);
Salin selepas log masuk
Salin selepas log masuk

Dalam kes ini, largeArray disimpan dalam ingatan walaupun selepas createLeak telah selesai melaksanakan kerana leak.someMethod mengekalkan rujukan kepadanya. Gambar memori akan membantu saya mengenal pasti isu ini.

Carta Api ialah alat visualisasi yang saya dapati amat berguna untuk memahami aliran pelaksanaan kod JavaScript saya. Mereka menunjukkan kepada saya timbunan panggilan dari semasa ke semasa, menjadikannya mudah untuk melihat fungsi mana yang paling banyak mengambil masa untuk dilaksanakan.

Chrome DevTools menjana carta nyala secara automatik apabila anda merakam prestasi. Paksi-x mewakili masa, dan paksi-y menunjukkan timbunan panggilan. Setiap bar dalam carta mewakili panggilan fungsi, dengan lebar bar menunjukkan tempoh masa yang diambil untuk melaksanakan fungsi.

Saya sering menggunakan carta api untuk mengenal pasti fungsi yang kerap dipanggil atau mengambil masa yang lama untuk dilaksanakan. Ini membantu saya menumpukan usaha pengoptimuman saya pada bahagian kod saya yang akan memberi kesan terbesar pada prestasi keseluruhan.

Apabila mengoptimumkan prestasi JavaScript, adalah penting untuk diingat bahawa pengoptimuman pramatang boleh membawa kepada kod yang lebih kompleks dan sukar untuk diselenggara. Saya sentiasa bermula dengan menulis kod yang bersih dan boleh dibaca dan kemudian menggunakan teknik pemprofilan ini untuk mengenal pasti kesesakan sebenar.

Satu teknik yang saya dapati amat berkesan ialah pemuatan malas. Ini melibatkan penangguhan pemuatan sumber tidak kritikal sehingga ia diperlukan. Berikut ialah contoh mudah:

performance.mark('startFunction');
// Complex function or operation
complexOperation();
performance.mark('endFunction');

performance.measure('functionDuration', 'startFunction', 'endFunction');

const measures = performance.getEntriesByType('measure');
console.log(measures[0].duration);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kod ini menggunakan Intersection Observer API untuk memuatkan imej hanya apabila ia kelihatan, dengan ketara mengurangkan masa pemuatan halaman awal untuk halaman dengan banyak imej.

Teknik lain yang sering saya gunakan ialah debouncing. Ini amat berguna untuk fungsi yang sering dipanggil, seperti pengendali acara untuk menatal atau mengubah saiz. Berikut ialah contoh:

performance.mark('startProcess');
// Complex process
for (let i = 0; i < 1000000; i++) {
    // Some complex operation
}
performance.mark('endProcess');

performance.measure('processTime', 'startProcess', 'endProcess');

const measurements = performance.getEntriesByName('processTime');
console.log(`Process took ${measurements[0].duration} milliseconds`);
Salin selepas log masuk
Salin selepas log masuk

Fungsi nyahlantun ini memastikan bahawa pengendali ubah saiz hanya berjalan sebaik sahaja pengguna menghentikan saiz semula tetingkap selama 250 milisaat, mengurangkan bilangan kali fungsi dipanggil.

Dalam hal mengoptimumkan gelung, saya mendapati bahawa menggunakan kaedah tatasusunan seperti peta, penapis dan pengurangan selalunya boleh membawa kepada kod yang lebih mudah dibaca dan kadangkala lebih berprestasi daripada tradisional untuk gelung. Berikut ialah contoh:

let leak = null;

function createLeak() {
    const largeArray = new Array(1000000).fill('leaky');
    leak = {
        someMethod: () => {
            console.log(largeArray.length);
        }
    };
}

createLeak();
Salin selepas log masuk

Satu lagi aspek penting prestasi JavaScript ialah mengurus operasi tak segerak dengan berkesan. Janji dan sintaks async/menunggu boleh membantu menjadikan kod tak segerak lebih mudah dibaca dan lebih mudah untuk difikirkan. Berikut ialah contoh:

function lazyLoad(element) {
    if ('IntersectionObserver' in window) {
        let observer = new IntersectionObserver((entries, observer) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    let img = entry.target;
                    img.src = img.dataset.src;
                    observer.unobserve(img);
                }
            });
        });
        observer.observe(element);
    } else {
        // Fallback for browsers that don't support IntersectionObserver
        element.src = element.dataset.src;
    }
}

// Usage
document.querySelectorAll('img[data-src]').forEach(lazyLoad);
Salin selepas log masuk

Fungsi async ini menggunakan try/catch untuk pengendalian ralat dan menunggu keputusan operasi tak segerak, menjadikan kod lebih mudah dibaca dan diselenggara berbanding dengan panggilan balik bersarang.

Mengenai manipulasi DOM, saya mendapati bahawa meminimumkan manipulasi langsung dan perubahan kumpulan boleh meningkatkan prestasi dengan ketara. Penggunaan serpihan dokumen boleh menjadi sangat berkesan:

function debounce(func, delay) {
    let timeoutId;
    return function (...args) {
        clearTimeout(timeoutId);
        timeoutId = setTimeout(() => func.apply(this, args), delay);
    };
}

// Usage
window.addEventListener('resize', debounce(() => {
    console.log('Window resized');
}, 250));
Salin selepas log masuk

Pendekatan ini meminimumkan bilangan kali DOM dikemas kini, yang boleh menjadi peningkatan prestasi yang ketara untuk sejumlah besar elemen.

Kesimpulannya, pemprofilan dan pengoptimuman prestasi JavaScript ialah proses yang berterusan. Memandangkan aplikasi web menjadi lebih kompleks, adalah penting untuk sentiasa menilai dan meningkatkan prestasi. Teknik yang saya bincangkan di sini - daripada menggunakan alat pembangun penyemak imbas dan Rumah Api kepada melaksanakan pemuatan malas dan manipulasi DOM yang cekap - sangat berharga dalam kerja saya. Dengan menggunakan kaedah ini dan mempelajari secara berterusan tentang teknik pengoptimuman prestasi baharu, kami boleh mencipta aplikasi web yang lebih pantas dan cekap yang memberikan pengalaman pengguna yang lebih baik.


101 Buku

101 Buku ialah syarikat penerbitan dipacu AI yang diasaskan bersama oleh pengarang Aarav Joshi. Dengan memanfaatkan teknologi AI termaju, kami memastikan kos penerbitan kami sangat rendah—sesetengah buku berharga serendah $4—menjadikan pengetahuan berkualiti boleh diakses oleh semua orang.

Lihat buku kami Kod Bersih Golang tersedia di Amazon.

Nantikan kemas kini dan berita menarik. Apabila membeli-belah untuk buku, cari Aarav Joshi untuk mencari lebih banyak tajuk kami. Gunakan pautan yang disediakan untuk menikmati diskaun istimewa!

Ciptaan Kami

Pastikan anda melihat ciptaan kami:

Pusat Pelabur | Pelabur Central Spanish | Pelabur Jerman Tengah | Hidup Pintar | Epos & Gema | Misteri Membingungkan | Hindutva | Pembangunan Elit | Sekolah JS


Kami berada di Medium

Tech Koala Insights | Dunia Epok & Gema | Medium Pusat Pelabur | Medium Misteri Membingungkan | Sains & Zaman Sederhana | Hindutva Moden

Atas ialah kandungan terperinci Teknik Pengoptimuman Prestasi JavaScript yang luar biasa untuk Pembangun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan