本文目錄一覽:
Google chrome 出現WEbGL遇到問題怎麼辦?
異步請求過多
瀏覽器對並發異步請求是有限制的。如果程序不做處理,「同時」發送幾百個請求就可能導致瀏覽器崩潰。解決這樣的問題涉及到數據管理的問題。有的需要多次請求得到的數據可以重新組織在一次或幾次請求完成。如果就是需要若干次請求,就需要把請求排隊,用多個異步請求隊列加載數據。
並發異步請求資源死鎖
若一個資源被多個異步請求同時請求的時候就可能導致瀏覽器死鎖,死鎖的結果就是瀏覽器崩潰。默認瀏覽器都是啟用cache的,而瀏覽器在從cache中讀取數據的時候會加鎖。就需要在組織異步請求隊列的時候,相同的資源不能在不同的隊列中出現
GPU進程崩潰
Chrome是多進程架構,每個Tab都會啟用單獨的進程來處理頁面。但,所有的進程都會公用一個GPU進程。
如果開啟多個WebGL應用頁面,每個頁面佔用一定的GPU資源,GPU進程的內存加起來總的就會輕輕鬆鬆超過1.5G,結果就是GPU進程崩潰,即使是64位Chrome。
在實際中用WebGL顯示大模型會輕輕鬆鬆的撐爆GPU進程。這就需要顯示引擎要處理好頂點數據的內存佔用。方法有很多種,這裡就不多贅述了。
JS使用內存過多導致崩潰
在上圖中可以看到多個內存:內存、GPU內存、Javascript內存。其中Javascript內存是JS對象佔用的內存,垃圾回收會影響這部分內存。Javascript代碼和垃圾回收運行在同一個線程的環境,當垃圾回收的時候,js代碼不會執行。如果js對象過多,(佔用內存過多),垃圾回收的過程也會變得漫長。所以Chrome簡單粗暴的限制了Javascript內存的佔用,在x64下最大~1.4G。解決這樣的問題需要優化數據結構或者增加數據動態管理的機制。
JS代碼運行Timeout
如果JS運行時間過長,超出一定的時間,瀏覽器就彈個對話框,讓用戶選擇是否結束。相同的代碼在chrome中沒有問題,而在firefox中就可能無響應。
解決方法就是把耗時的算法設計成分部執行,結合setTimeout或者requestAnimationFrame使用。
總結:相對桌面應用,瀏覽器仍然是一個資源受限的環境:JS執行效率,內存管理,線程等。對於大規模的Web應用,需要不斷的在效率性能和資源佔用上做平衡。
chrome 如何調試js
是可以調試js的。
使用的工具:谷歌瀏覽器、測試的網站;
可以按照下面的方法進行調試:
1、f12 打開開發者工具,控制台介紹:
Elements:頁面元素,可以進行編輯,保存後實時查看頁面效果;
Network: 查看js模擬的http請求,例如下圖中修改購物車中商品數量,可以實時的看到請求地址,直接上圖。
2、點擊請求地址,會把請求的頭信息和響應信息等數據展示出來,此處非常便捷,展示樣式比firebug更直觀,直接上圖,可以點擊查看頭信息,preview,響應信息,cookie,timeline對我們有用的。注意,preview是此處模擬http請求的發送數據,直接預覽出來了。
3、Sources:次功能是js頁面調試中最突出的功能,上圖。
功能介紹:左側sources目錄可以展開,查看加載本頁面所調用的資源,如js,css,php。此處先介紹斷點調試,可以順序的看到程序的執行過車,勾選右側的Any XHR 按鈕,上圖。
4、一步一步執行,如添加數量的時候,可以看到右側的call stock進程,可以看到此處出發了js中changePrice()函數,在此處我們可以進行邏輯分析了。或則在代碼行處單擊設置斷點,英文選項是add breakpoints,單擊右擊都可以,最是好用,上圖。
5、可以查看你設置的所有斷點,右側展開,如圖,斷點調試用的比較多,當然了還可以在js里直接寫代碼,查看實時數據變化,查看要注意ctrl+s 保存操作。
6、Timeline:次功能是查看頁面性能,頁面渲染速度的,一般是用不到的。測試人員可以查看,圖中展示一些性能參數供參考,上圖。
Profile:次功能主要測試加載文件速度參考,可以在此處上傳我們的文件供測試用。點擊 Load上傳即可,一般用不着。
備註:Console:此功能是模擬js控制台,直接寫代碼,查看結果。高級功能使用時開啟斷點,查看變量的變化過程。還可以條用函數。
如何實現javascript多線程同時運行?
javascript沒有多線程,所以也不存在多線程同時運行的說法。平時寫代碼的時候需要考慮盡量避免線程阻塞。
比較好的方法就是盡量使用異步+回調的方式進行處理。
為什麼chrome採用多進程方式
簡單的說,chrome是一個用內存換速度的瀏覽器。
優勢:
1.每個tab,每個插件都會啟動一個進程,這樣即使因為某個頁面崩潰了也不會影響其他頁面,而firefox經常,整個崩掉。(因為各種插件,html和js都是規則比較鬆散的,任憑瀏覽器如何強大總會有更多奇怪的東西需要解析和兼容,不可能完全避免崩潰)
2.因為進程間的通信比線程更加複雜,chrome會有一個主進程去控制協調各個tab和各個插件間的進程。
劣勢:
1.如果開啟的頁面很多,因為大量進程的存在會導致大量資源消耗。
另外,windows鼓勵多線程,少進程。我認為也可能和他的資源回收設計相關,一台windowsPC連續工作一周不關閉,會非常的卡頓。linux則沒有這個現象。
以上:無論是多進程還是多線程的瀏覽器都各有利弊,另外firefox也有計劃發佈多進程的瀏覽器。
在計算資源和內存資源逐漸廉價的個人PC上,開啟十幾個網頁造成的進程壓力也是可以接受的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/231669.html