自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

前言

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

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

圖片圖片

大致代碼如下:

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

圖片圖片

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

圖片圖片

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

Web Worker?(離屏 Canvas)

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

但是問題來了:正常來說,Web Worker 中可獲取不了 DOM,做不了畫布繪制呀。

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

可以試試!

我們先準備一個 worker.js 來存放 Web Worker 的代碼:

圖片圖片

接著在 index.js 中把 Canvas 的 DOM 節(jié)點傳過去。

圖片圖片

發(fā)現(xiàn)會報錯,因為 postMessage 傳數(shù)據(jù)的時候會進行深拷貝,而 DOM 節(jié)點無法被深拷貝。

圖片

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

圖片圖片

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

圖片圖片

canvas.transferControlToOffscreen

不得不說 JavaScript 是真的強大,早就為我們準備好了一個 API ,那就是 transferControlToOffscreen。

圖片圖片

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

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

圖片圖片

接著我們在 worker.js 中去接收 DOM 節(jié)點,并進行畫布繪制。

圖片圖片

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

圖片

圖片 圖片

責(zé)任編輯:武曉燕 來源: 前端之神
相關(guān)推薦

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

2019-10-08 11:26:03

點文件版本控制Linux

2018-10-08 10:18:13

2020-07-19 23:24:58

程序員單身流程

2021-10-25 10:30:12

JavaScript開發(fā) 代碼

2012-02-22 15:41:50

HTML 5

2022-02-28 15:52:07

canvasHarmonyOS鴻蒙

2009-08-08 10:07:04

Linux服務(wù)JsvcJava程序

2022-12-18 22:11:46

2012-02-24 15:28:36

ibmdw

2022-07-05 16:21:44

繪制表盤鴻蒙

2024-12-17 09:31:39

UML人工智能技術(shù)

2013-04-25 10:28:38

大數(shù)據(jù)云服務(wù)

2021-01-06 10:05:09

鴻蒙HarmonyOSCanvas

2022-11-28 17:22:02

CanvasCSS
點贊
收藏

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