成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

React內(nèi)存泄露常見問題解決方案

安全 網(wǎng)站安全
程序的運行需要內(nèi)存。只要程序提出要求,操作系統(tǒng)或者運行時(runtime)就必須供給內(nèi)存。不再用到的內(nèi)存,沒有及時釋放,就叫做內(nèi)存泄漏(memory leak)。

什么是內(nèi)存泄露

  • 程序的運行需要內(nèi)存。只要程序提出要求,操作系統(tǒng)或者運行時(runtime)就必須供給內(nèi)存。
  • 對于持續(xù)運行的服務進程(daemon),必須及時釋放不再用到的內(nèi)存。否則,內(nèi)存占用越來越高,輕則影響系統(tǒng)性能,重則導致進程崩潰。
  • 不再用到的內(nèi)存,沒有及時釋放,就叫做內(nèi)存泄漏(memory leak)。

[[261494]]

JavaScript 中常見的幾種內(nèi)存泄露

  • 全局變量引起的內(nèi)存泄漏
    1. function leaks(){  
    2.  leak = '***'; //leak 成為一個全局變量,不會被回收 
  • 閉包引起的內(nèi)存泄漏
    1. var leaks = (function(){  
    2.  var leak = '***';// 被閉包所引用,不會被回收 
    3.  return function(){ 
    4.  console.log(leak); 
    5.  } 
    6. })() 
  • dom清空或刪除時,事件未清除導致的內(nèi)存泄漏
    1. document.querySelector("#demo").addEventListener('click', myFunction); 
    2. var para1=document.querySelector("#demo"); 
    3. para1.parentNode.removeChild(para1); 

如果我們在沒有取消 click 方法前去銷毀了 para1 節(jié)點,就會造成內(nèi)存泄露。

正確的做法:

  1. document.querySelector("#demo").addEventListener('click', myFunction); 
  2. // 我們需要在刪除節(jié)點前清除掛載的 click 方法 
  3. document.querySelector("#demo").removeEventListener("click", myFunction); 
  4. var para1=document.querySelector("p1"); 
  5. para1.parentNode.removeChild(para1); 

具體的示例

1. Demo1:

  1. componentWillMount: function () { 
  2.  var onLogin = this.props.onLogin || function () {}, 
  3.  onLogout = this.props.onLogout || function () {}; 
  4.  this.on('authChange', function () { 
  5.  console.log('user authenticated:', this.state.isAuthenticated); 
  6.  return this.state.isAuthenticated 
  7.  ? onLogin(this.state) 
  8.  : onLogout(this.state); 
  9.  }.bind(this)); 

上面的例子是在 Stack Overflow 上看到的,樓主在componentWillMount的時候掛載了authChange事件,然后 react 出現(xiàn)了如下的報錯:

Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method

意思為:我們不能在組件銷毀后設置state,防止出現(xiàn)內(nèi)存泄漏的情況

(1) 需要怎么解決啦?

添加如下代碼即可:

  1. componentWillUnmount: function () { 
  2. this.off('authChange', this.authChange); 
  3. this.authChange = null

很明顯這種情況就是在 dom 結(jié)構銷毀的時候,事件卻沒有清除導致的內(nèi)存泄漏,所以我們需要在componentWillUnmount的時候去清除掛載的方法

(2) react 內(nèi)存泄露相關解釋和解決方法

這里就提到了內(nèi)存泄露,當我們在使用事件綁定,setInterval,setTimeOut 或一些函數(shù)的時候,但是卻沒有在組件銷毀前清除的時候會造成內(nèi)存泄露。這里我們手動的再componentWillUnmount去清除相關的方法即可。

2. Demo 2

下面這種就是常見的情況:

  1. this.pwdErrorTimer = setTimeout(() => { 
  2.  this.setState({ 
  3.  showPwdError:false 
  4.  }) 
  5. }, 1000); 

設置了一個timer延遲設置state,然而在延遲的這段時間,組件已經(jīng)銷毀,則造成此類問題

解決方法:

利用生命周期鉤子函數(shù):componentWillUnmount

  1. componentWillUnmount(){ 
  2.  clearTimeout(this.pwdErrorTimer); 
  3.  clearTimeout(this.userNameErrorTimer); 
責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2010-08-04 10:20:30

Flex組件開發(fā)

2010-08-26 12:59:29

marginCSS

2025-02-19 08:00:00

移動端移動設備移動開發(fā)

2021-08-20 15:49:13

電腦主板維修

2009-12-24 11:13:41

2010-09-27 13:14:42

JVM內(nèi)存限制

2011-01-21 14:13:10

2012-05-09 10:08:41

跨機房

2010-01-05 10:02:56

LinuxRAID常見問題

2011-07-28 11:28:21

SQL Server數(shù)注冊表編輯器

2019-10-08 16:05:19

Redis數(shù)據(jù)庫系統(tǒng)

2010-03-30 16:04:34

Linux Nginx

2021-05-18 08:21:38

React HooksReact前端

2011-05-03 17:22:59

激光打印機

2010-01-13 21:06:37

雙絞線

2014-01-07 13:54:02

HadoopYARN

2010-02-06 14:54:11

C++指針漂移

2010-10-08 13:09:38

JavaScript數(shù)

2010-05-31 12:53:56

Nagios apac

2010-12-31 16:31:08

服務器常見問題
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠躁天天躁夜夜躁婷婷老牛影视 | 亚洲成av人片在线观看 | 精品视频在线播放 | 99精品一区二区 | 美女黄视频网站 | 久久一级 | 九九九久久国产免费 | 日韩欧美成人一区二区三区 | 在线观看日本网站 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 欧美精品中文字幕久久二区 | 日韩欧美三区 | 91精品久久久久久久久久入口 | m豆传媒在线链接观看 | 日韩成人影院在线观看 | 国产亚洲精品精品国产亚洲综合 | 精品免费视频 | 99re在线视频 | 午夜激情在线 | 一区二区精品 | 国产精品视频在线播放 | 色婷婷综合久久久中字幕精品久久 | 精品一区二区不卡 | 日韩精品亚洲专区在线观看 | 亚洲一区二区免费视频 | 久久久综合久久 | 欧美精品一区在线观看 | 91亚洲国产成人久久精品网站 | 国产98色在线 | 日韩 | 日韩视频―中文字幕 | 国产成人午夜电影网 | 国产我和子的乱视频网站 | 美女天天操 | 欧美日韩不卡合集视频 | 成人精品鲁一区一区二区 | 一区二区三区四区在线免费观看 | 久草资源网站 | 欧美一区二不卡视频 | 精品一区在线免费观看 | 色精品视频| 国产在线观看av |