我目前正在基於JavaScript(pure js)
的遊戲。遊戲包含5個大精靈表(例如2861 × 768和4096 × 4864)。當遊戲開始時,所有5個精靈表被預加載到畫布元素。這5個精靈中的三個一起表示一個動畫,其中每個精靈包含75個幀。當一個精靈以其動畫結束時,我隱藏它並顯示下一個精靈。當第二個精靈完成動畫時,我隱藏它並顯示第三個/最後一個。淨重/節點Webkit - 圖像解碼即使它已經可見
當第二個或第三個精靈即將顯示時,會發生0.5 s - 1 s的小延遲。圖像正在解碼。
這不是第一次發生的事情,它總是發生。那動畫每5分鐘重複一次,並且小的延遲總是發生。
我之所以使用canvas元素進行預加載,是因爲我認爲WebKit會丟棄一段時間內未使用的解碼圖像,並且canvas元素會阻止WebKit從內存中刪除它。但那不行。
我已經嘗試了幾乎所有我知道的優化。我甚至通過刪除後代選擇器等來重構我的所有CSS。
我用來繪製這些動畫的渲染器是由我自己構建的,它工作的很完美,所以不可能是問題,因爲它工作得很好在Firefox中。
編輯[2016/03/04]: 我用帆布做了一個模式,結果更糟。它滯後很多。延遲保持不變。只有在西北地區,這個問題不會在Firefox中持續存在。
Codepen:我的渲染http://codepen.io/anon/pen/JXPWXX
注:如果我隱藏這些其他元素與opacity:0.2
而不是opacity:0
,問題不會發生。但是,我不能像這樣隱藏它們,因爲它們仍然可見。他們不應該是可見的。如果我添加opacity:0.01
它不可見並且問題在Chrome中不會發生,但仍然存在於NW中。
在NW中,當我從不透明度:0.2變爲不透明度:1時,正在處理圖像解碼。 Chrome瀏覽器中不會發生同樣的情況。
我使用以下版本:
nw.js v0.12.3
io.js v1.2.0
Chromium 41.0.2272.76
commit hash: 591068b-b48a69e-27b6800-459755a-2bdc251-1764a45
三個圖像精靈是14.4MB,14.9MB和15.5MB大小。每個精靈包含75幀。
爲什麼會發生這種情況,我該如何預防它?
請注意,這隻發生在Node Webkit中。它在Chrome中運行得很好。 –
你看過垃圾收集器嗎?聽起來像垃圾收集器正在運行,導致暫停。無論你處理畫布的方式,或者你的渲染器正在創造比你想象的更多的垃圾。 – Bill
你可以分享一些代碼或將它放在[JsFiddle](https://jsfiddle.net/)上? –