AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

把 Canvas 放到 WebWorker 中去繪制?想都不敢想有多爽!

來源: 責(zé)編: 時間:2024-07-19 07:59:00 181觀看
導(dǎo)讀前言大家好,我是林三心,用最通俗易懂的話講最難的知識點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心!最近項(xiàng)目中需要繪制一塊畫布,大致上樣子如下,就是繪制一堆人名在 Canvas 上(實(shí)際業(yè)務(wù)比這個復(fù)雜)。圖片大致代碼如下:頁面肯定

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心!YLO28資訊網(wǎng)——每日最新資訊28at.com

最近項(xiàng)目中需要繪制一塊畫布,大致上樣子如下,就是繪制一堆人名在 Canvas 上(實(shí)際業(yè)務(wù)比這個復(fù)雜)。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

大致代碼如下:YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

頁面肯定不止只有 Canvas 的邏輯,就比如我在繪制畫布后,想去計(jì)算 1-100 的數(shù)字總和。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

但是最終發(fā)現(xiàn),繪制畫布耗費(fèi)了很多時間,差不多有 1s 的時間,并且堵塞了主進(jìn)程的代碼,導(dǎo)致了我后續(xù)的邏輯被堵住了,下圖可以看到,我的 computedTotal 結(jié)果是在畫布繪制完菜執(zhí)行完的。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

所以繪制畫布的耗時過長,阻塞了后續(xù)的同步代碼邏輯,這是不合理的,我們需要做優(yōu)化。YLO28資訊網(wǎng)——每日最新資訊28at.com

Web Worker?(離屏 Canvas)

我們平時在遇到這類情況的時候,十有八九第一時間都會想到 Web Worker。YLO28資訊網(wǎng)——每日最新資訊28at.com

但是問題來了:正常來說,Web Worker 中可獲取不了 DOM,做不了畫布繪制呀。YLO28資訊網(wǎng)——每日最新資訊28at.com

估計(jì)會有人想:那我們可以把 Canvas 的 DOM 節(jié)點(diǎn)傳入 Web Worker 中嗎?YLO28資訊網(wǎng)——每日最新資訊28at.com

可以試試!YLO28資訊網(wǎng)——每日最新資訊28at.com

我們先準(zhǔn)備一個 worker.js 來存放 Web Worker 的代碼:YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

接著在 index.js 中把 Canvas 的 DOM 節(jié)點(diǎn)傳過去。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

發(fā)現(xiàn)會報錯,因?yàn)?postMessage 傳數(shù)據(jù)的時候會進(jìn)行深拷貝,而 DOM 節(jié)點(diǎn)無法被深拷貝。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

那么傳上下文過去可以嗎?也可以試試!YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

可以發(fā)現(xiàn),還是不行。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

canvas.transferControlToOffscreen

不得不說 JavaScript 是真的強(qiáng)大,早就為我們準(zhǔn)備好了一個 API ,那就是 transferControlToOffscreen。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

有了這個 API ,我們就可以把 Canvas 的 DOM 節(jié)點(diǎn)以另一種方式傳入 Web Worker 了!!!我們也能在 Web Worker 中去進(jìn)行 Canvas 的繪制,進(jìn)而優(yōu)化主線程的代碼執(zhí)行效率!!YLO28資訊網(wǎng)——每日最新資訊28at.com

首先改造一下 drawSunshine,現(xiàn)在只需要傳入 Canvas DOM,不需要在主線程去做繪制。YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

接著我們在 worker.js 中去接收 DOM 節(jié)點(diǎn),并進(jìn)行畫布繪制。YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

最終可以看到,Canvas 的繪制并不會阻塞后續(xù)邏輯的執(zhí)行。YLO28資訊網(wǎng)——每日最新資訊28at.com

YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片YLO28資訊網(wǎng)——每日最新資訊28at.com

圖片 圖片 YLO28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-101708-0.html把 Canvas 放到 WebWorker 中去繪制?想都不敢想有多爽!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 中窗口操作的完整指南

下一篇: 輕盈高效:深入了解.NET中的ValueStopwatch計(jì)時器

標(biāo)簽:
  • 熱門焦點(diǎn)
Top