↗☻【高性能网站建设进阶指南 #BOOK#】第2章 创建快速响应的Web应用
0.1秒 1秒 10秒
自动内存管理是有开销的。当执行回收时,GC实现中最复杂的几乎是stop the world,它们会冻结整个运行环境(包括我们正在调用的主浏览器JavaScript线程),直到遍历完整个创建对象的堆。在这个过程中,它们查找那些不再使用或能够回收未用内存的对象。
但随着应用程序内存占用的增加,遍历整个堆去查找不再使用的对象所需要的时间将增长并最终会达到引起用户注意的程度。
当这种情况发生时,应用程序开始定期地出现间歇式迟钝;问题变得更糟糕时,整个浏览器可能出现定期的冻结。
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <script> function myJavaScriptFunction(that) { var start = new Date().getMilliseconds(); for (var i = 0; i < 100; i++) { that.innerHTML = 'ca ' + i; } var stop = new Date().getMilliseconds(); var executionTime = stop - start; console.log('myJavaScriptFunction() executed in ' + executionTime + ' milliseconds'); } </script> <div onclick="myJavaScriptFunction(this)">ca</div> <div><div id="redundant">nodeToDelete</div></div> <script> // 使用delete关键字从内存中移除不再需要的JavaScript对象 // 从网页的DOM树上移除不再是必需的节点 var page = { address: 'http://some/url' }; console.log(page.address); delete page.address; var nodeToDelete = document.getElementById('redundant'); delete nodeToDelete.parentNode.removeChild(nodeToDelete); </script> </body> </html>