脚本造成ie运行速度减慢的解决

最近在项目中,某些页面需要一直向服务器发送请求,获取最新的数据展示在页面,实现方式是通过setInterval实现的,但是在使用了一段时间之后,浏览器偶然就会报出“运行的脚本造成ie运行速度减慢,是否要停止运行此脚本”之类的提示。网上查了下,当浏览器认为当前运行的脚本处于失控状态的时候,就会给出类似的提示,但是各家浏览器判断脚本失控的原则各不相同。

IE:通过js引擎运行的脚本数量决定,当运行脚本的行数大于500万行的时候,ie就会给出提示,当然,这不是必然的,这有赖于ie对于失控脚本的检查频率。

其他的浏览器,多是通过一段脚本运行的时间判断脚本是否失控,关于这方面详细的内容,可以参考这篇文章。

http://www.cnblogs.com/yuzhongwusan/archive/2012/06/07/2540952.html

知道了提示出现的原因,如何解决呢,前台不断的向后台发送请求,请求回来的数据又经过处理展现,这些都是需要javascript脚本来执行的,不断循环下去,总有一个时刻,代码量积攒达到500万行。但是只要我们能够将IE对代码行数的计数器重置,理论上就永远不会达到代码行数的上限。

有两种方式可以达到上述目的:

  1. setTimeout

使用setTimeout将要执行的方法包起来,每次循环的时候,调用setTimeout都会采用一个新的计数器,这样理论上应该能减少每个计数器的代码行数总量。

2.   采用事件机制

要执行的代码通过事件来触发,可以通过手动或者自动的click之类解决。事件机制为什么能解决这个问题,是因为IE的代码计数器对事件处理函数里面的代码重新计数,已经跟当前控制流的代码计数器分开了。

考虑到目前我的代码是在不断的循环请求执行,使用setTimeout更加方便,故对setTimeout的处理方式进行了测试。

打印的数字为:<span id="test"></span>

<script>
var count = jQuery("#test");
for(var j=0;j<1930000;j++){
    if(j%10000 == 0){
            count.text(j);
    }
}

/*在ie浏览器中,如果下方代码去掉setTimeout,则会报脚本失控的提示,加上之后,即不报。但是,即使加了setTimeout,下方的代码循环的次数也远远达不到上方循环的次数,测试时发现,下方循环9000次还正常,改成10000次,又会报脚本失控。
*/
//setTimeout(function(){
    for(var j=0;j<9000;j++){
        if(j%100 == 0){
                count.text(j);
        }
    }
//},1);
</script>

经过测试,setTimeout似乎是对ie的代码计数行数产生了影响,但是并未像我预期的那样,行数重置后,又可以循环将近200万次,具体原因还不清楚。

时间: 2024-11-09 03:06:36

脚本造成ie运行速度减慢的解决的相关文章

java 调用bash shell脚本阻塞的小问题的解决

java  调用bash shell脚本阻塞的小问题的解决 背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结果给web 界面显示. 现象: Java 进程阻塞.使用ps命令可以看到被调用的shell 的执行进程状态为S 分析 Shell子进程的状态是S 睡眠状态,也就是该进程在等待某个条件满足,方能继续执行. Java程序在调用Runtime.getRuntime().exec(jyName)之后,lin

此页面上的脚本造成Web浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。

访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”.遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口,而事实上,脚本错误并不会影响网站浏览,因此这一警告可谓多此一举.要关闭警告则可以在浏览器的工具菜单选择Internet选项,然后单击高级属性页.进入到浏览标签,并选中“禁止脚本调试”复选框,以后你就不会再收到这些警告了. 建议您尝试进行以下操作:1.清除一下IE浏览器的缓存,点IE上的工具——然后再选择最下面的Internet选项,再点Internet删除文件(记得勾上

Linux版Matlab R2015b的bug——脚本运行的陷阱(未解决)

0 系统+软件版本 系统:CentOS 6.7 x64, 内核 2.6.32-573.el6.x86_64软件:Matlab R2015b(包括威锋网和东北大学ipv6下载的资源,都测试过) 1 bug描述 1.1 未知的“陷阱” 首先,这个程序在Matlab R2013a中可以完美运行,这个“陷阱“在是新安装的R2015b上才出现的. 说它是“陷阱“,是因为脚本文件涉及到大量的数据处理,比如一个几百次的循环,它可能在执行某一句的时候就失去响应了,可能是一个循环,也可能是单句,仿佛掉进了一个未知

Shell脚本编程小技巧(1)-如何解决脚本中多行重定向结束符不用对齐到行首

1.what?问题需求是什么? 首先需求从何而来呢,主要是编写shell脚本,用cat 进行多行输入重定向的时候,结束符必须要对齐行首,格式不好看. 2.how?怎么解决这个问题? 首先百度,google搜索了下,结果就是说的多的就是shell多行重定向没有解决实际问题,可能是搜索的关键字不对.人工智能检索发现了一篇好文,人家写的比我好,大家自行浏览:[https://segmentfault.com/a/1190000008130200]主要是用了<<- 3.why?什么原理呢? 其实换个思

Linux启动脚本rc.local 不执行的解决方法

目录 1./etc/rc.local是/etc/rc.d/rc.local的软链接 2.看看/etc/rc.d/rc.local的权限 3.修改/etc/rc.d/rc.local的可执行权限 4.重启解决 5.版权声明 如果Linux启动脚本/etc/rc.local文件没有被执行,可能是因为rc.loca文件没有可执行权限,按以下步骤解决这个问题. 1./etc/rc.local是/etc/rc.d/rc.local的软链接 执行ls -l /etc/rc.local看看. 2.看看/etc

Jmeter录制脚本过程及报错的解决

两个报错:Could not create script recorder报错和您的连接不是私密连接报错 1.录制过程 * 打开jmeter * 点击Templated,选择Recoding模版 * 点击WorkBench节点下-->添加-->非测试元件-->HTTP代理服务器 http代理服务器是这个样子的 2.点击启动就开始报错了 报错信息: Could not create script recorder -see log for detail:>>非法选项: -ext

sudo执行脚本找不到环境变量解决方法

问题: 当普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本, 然后再sudo执行脚本,就找不到变量,未能获取到值. 原因 sudo运行时,会默认重置环境变量为安全的环境变量,也即,但前设置的变量都会失效,只有少数配置文件中指定的环境变量能保存下来. sudo的配置文件是 /etc/sudoers 需要root权限才能读取: 在/etc/sudoers中修改:Defaults    env_reset为:Defaults   

eclipse运行速度优化(解决狂读盘、发布慢、CPU100%等问题)

我的ECLIPSE运行时速度奇慢,具体表现为: 1.只要ECLIPSE启动后,硬盘灯就狂闪,不停的读盘: 2.发布TOMCAT经常在0%: 3.偶尔CPU占满: 网上讲优化的文章无数,但是总是有用的却很少,大部分是转载甚至是抄袭的.在借鉴各个文章的做法并不断尝试后,我的问题终于解决了. 1.启动参数的优化: 我的启动参数为:-Xms976m -Xmx976m -XX:PermSize=128m -XX:MaxPermSize=128m -Xmn168m -XX:+DisableExplicitG

ubuntu12.04中shell脚本无法使用source的原因及解决方法

现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which sh` 提示/bin/sh -> dash 这说明是用dash来进行解析的. 改回方法: 命令行执行:sudo dpkg-reconfigure dash 在界面中选择no 再ls -l `which sh` 提示/bin/sh -> bash 修改成功,source可以用了~