利用chrome的profiler查找js的memory leak
1. 首先要固定一个测试环境。具体来说,选择某一个可以重复的操作,作为标准的测试动作。
2. 刷新浏览器后用profiler抓下heap snapshot。
3. 进行操作,再一次抓下snapshot,重复多次进行比较。

在比较的页面里面看到, 在多个snapshot之间,这些对象都是不断增长的。深入调查这个对象

发现了一个很奇怪的方法调用。
找到了我们的代码
var domSelectionSelectRangesMethod = CKEDITOR.dom.selection.selectRanges;
CKEDITOR.dom.selection.selectRanges = function (ranges) {
    try {
        domSelectionSelectRangesMethod.call(this, ranges);
    } catch (e) {
    }
};
再查看了CKEditor的源码,发现在CKEditor里,selection只是个构造函数,selectRanges是原型上的方法。
该问题代码无法修改原型上的方法,只是徒劳地在构造函数上包装了一遍又一遍。这些方法的context造成了内存泄露。
利用chrome的profiler查找js的memory leak的更多相关文章
- 利用Chrome插件向指定页面植入js,劫持 XSS
		资源来自:http://www.2cto.com/Article/201307/225986.html 首页 > 安全 > 网站安全 > 正文 利用Chrome插件向指定页面植入js ... 
- 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析
		背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ... 
- 从Chrome源码看JS Array的实现
		.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ... 
- [Node.js] Identify memory leaks with nodejs-dashboard
		In this lesson, I introduce a memory leak into our node.js application and show you how to identify ... 
- Linux 利用 locate 和 find 查找文件
		Linux 利用 locate 和 find 查找文件 命令 locate 用于快速查找文件.文件夹.此命令并没有在磁盘上查找所有文件,而是在预先建立的数据库里进行搜索.可以使用 updatedb 命 ... 
- 移动WebApp利用Chrome浏览器进行调试
		详细的请看这个(HBuilder是我长期使用,而且值得支持的国内前端开发编辑器) http://ask.dcloud.net.cn/article/151 http://ask.dcloud.net. ... 
- 【js】IE、FF、Chrome浏览器中的JS差异介绍
		如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject ff ... 
- 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能
		原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ... 
- 【原】无脑操作:Chrome浏览器安装Vue.js devtool
		学习Vue.js时,Chrome浏览器安装Vue.js devtool能很方便的查看Vue对象.组件.事件等. 本文以Chrome浏览器插件Vue.js devtools_3.1.2_0.crx的安装 ... 
随机推荐
- androidstudio 配置git和github
			git是版本控制工具 github是一个网站,git可以把项目上传至这个网站 1:先下载git,并且安装,一般默认即可,安装成功可以点击电脑右键出现 2:生成id_rsa.pub, 配置账号和邮箱 点 ... 
- JQuery实现的模块交换动画效果
			<!doctype html> <html> <head> <meta http-equiv="content-type" content ... 
- information_schema系列十二
			1: INNODB_SYS_VIRTUAL 表存储的是INNODB表的虚拟列的信息,当然这个还是比较简单的,我们直接通过SHOW CREATE TABLE 或者DESC TABLE就能看得到. Col ... 
- python基础知识9——模块2——常见内置模块
			内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: sys.argv 命令行参数List,第一个元素 ... 
- android subclipse subversive
			subclipse - http://subclipse.tigris.org/update_1.10.x android 开源框架 直接拿来用!最火的Android开源项目整理 http://blo ... 
- Java类额应用
			基本数据类型包装类 Integer Character 其他的都是将首字母大写; 包装类和基本类型之间的转换: Integer int Integer i = new Integ ... 
- asp.net LINQ LinqDataSource控件显示数据和DropdownList显示数据
			using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ... 
- python安装tkinter
			python2安装tkinter sudo apt-get install python-tk python3 安装tkinter sudo apt-get install python3-tk 
- ubuntu 下搭建nginx
			1.安装nginx sudo apt-get install nginx 2.nginx 的启动和关闭启动 nginx:# nginx -c /etc/nginx/nginx.conf 3.关闭 ng ... 
- VS中展开和折叠代码
			VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 C ... 
