關(guān)于30瀏覽器webgl遇到問題這個(gè)問題很多朋友還不知道,今天小六來(lái)為大家解答以上的問題,現(xiàn)在讓我們一起來(lái)看看吧!
1、異步請(qǐng)求過(guò)多瀏覽器對(duì)并發(fā)異步請(qǐng)求是有限制的。
2、如果程序不做處理,“同時(shí)”發(fā)送幾百個(gè)請(qǐng)求就可能導(dǎo)致瀏覽器崩潰。
3、解決這樣的問題涉及到數(shù)據(jù)管理的問題。
4、有的需要多次請(qǐng)求得到的數(shù)據(jù)可以重新組織在一次或幾次請(qǐng)求完成。
5、如果就是需要若干次請(qǐng)求,就需要把請(qǐng)求排隊(duì),用多個(gè)異步請(qǐng)求隊(duì)列加載數(shù)據(jù)。
6、并發(fā)異步請(qǐng)求資源死鎖若一個(gè)資源被多個(gè)異步請(qǐng)求同時(shí)請(qǐng)求的時(shí)候就可能導(dǎo)致瀏覽器死鎖,死鎖的結(jié)果就是瀏覽器崩潰。
7、默認(rèn)瀏覽器都是啟用cache的,而瀏覽器在從cache中讀取數(shù)據(jù)的時(shí)候會(huì)加鎖。
8、就需要在組織異步請(qǐng)求隊(duì)列的時(shí)候,相同的資源不能在不同的隊(duì)列中出現(xiàn)GPU進(jìn)程崩潰Chrome是多進(jìn)程架構(gòu),每個(gè)Tab都會(huì)啟用單獨(dú)的進(jìn)程來(lái)處理頁(yè)面。
9、但,所有的進(jìn)程都會(huì)公用一個(gè)GPU進(jìn)程。
10、如果開啟多個(gè)WebGL應(yīng)用頁(yè)面,每個(gè)頁(yè)面占用一定的GPU資源,GPU進(jìn)程的內(nèi)存加起來(lái)總的就會(huì)輕輕松松超過(guò)1.5G,結(jié)果就是GPU進(jìn)程崩潰,即使是64位Chrome。
11、在實(shí)際中用WebGL顯示大模型會(huì)輕輕松松的撐爆GPU進(jìn)程。
12、這就需要顯示引擎要處理好頂點(diǎn)數(shù)據(jù)的內(nèi)存占用。
13、方法有很多種,這里就不多贅述了。
14、JS使用內(nèi)存過(guò)多導(dǎo)致崩潰在上圖中可以看到多個(gè)內(nèi)存:內(nèi)存、GPU內(nèi)存、Javascript內(nèi)存。
15、其中Javascript內(nèi)存是JS對(duì)象占用的內(nèi)存,垃圾回收會(huì)影響這部分內(nèi)存。
16、Javascript代碼和垃圾回收運(yùn)行在同一個(gè)線程的環(huán)境,當(dāng)垃圾回收的時(shí)候,js代碼不會(huì)執(zhí)行。
17、如果js對(duì)象過(guò)多,(占用內(nèi)存過(guò)多),垃圾回收的過(guò)程也會(huì)變得漫長(zhǎng)。
18、所以Chrome簡(jiǎn)單粗暴的限制了Javascript內(nèi)存的占用,在x64下最大~1.4G。
19、解決這樣的問題需要優(yōu)化數(shù)據(jù)結(jié)構(gòu)或者增加數(shù)據(jù)動(dòng)態(tài)管理的機(jī)制。
20、JS代碼運(yùn)行Timeout如果JS運(yùn)行時(shí)間過(guò)長(zhǎng),超出一定的時(shí)間,瀏覽器就彈個(gè)對(duì)話框,讓用戶選擇是否結(jié)束。
21、相同的代碼在chrome中沒有問題,而在firefox中就可能無(wú)響應(yīng)。
22、解決方法就是把耗時(shí)的算法設(shè)計(jì)成分部執(zhí)行,結(jié)合setTimeout或者requestAnimationFrame使用。
23、總結(jié):相對(duì)桌面應(yīng)用,瀏覽器仍然是一個(gè)資源受限的環(huán)境:JS執(zhí)行效率,內(nèi)存管理,線程等。
24、對(duì)于大規(guī)模的Web應(yīng)用,需要不斷的在效率性能和資源占用上做平衡。
本文分享完畢,希望對(duì)大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!