Rumah hujung hadapan web tutorial js JavaScript mengelakkan kebocoran memori dan petua pengurusan memori_petua javascript

JavaScript mengelakkan kebocoran memori dan petua pengurusan memori_petua javascript

May 16, 2016 pm 04:36 PM
javascript kebocoran ingatan Pengurusan ingatan Kemahiran

Contoh dalam artikel ini menerangkan teknik pengelakan kebocoran memori dan pengurusan ingatan JavaScript, yang sangat praktikal. Kongsikan dengan semua orang untuk rujukan anda. Kaedah khusus adalah seperti berikut:

Kandungan artikel ini datang daripada Google WebPerf (London WebPerf Group), 26 Ogos 2014.

Secara umumnya, aplikasi web JavaScript yang cekap mestilah lancar dan pantas. Mana-mana aplikasi yang berinteraksi dengan pengguna perlu mempertimbangkan cara memastikan memori digunakan dengan cekap, kerana jika terlalu banyak digunakan, halaman akan ranap, memaksa pengguna memuat semula. Dan anda hanya boleh bersembunyi di sudut dan menangis.

Pengumpulan sampah automatik bukan pengganti untuk pengurusan memori yang berkesan, terutamanya dalam aplikasi web yang besar dan berjalan lama. Dalam artikel ini, kami akan menunjukkan cara mengurus memori dengan berkesan melalui DevTools Chrome.

Dan pelajari cara menyelesaikan masalah prestasi seperti kebocoran memori, pengumpulan sampah yang kerap dijeda dan kemerosotan memori keseluruhan, perkara yang benar-benar membunuh anda.

Addy Osmani menunjukkan banyak contoh kebocoran memori dalam Chrome V8 dalam PPTnya:

1) Memadamkan sifat Objek akan melambatkan objek (memakan 15 kali lebih banyak memori)

var o = { x: 'y' };
delete o.x; //此时o会成一个慢对象
o.x; //
 
var o = { x: 'y' };
o = null; //应该这样

Salin selepas log masuk

2) Penutupan

Apabila pembolehubah di luar penutupan diperkenalkan dalam penutupan, objek tidak boleh dikumpul sampah (GC) apabila penutupan tamat.

var a = function() {
 var largeStr = new Array(1000000).join('x');
 return function() {
  return largeStr;
 }
}();

Salin selepas log masuk

3) DOM bocor

Apabila COM asal dialih keluar, rujukan nod anak tidak boleh dikitar semula melainkan ia dialih keluar.

var select = document.querySelector;
var treeRef = select('#tree');
 
//在COM树中leafRef是treeFre的一个子结点
var leafRef = select('#leaf'); 
var body = select('body');
 
body.removeChild(treeRef);
 
//#tree不能被回收入,因为treeRef还在
//解决方法:
treeRef = null;
 
//tree还不能被回收,因为叶子结果leafRef还在
leafRef = null;
 
//现在#tree可以被释放了。

Salin selepas log masuk

4) Kebocoran pemasa

Pemasa juga merupakan tempat biasa di mana kebocoran memori berlaku:

for (var i = 0; i < 90000; i++) {
 var buggyObject = {
  callAgain: function() {
   var ref = this;
   var val = setTimeout(function() {
    ref.callAgain();
   }, 90000);
  }
 }
 
 buggyObject.callAgain();
 //虽然你想回收但是timer还在
 buggyObject = null;
}

Salin selepas log masuk

5) Nyahpepijat memori

Alat penyahpepijatan memori terbina dalam Chrome boleh menyemak penggunaan memori dan kebocoran memori dengan mudah:

Klik rekod dalam Garis Masa ->

Saya harap artikel ini akan membantu semua orang mempelajari pengaturcaraan javascript.

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

Tag artikel 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)

Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori Jun 05, 2024 pm 01:02 PM

Reka letak objek C++ diselaraskan dengan memori untuk mengoptimumkan kecekapan penggunaan memori

Pengesanan dan resolusi kebocoran memori fungsi Golang Pengesanan dan resolusi kebocoran memori fungsi Golang Apr 23, 2024 pm 05:09 PM

Pengesanan dan resolusi kebocoran memori fungsi Golang

Amalan terbaik untuk pengurusan ingatan fungsi golang Amalan terbaik untuk pengurusan ingatan fungsi golang Apr 26, 2024 pm 05:33 PM

Amalan terbaik untuk pengurusan ingatan fungsi golang

Pengurusan Memori C++: Pembahagian Memori Tersuai Pengurusan Memori C++: Pembahagian Memori Tersuai May 03, 2024 pm 02:39 PM

Pengurusan Memori C++: Pembahagian Memori Tersuai

Mekanisme pengiraan rujukan dalam pengurusan memori C++ Mekanisme pengiraan rujukan dalam pengurusan memori C++ Jun 01, 2024 pm 08:07 PM

Mekanisme pengiraan rujukan dalam pengurusan memori C++

Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang? Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang? Jun 05, 2024 pm 01:08 PM

Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang?

Bagaimana untuk menguruskan penggunaan memori dalam fungsi PHP? Bagaimana untuk menguruskan penggunaan memori dalam fungsi PHP? Apr 26, 2024 pm 12:12 PM

Bagaimana untuk menguruskan penggunaan memori dalam fungsi PHP?

Kebocoran memori dalam aplikasi PHP: sebab, pengesanan dan penyelesaian Kebocoran memori dalam aplikasi PHP: sebab, pengesanan dan penyelesaian May 09, 2024 pm 03:57 PM

Kebocoran memori dalam aplikasi PHP: sebab, pengesanan dan penyelesaian

See all articles