昨天下午休息的时候,发现我工作用的 Mac Mini 在疯狂地散热中,打开 Activity Monitor 发现是 Chrome 浏览器导致的,再打开 Chrome 的 Task Manager 发现是 Developer Tools,如下图所示:
内存正常,但是这个 CPU,有点夸张。
于是,我:
便怀疑是插件的问题,然后就手动地一个个开启,发现是 React Dev Tools 的问题。整理了一下触发这个问题的条件:
随后,在 React Dev Tool 的 GitHub 上发现了相应的 issue:High CPU when tab is in background #739
而触发 Issue 的代码则是:
var loadCheckInterval = setInterval(function() { createPanelIfReactLoaded();}, 1000);
但是,这个文件从 2015 年后,就没有修改过了:
那么,问题就出现在 setInterval 方法里。
于是,自己我便提取了相关的插件:chrome-59-show-setinterval-issue-code
而在这个方法里,关键点是:
chrome.devtools.inspectedWindow.eval(`jQuery.fn.jquery`, function(pageHasReact, err) {});
后来,发现有相当多的插件会使用这样的方式,来对检测是否含相应的环境,如:
在他们的代码里都有相似的 setInterval,如
const checkVueInterval =setInterval(createPanelIfHasVue, 1000)
然后 CPU 就~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
已向 Chrome 报 Bug 了:https://bugs.chromium.org/p/chromium/issues/detail?id=733469
你呢,遇到同样的问题吗?
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!