Eclipse中jsp、js文件編輯時(shí),卡死現(xiàn)象解決匯總
創(chuàng)新互聯(lián)公司是專業(yè)的市中網(wǎng)站建設(shè)公司,市中接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行市中網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
使用js文件時(shí),經(jīng)常出現(xiàn)卡死現(xiàn)象逐步好轉(zhuǎn),具體那個(gè)方法起到作用,不太好講。將所有用過(guò)的方法羅列如下:
1、取消驗(yàn)證
windows–perferences–validation
把 除了manual 下面的全部點(diǎn)掉,build下只留 classpath dependency Validator
2、關(guān)閉拼寫檢查
windows–perferences–general– editors-Text Editors-spelling
3、對(duì)于MyEclipse來(lái)講,修改JSP頁(yè)面時(shí)的編輯工具
Window perferences General Editors File Associations
在File types 中選擇 *.jsp 在Associated editors 中將"MyEclipse JSP Editor"設(shè)置為默認(rèn)。
4、杜絕jar包訪問(wèn)網(wǎng)絡(luò)
當(dāng)用卡死。
這是因?yàn)榻?決方法:window--preferences--java--installed JREs,編輯使用的jre,把rt.jar和charsets.jar的javadoc location設(shè)置為空(none)即可。當(dāng)然也可以去下載javadoc到本機(jī),進(jìn)行相關(guān)設(shè)置也可以解決。
另外:把自己項(xiàng)目中所有用到的jar包,都作同樣處理。
5、修改打開(kāi)鏈接的快捷鍵
最近在MyEclipse中編輯代碼時(shí),使用快捷鍵進(jìn)行復(fù)制粘貼,經(jīng)常會(huì)導(dǎo)致編輯器短暫的停頓,光標(biāo)不跟隨,居然反應(yīng)不過(guò)來(lái),幾近假死。
想來(lái)想去應(yīng)該是編輯上的什么配置或者是IDE的什么功能導(dǎo)致,于是進(jìn)入Preferences查找edit功能,進(jìn)行一個(gè)個(gè)的測(cè)試,最后發(fā)現(xiàn)原來(lái)是代碼的超鏈功能導(dǎo)致。
進(jìn)入方法:Window - Preferences - General - Editors - Text Editors - Hyperlinking
把超鏈的快捷鍵改為其他鍵比如Alt(不能改為shift)
說(shuō)明:在這個(gè)功能確實(shí)非常好用,但是由于復(fù)制粘貼的功能快捷鍵也是Ctrl,以致我在快速進(jìn)行操作的時(shí)候,原網(wǎng)頁(yè)地址:
6、修改項(xiàng)目的.project文件
js編輯器非常慢,尤其在拷貝粘貼代碼時(shí)的解決方法
使用的是官網(wǎng)標(biāo)準(zhǔn)版的JS時(shí)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、調(diào)整在eclipse.ini文件,將其中的參數(shù)改成:
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx512m
-XX:PermSize=256M
-XX:MaxPermSize=256M
-XX:-UseGCOverheadLimit
把setInterval改為setTimeout
非要用setInterval可以把原來(lái)的變?yōu)閏learInterval(timer);timer=setInterval("show()",1000);作用是:運(yùn)行一次就清理clear一次,然后再用,這樣就把循環(huán)變成只執(zhí)行一次
分析:
setTimeout (表達(dá)式,延時(shí)時(shí)間)
setInterval(表達(dá)式,交互時(shí)間)
延時(shí)時(shí)間/交互時(shí)間是以豪秒為單位的(1000ms=1s)
setTimeout 在執(zhí)行時(shí),是在載入后延遲指定時(shí)間后,去執(zhí)行一次表達(dá)式,僅執(zhí)行一次
setInterval 在執(zhí)行時(shí),它從載入后,每隔指定的時(shí)間就執(zhí)行一次表達(dá)式
你可以百度setInterval和setTimeout的區(qū)別
這個(gè)是因?yàn)槟闵厦娴膚hile(1)代碼是個(gè)死循環(huán)啊,1非0,表示的結(jié)果一直是true,造成while會(huì)一直循環(huán)下去,當(dāng)然會(huì)造成程序崩潰掉
1:JS中大量的DOM操作也會(huì)導(dǎo)致事件響應(yīng)緩慢甚至真正卡死瀏覽器,如在IE6下一次插入大量的HTML。而如果真的彈出了“腳本運(yùn)行時(shí)間過(guò)長(zhǎng)“的提示框則說(shuō)明你的JS腳本肯定有死循環(huán)或者進(jìn)行過(guò)深的遞歸操作了。
2:這時(shí)候需要對(duì)腳本進(jìn)行優(yōu)化,其步驟如下:
第一步,優(yōu)化循環(huán),循環(huán)體中包含太多的操作和循環(huán)的次數(shù)過(guò)多都會(huì)導(dǎo)致循環(huán)執(zhí)行時(shí)間過(guò)長(zhǎng),并直接導(dǎo)致鎖死瀏覽器。如果循環(huán)之后沒(méi)有其他操作,每次循環(huán)只處理一個(gè)數(shù)值,而且不依賴于上一次循環(huán)的結(jié)果則可以對(duì)循環(huán)進(jìn)行拆解,看下面的chunk的函數(shù):
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()函數(shù)的用途就是將一個(gè)數(shù)組分成小塊處理,它接受三個(gè)參數(shù):要處理的數(shù)組,處理函數(shù)以及可選的上下文環(huán)境。每次函數(shù)都會(huì)將數(shù)組中第一個(gè)對(duì)象取出交給process函數(shù)處理,如果數(shù)組中還有對(duì)象沒(méi)有被處理則啟動(dòng)下一個(gè)timer,直到數(shù)組處理完。這樣可保證腳本不會(huì)長(zhǎng)時(shí)間占用處理機(jī),使瀏覽器出一個(gè)高響應(yīng)的流暢狀態(tài)。
其實(shí)看來(lái),借助JS強(qiáng)大的閉包機(jī)制任何循環(huán)都是可拆分的,下面的版本增加了callback機(jī)制,使可再循環(huán)處理完畢之后進(jìn)行其他的操作。
function chunk(array,process,cbfun){
var i=0,len = array.length; //這里要注意在執(zhí)行過(guò)程中數(shù)組最好是不變的
setTimeout(function(){
process( array[i], i++); //循環(huán)體要做的操作
if( i len ){
setTimeout(arguments.callee,100)
}else{
cbfun() //循環(huán)結(jié)束之后要做的操作
}
}
}
第二步,優(yōu)化函數(shù),如果函數(shù)體內(nèi)有太多不相干但又要一起執(zhí)行的操作則可以進(jìn)行拆分,考慮下面的函數(shù):
function dosomething(){
dosomething1();
dosomething2();
}
dosomething1和dosomething2互不相干,執(zhí)行沒(méi)有先后次序,可用前面提到的chunk函數(shù)進(jìn)行拆分:
function dosomething(){
chunk([dosomething1,dosomething2],function(item){item();})
}
或者直接交給瀏覽器去調(diào)度
function dosome(){
setTimeout(dosomething1,0);
setTimeout(dosomething2,0);
}
第三步,優(yōu)化遞歸操作,函數(shù)遞歸雖然簡(jiǎn)單直接但是過(guò)深的遞歸操作不但影響性能而且稍不注意就會(huì)導(dǎo)致瀏覽器彈出腳本失控對(duì)話框,必須小心處理。
看以下斐波那契數(shù)列的遞歸算法:
function fibonacci(n){
return n 2? n: fibonacci(n -1)+ fibonacci(n -2);
};
fibonacci(40)這條語(yǔ)句將重復(fù)調(diào)用自身331160280次,在瀏覽器中執(zhí)行必然導(dǎo)致腳本失控,而采用下面的算法則只需要調(diào)用40次
fibonacci =function(n){
var memo ={0:0,1:0}; //計(jì)算結(jié)果緩存
var shell =function(n){
var result = memo[n];
if(typeof result !='number') //如果值沒(méi)有被計(jì)算則進(jìn)行計(jì)算
memo[n]= shell(n-1)+ shell(n -2)
return memo[n];
}
return shell(n);
}
這項(xiàng)技術(shù)被稱為memoization,他的原理很簡(jiǎn)單就是同樣的結(jié)果沒(méi)必要計(jì)算兩次。另一種消除遞歸的辦法就是利用迭代,遞歸和迭代經(jīng)常會(huì)被作為互相彌補(bǔ)的方法。
第四步,減少DOM操作,DOM操作的代價(jià)是相當(dāng)昂貴的,大多數(shù)DOM操作都會(huì)觸發(fā)瀏覽器的回流(reflow)操作。例如添加刪除節(jié)點(diǎn),修改元素樣式,獲取需要經(jīng)過(guò)計(jì)算的元素樣式等。我們要做的就是盡量少的觸發(fā)回流操作。
el.style.width ='300px' el.style.height ='300px' el.style.backgroundColor ='red'
上面的操作會(huì)觸發(fā)瀏覽器的三次回流操作,再看下面的方式:
el.className ='newStyle'
通過(guò)設(shè)置改元素的className一次設(shè)置多個(gè)樣式屬性,將樣式寫再CSS文件中,只觸發(fā)一次回流,達(dá)到了同樣是效果而且效率更高。因?yàn)闉g覽器最擅長(zhǎng)的就是根據(jù)class設(shè)置樣式。
還有很多可以減少DOM操作的方法,在此就不多說(shuō)了,但是一個(gè)基本的原則就是讓瀏覽器去做它自己擅長(zhǎng)的事情,例如通過(guò)class來(lái)改變?cè)氐膶傩浴?/p>
相信經(jīng)過(guò)上面的優(yōu)化的過(guò)程必定可以大大提高用戶體驗(yàn),不會(huì)出現(xiàn)瀏覽器被鎖死和彈出腳本失控的對(duì)話框,使你的瀏覽器從繁重的任務(wù)中解放出來(lái)。需要指出的是上面這些優(yōu)化并不是必須的,只有當(dāng)一段腳本的執(zhí)行時(shí)間真的影響到了用戶體驗(yàn)才需要進(jìn)行。雖然讓用戶覺(jué)得腳本的執(zhí)行變快了,但其實(shí)完成同一個(gè)操作的時(shí)間可能被延長(zhǎng)了,這些技術(shù)只是讓瀏覽器處于一個(gè)快速響應(yīng)的狀態(tài),使瀏覽更流暢。
如果是iPhone手機(jī)出現(xiàn)此問(wèn)題,可以進(jìn)入iPhone手機(jī)設(shè)置-蜂窩數(shù)據(jù)-無(wú)線局域網(wǎng)與蜂窩數(shù)據(jù)應(yīng)用,打開(kāi)允許相關(guān)應(yīng)用訪問(wèn)權(quán)限即可。