十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Eclipse中jsp、js文件编辑时,卡死现象解决汇总
创新互联公司是专业的市中网站建设公司,市中接单;提供成都网站设计、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行市中网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
使用js文件时,经常出现卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下:
1、取消验证
windows–perferences–validation
把 除了manual 下面的全部点掉,build下只留 classpath dependency Validator
2、关闭拼写检查
windows–perferences–general– editors-Text Editors-spelling
3、对于MyEclipse来讲,修改JSP页面时的编辑工具
Window perferences General Editors File Associations
在File types 中选择 *.jsp 在Associated editors 中将"MyEclipse JSP Editor"设置为默认。
4、杜绝jar包访问网络
当用卡死。
这是因为解 决方法:window--preferences--java--installed JREs,编辑使用的jre,把rt.jar和charsets.jar的javadoc location设置为空(none)即可。当然也可以去下载javadoc到本机,进行相关设置也可以解决。
另外:把自己项目中所有用到的jar包,都作同样处理。
5、修改打开链接的快捷键
最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死。
想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Preferences查找edit功能,进行一个个的测试,最后发现原来是代码的超链功能导致。
进入方法:Window - Preferences - General - Editors - Text Editors - Hyperlinking
把超链的快捷键改为其他键比如Alt(不能改为shift)
说明:在这个功能确实非常好用,但是由于复制粘贴的功能快捷键也是Ctrl,以致我在快速进行操作的时候,原网页地址:
6、修改项目的.project文件
js编辑器非常慢,尤其在拷贝粘贴代码时的解决方法
使用的是官网标准版的JS时JS再也不似蜗牛了.
buildSpec
buildCommand
nameorg.eclipse.ui.externaltools.ExternalToolBuilder/name
triggersfull,incremental,/triggers
arguments
dictionary
keyLaunchConfigHandle/key
valueproject/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch/value
/dictionary
/arguments
/buildCommand
buildCommand
nameorg.eclipse.jdt.core.javabuilder/name
arguments
/arguments
/buildCommand
buildCommand
nameorg.eclipse.wst.common.project.facet.core.builder/name
arguments
/arguments
/buildCommand
buildCommand
nameorg.eclipse.ui.externaltools.ExternalToolBuilder/name
triggersfull,incremental,/triggers
arguments
dictionary
keyLaunchConfigHandle/key
valueproject/.externalToolBuilders/org.eclipse.wst.validation.validationbuilder.launch/value
/dictionary
/arguments
/buildCommand
/buildSpec
natures
natureorg.eclipse.jem.workbench.JavaEMFNature/nature
natureorg.eclipse.wst.common.modulecore.ModuleCoreNature/nature
natureorg.eclipse.wst.common.project.facet.core.nature/nature
natureorg.eclipse.jdt.core.javanature/nature
natureorg.eclipse.wst.jsdt.core.jsNature/nature
/natures
原文链接:
7、调整在eclipse.ini文件,将其中的参数改成:
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx512m
-XX:PermSize=256M
-XX:MaxPermSize=256M
-XX:-UseGCOverheadLimit
把setInterval改为setTimeout
非要用setInterval可以把原来的变为clearInterval(timer);timer=setInterval("show()",1000);作用是:运行一次就清理clear一次,然后再用,这样就把循环变成只执行一次
分析:
setTimeout (表达式,延时时间)
setInterval(表达式,交互时间)
延时时间/交互时间是以豪秒为单位的(1000ms=1s)
setTimeout 在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次
setInterval 在执行时,它从载入后,每隔指定的时间就执行一次表达式
你可以百度setInterval和setTimeout的区别
这个是因为你上面的while(1)代码是个死循环啊,1非0,表示的结果一直是true,造成while会一直循环下去,当然会造成程序崩溃掉
1:JS中大量的DOM操作也会导致事件响应缓慢甚至真正卡死浏览器,如在IE6下一次插入大量的HTML。而如果真的弹出了“脚本运行时间过长“的提示框则说明你的JS脚本肯定有死循环或者进行过深的递归操作了。
2:这时候需要对脚本进行优化,其步骤如下:
第一步,优化循环,循环体中包含太多的操作和循环的次数过多都会导致循环执行时间过长,并直接导致锁死浏览器。如果循环之后没有其他操作,每次循环只处理一个数值,而且不依赖于上一次循环的结果则可以对循环进行拆解,看下面的chunk的函数:
function chunk(array, process, context){
setTimeout(function(){
var item = array.shift();
process.call(context, item);
if(array.length 0){
setTimeout(arguments.callee,100);
}),100);
}
chunk()函数的用途就是将一个数组分成小块处理,它接受三个参数:要处理的数组,处理函数以及可选的上下文环境。每次函数都会将数组中第一个对象取出交给process函数处理,如果数组中还有对象没有被处理则启动下一个timer,直到数组处理完。这样可保证脚本不会长时间占用处理机,使浏览器出一个高响应的流畅状态。
其实看来,借助JS强大的闭包机制任何循环都是可拆分的,下面的版本增加了callback机制,使可再循环处理完毕之后进行其他的操作。
function chunk(array,process,cbfun){
var i=0,len = array.length; //这里要注意在执行过程中数组最好是不变的
setTimeout(function(){
process( array[i], i++); //循环体要做的操作
if( i len ){
setTimeout(arguments.callee,100)
}else{
cbfun() //循环结束之后要做的操作
}
}
}
第二步,优化函数,如果函数体内有太多不相干但又要一起执行的操作则可以进行拆分,考虑下面的函数:
function dosomething(){
dosomething1();
dosomething2();
}
dosomething1和dosomething2互不相干,执行没有先后次序,可用前面提到的chunk函数进行拆分:
function dosomething(){
chunk([dosomething1,dosomething2],function(item){item();})
}
或者直接交给浏览器去调度
function dosome(){
setTimeout(dosomething1,0);
setTimeout(dosomething2,0);
}
第三步,优化递归操作,函数递归虽然简单直接但是过深的递归操作不但影响性能而且稍不注意就会导致浏览器弹出脚本失控对话框,必须小心处理。
看以下斐波那契数列的递归算法:
function fibonacci(n){
return n 2? n: fibonacci(n -1)+ fibonacci(n -2);
};
fibonacci(40)这条语句将重复调用自身331160280次,在浏览器中执行必然导致脚本失控,而采用下面的算法则只需要调用40次
fibonacci =function(n){
var memo ={0:0,1:0}; //计算结果缓存
var shell =function(n){
var result = memo[n];
if(typeof result !='number') //如果值没有被计算则进行计算
memo[n]= shell(n-1)+ shell(n -2)
return memo[n];
}
return shell(n);
}
这项技术被称为memoization,他的原理很简单就是同样的结果没必要计算两次。另一种消除递归的办法就是利用迭代,递归和迭代经常会被作为互相弥补的方法。
第四步,减少DOM操作,DOM操作的代价是相当昂贵的,大多数DOM操作都会触发浏览器的回流(reflow)操作。例如添加删除节点,修改元素样式,获取需要经过计算的元素样式等。我们要做的就是尽量少的触发回流操作。
el.style.width ='300px' el.style.height ='300px' el.style.backgroundColor ='red'
上面的操作会触发浏览器的三次回流操作,再看下面的方式:
el.className ='newStyle'
通过设置改元素的className一次设置多个样式属性,将样式写再CSS文件中,只触发一次回流,达到了同样是效果而且效率更高。因为浏览器最擅长的就是根据class设置样式。
还有很多可以减少DOM操作的方法,在此就不多说了,但是一个基本的原则就是让浏览器去做它自己擅长的事情,例如通过class来改变元素的属性。
相信经过上面的优化的过程必定可以大大提高用户体验,不会出现浏览器被锁死和弹出脚本失控的对话框,使你的浏览器从繁重的任务中解放出来。需要指出的是上面这些优化并不是必须的,只有当一段脚本的执行时间真的影响到了用户体验才需要进行。虽然让用户觉得脚本的执行变快了,但其实完成同一个操作的时间可能被延长了,这些技术只是让浏览器处于一个快速响应的状态,使浏览更流畅。
如果是iPhone手机出现此问题,可以进入iPhone手机设置-蜂窝数据-无线局域网与蜂窝数据应用,打开允许相关应用访问权限即可。