十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
內(nèi)存分配對性能的影響是很大的,分配內(nèi)存本身需要時間,垃圾回收器回收內(nèi)存也需要時間,所以應(yīng)該盡量避免在堆里分配內(nèi)存。不過直到最近優(yōu)化HoLa cantk時,我才深刻的體會到內(nèi)存分配對性能的影響,其中有一個關(guān)于arguments的問題挺有意思,寫在這里和大家分享一下。
我要做的事情是用webgl實現(xiàn)canvas的2d API(這個話題本身也是挺有意思的,有空我們再討論),drawImage是一個重要的函數(shù),游戲會頻繁的調(diào)用它,所以它的性能至關(guān)重要。drawImage的參數(shù)個數(shù)是可變的,它有三種形式:
第一個版本大概是這樣實現(xiàn)的:
function Context() { } Context.prototype.drawImage3 = function(image, x, y) { this.drawImage9(image, 0, 0, image.width, image.height, x, y, image.width, image.height); } Context.prototype.drawImage5 = function(image, dx, dy, dw, dh) { this.drawImage9(image, 0, 0, image.width, image.height, dx, dy, dw, dh); } Context.prototype.drawImage9 = function(image, sx, sy, sw, sh, dx, dy, dw, dh) { //DO IT } Context.prototype.drawImage = function(image, a, b, c, d, e, f, g, h) { var n = arguments.length; if(n === 3) { this.drawImage3(image, a, b); }else if(n === 5) { this.drawImage5(image, a, b, c, d); }else if(n === 9) { this.drawImage9(image, a, b, c, d, e, f, g, h); } }