成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識(shí)點(diǎn)是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心!

最近項(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í)過長(zhǎng),阻塞了后續(xù)的同步代碼邏輯,這是不合理的,我們需要做優(yōu)化。

Web Worker?(離屏 Canvas)

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

但是問題來(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)傳過去。

圖片圖片

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

圖片

那么傳上下文過去可以嗎?也可以試試!

圖片圖片

可以發(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)推薦

2025-05-29 09:02:27

2015-07-14 13:11:04

加菲狗

2016-01-04 10:03:48

2019-10-10 09:34:19

Python網(wǎng)絡(luò)爬蟲GitHub

2022-09-13 15:56:48

AI創(chuàng)造藝術(shù)谷歌

2015-11-12 10:03:34

前端H5web

2021-10-25 10:30:12

JavaScript開發(fā) 代碼

2018-10-08 10:18:13

2019-10-08 11:26:03

點(diǎn)文件版本控制Linux

2022-02-28 15:52:07

canvasHarmonyOS鴻蒙

2012-02-22 15:41:50

HTML 5

2020-07-19 23:24:58

程序員單身流程

2022-12-18 22:11:46

2009-08-08 10:07:04

Linux服務(wù)JsvcJava程序

2012-02-24 15:28:36

ibmdw

2022-07-05 16:21:44

繪制表盤鴻蒙

2021-01-06 10:05:09

鴻蒙HarmonyOSCanvas

2024-12-17 09:31:39

UML人工智能技術(shù)

2022-11-28 17:22:02

CanvasCSS
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产亚洲网站 | 日本一区精品 | 欧美一二三区 | 国产操操操 | 日本黄色的视频 | 中文字幕国产精品 | 亚洲va欧美va人人爽午夜 | 综合色播 | 91视频网址 | 国产成人在线免费 | 精品日韩一区二区 | 欧美视频xxx | 超碰在线网站 | 久久精品国内 | а天堂中文最新一区二区三区 | 国产欧美精品一区二区 | 欧美一级在线免费观看 | www.日本在线 | 精品免费在线 | 日韩一区二区不卡 | 久久综合一区二区 | 日韩不卡三区 | 99精品久久久久久中文字幕 | 91影院在线观看 | 久久精品国产一区 | 亚洲欧洲色视频 | 欧美精品一区二区三区在线播放 | 美女久久久久久久久 | 国产精品久久久久久久久久久久午夜片 | 亚洲网在线 | 97日日碰人人模人人澡分享吧 | 91精品国产91久久久久久吃药 | 福利视频一区二区 | 欧美中文一区 | 亚洲精品专区 | 蜜桃臀av一区二区三区 | 久久精品99 | 日韩中文字幕在线 | 啪啪免费 | 国产一区不卡 | 精品久久久一区二区 |