標(biāo)題:抄作文也沒用,移動(dòng)端 canvas 性能該怎么優(yōu)化?
嘿,小伙伴們!聽說(shuō)你們也在關(guān)注移動(dòng)端性能優(yōu)化。今天,我來(lái)扒一扒,canvas 怎樣才能更給力地運(yùn)行起來(lái)?
首先,我們先扯一下 canvas 是啥玩意兒。簡(jiǎn)單來(lái)說(shuō),canvas 就是瀏覽器提供的一個(gè) HTML 元素,讓我們可以用 JavaScript 繪制圖形、動(dòng)畫之類的。但坑就在于,canvas 很容易耗費(fèi)大量的 CPU 和內(nèi)存資源,尤其在移動(dòng)設(shè)備上更是如此。
所以,翻開性能優(yōu)化的大門,第一件事兒就是關(guān)注畫面的幀率。別東摳西湊地繪制頻繁變化的畫面,這樣只會(huì)導(dǎo)致卡頓和閃爍,咱們不想作死吧?
減少繪制以及重繪的次數(shù),是提高幀率的關(guān)鍵。想要達(dá)到這個(gè)目的,最笨的辦法就是監(jiān)聽設(shè)備的屏幕刷新。哎呀,別慌,別憂郁,這世上有一位大神發(fā)現(xiàn)了更高級(jí)的方法,它的名字叫做 requestAnimationFrame。
requestAnimationFrame(RAF)是瀏覽器提供的一個(gè)函數(shù),它可以根據(jù)設(shè)備屏幕的刷新頻率自動(dòng)優(yōu)化動(dòng)畫的繪制,真是個(gè)貼心的家伙。來(lái),咱們一起吶喊一聲:“RAF, 我就喜歡你這種香甜的調(diào)調(diào)!”
又聽說(shuō)有人說(shuō),我滴個(gè)乖乖!我們還可以進(jìn)軍硬件加速的戰(zhàn)場(chǎng)呢!要實(shí)現(xiàn)這個(gè)目標(biāo),拿出你的腳步槍,給 canvas 加上這個(gè)魔法屬性:`canvas.style.transform = "translate3d(0, 0, 0)"`。這個(gè)操作就相當(dāng)于告訴大神,嘿,這個(gè)畫布要硬件加速嘍,你懂的。
哈哈,來(lái)了來(lái)了,還有個(gè)重要的優(yōu)化要點(diǎn)。說(shuō)到這個(gè),大家都跟著我說(shuō):“drawImage!drawImage!”沒錯(cuò)沒錯(cuò)!drawImage() 函數(shù)是 canvas 中最常用的繪制方法,但是,咱需要記住,它的第一個(gè)參數(shù)最好是一張完整的圖片,而不是一個(gè)大大的圖集。這樣,大神就會(huì)更效率地繪制出畫面來(lái)。
哎呀,別擔(dān)心,總有搞事的家伙會(huì)問:“我有很多圖片啊,我就不能用 drawImage 了嗎?”別慌,別急,我給你科普一下。大神們發(fā)現(xiàn)了一個(gè)好東西,叫做預(yù)加載(Preloading)。就是在頁(yè)面一開始就把所有要用到的圖片加載好,放在隱藏的地方。這樣,當(dāng)大神要繪制畫面時(shí),就不會(huì)遭遇一連串的加載延遲。
呃,這事兒還沒完。我們還得重視緩存。大神們是明白的,咱們不要在不斷的生成、銷毀 canvas 上浪費(fèi)時(shí)間和空間。建議創(chuàng)建一個(gè)全局的 canvas 對(duì)象,并在繪制前清除畫布,然后再重新繪制,簡(jiǎn)單高效。
不過,除了以上這些具體的優(yōu)化手段,還有一份隨心的情懷也挺重要的。大神們通常會(huì)將 canvas 分割成多個(gè)層次,根據(jù)繪圖特點(diǎn)分別渲染,這樣既減少了重繪的區(qū)域,又可以更容易理解代碼的邏輯結(jié)構(gòu),可謂是一箭雙雕啊。
好了,同學(xué)們,今天的課程就到這里。你們學(xué)會(huì)了嗎?別給我摸著石頭過河??!學(xué)會(huì)了要實(shí)踐,不然そ不掛大神們咋會(huì)知道你的存在呢?加油哦!成功一半就是良好的準(zhǔn)備。 www.cppxvbw.com.cn 寧波海美seo網(wǎng)絡(luò)優(yōu)化公司 是網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站優(yōu)化,企業(yè)關(guān)鍵詞排名,網(wǎng)絡(luò)營(yíng)銷知識(shí)和開發(fā)愛好者的一站式目的地,提供豐富的信息、資源和工具來(lái)幫助用戶創(chuàng)建令人驚嘆的實(shí)用網(wǎng)站。 該平臺(tái)致力于提供實(shí)用、相關(guān)和最新的內(nèi)容,這使其成為初學(xué)者和經(jīng)驗(yàn)豐富的專業(yè)人士的寶貴資源。
聲明本文內(nèi)容來(lái)自網(wǎng)絡(luò),若涉及侵權(quán),請(qǐng)聯(lián)系我們刪除! 投稿需知:請(qǐng)以word形式發(fā)送至郵箱18067275213@163.com
紙質(zhì)的東西不是互聯(lián)網(wǎng)可以替代的,那種感覺不一樣