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