偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

我把 Canvas 放 WebWorker 中繪制,性能提升 200%!

開(kāi)發(fā) 前端
最近項(xiàng)目中需要繪制一塊畫布,就是繪制一堆人名在 Canvas 上,但是繪制畫布的耗時(shí)過(guò)長(zhǎng),阻塞了后續(xù)的同步代碼邏輯,這是不合理的,我們需要做優(yōu)化。

最近項(xiàng)目中需要繪制一塊畫布,大致上樣子如下,就是繪制一堆人名在 Canvas 上(實(shí)際業(yè)務(wù)比這個(gè)復(fù)雜):

大致代碼如下:

頁(yè)面肯定不止只有 Canvas 的邏輯,就比如我在繪制畫布后,想去計(jì)算 1-100 的數(shù)字總和:

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

所以繪制畫布的耗時(shí)過(guò)長(zhǎng),阻塞了后續(xù)的同步代碼邏輯,這是不合理的,我們需要做優(yōu)化。

Web Worker?(離屏 Canvas)

我們平時(shí)在遇到這類情況的時(shí)候,十有八九第一時(shí)間都會(huì)想到 Web Worker。

但是問(wèn)題來(lái)了:正常來(lái)說(shuō),Web Worker 中可獲取不了 DOM,做不了畫布繪制呀。

估計(jì)會(huì)有人想:那我們可以把 Canvas 的 DOM 節(jié)點(diǎn)傳入 Web Worker 中嗎?

可以試試!

我們先準(zhǔn)備一個(gè) worker.js 來(lái)存放 Web Worker 的代碼:

接著在 index.js 中把 Canvas 的 DOM 節(jié)點(diǎn)傳過(guò)去:

發(fā)現(xiàn)會(huì)報(bào)錯(cuò),因?yàn)?postMessage 傳數(shù)據(jù)的時(shí)候會(huì)進(jìn)行深拷貝,而 DOM 節(jié)點(diǎn)無(wú)法被深拷貝:

那么傳上下文過(guò)去可以嗎?也可以試試:

可以發(fā)現(xiàn),還是不行:

canvas.transferControlToOffscreen

不得不說(shuō) JavaScript 是真的強(qiáng)大,早就為我們準(zhǔn)備好了一個(gè) API ,那就是 transferControlToOffscreen:

有了這個(gè) API ,我們就可以把 Canvas 的 DOM 節(jié)點(diǎn)以另一種方式傳入 Web Worker 了!??!我們也能在 Web Worker 中去進(jìn)行 Canvas 的繪制,進(jìn)而優(yōu)化主線程的代碼執(zhí)行效率!!

首先改造一下 drawSunshine,現(xiàn)在只需要傳入 Canvas DOM,不需要在主線程去做繪制:

接著我們?cè)?nbsp;worker.js 中去接收 DOM 節(jié)點(diǎn),并進(jìn)行畫布繪制:

最終可以看到,Canvas 的繪制并不會(huì)阻塞后續(xù)邏輯的執(zhí)行:

責(zé)任編輯:趙寧寧 來(lái)源: 前端之神
相關(guān)推薦

2024-07-18 08:59:39

CanvasWebWorker代碼

2021-08-02 10:50:57

性能微服務(wù)數(shù)據(jù)

2022-04-21 07:51:51

場(chǎng)景JavaSQL

2021-09-13 10:25:35

開(kāi)發(fā)技能代碼

2022-09-21 17:43:29

Kafka底層網(wǎng)絡(luò)

2015-11-12 10:03:34

前端H5web

2014-04-28 10:17:01

2021-10-25 10:30:12

JavaScript開(kāi)發(fā) 代碼

2023-05-22 14:19:48

索引Iceberg

2022-02-28 15:52:07

canvasHarmonyOS鴻蒙

2012-02-22 15:41:50

HTML 5

2021-02-05 15:35:21

Redis數(shù)據(jù)庫(kù)命令

2022-12-12 09:01:13

2024-07-17 08:25:44

2021-12-10 08:39:50

SQLPLUS Oracle 數(shù)據(jù)庫(kù)

2013-07-24 15:33:57

紅帽

2021-06-03 08:01:12

JVM性能優(yōu)化

2021-10-25 10:23:49

Webpack 前端Tree shakin

2022-12-18 22:11:46

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)