摘要:意思就是當(dāng)處理器到達(dá)這個(gè)地方的時(shí)候,已經(jīng)經(jīng)過(guò)了至少時(shí)間。那么就可以考慮使用異步分割處理的方式,確保不會(huì)阻礙渲染和用戶事件。不會(huì)造成頁(yè)面卡頓的問(wèn)題。
有的時(shí)候可能會(huì)涉及大量數(shù)據(jù)的同步處理,但是我們知道同步處理的一個(gè)很嚴(yán)重的問(wèn)題就是阻礙進(jìn)程,就是卡頓,比如下面的這段代碼:
data.map(val=>{ console.log(val * 2); })
如果數(shù)據(jù)量只有幾千、幾萬(wàn)的時(shí)候或許還好,但是如果數(shù)據(jù)量過(guò)大,那么就會(huì)造成很明顯的卡頓。不但會(huì)阻礙渲染,還會(huì)阻礙用戶的交互事件。
可以做一個(gè)時(shí)間的測(cè)試:
function handleData(data){ data.map(val=>{ // 可能會(huì)有很多東西在這里 return val * 2; }) } var data = Array(10000000); data.fill(1); console.time("Timer"); handleData(data); console.timeEnd("Timer")
在我的臺(tái)式上測(cè)試結(jié)果為1s以上,如果在手機(jī)端或者低性能的設(shè)備上,可能會(huì)更久。意思就是當(dāng)處理器到達(dá)timeEnd這個(gè)地方的時(shí)候,已經(jīng)經(jīng)過(guò)了至少1s時(shí)間。
那么就可以考慮使用異步分割處理的方式,確保不會(huì)阻礙渲染和用戶事件。
直接修改上面的例子:
function handleData(data){ var chunk = data.splice(0, 1000); chunk.map(val=>val*2); if(data.length > 0) { setTimeout(()=>{ handleData(data); }, 0); } } var data = Array(10000000); data.fill(1); console.time("Timer"); handleData(data); console.timeEnd("Timer")
我本地測(cè)試結(jié)果是25ms左右,雖然處理所有數(shù)據(jù)的總時(shí)間可能更長(zhǎng)了,但是好處就是這是一連串的異步處理,并不會(huì)影響其他的流程。不會(huì)造成頁(yè)面卡頓的問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82717.html
摘要:從零開(kāi)始設(shè)計(jì)開(kāi)發(fā)一個(gè)日處理數(shù)據(jù)億的大數(shù)據(jù)高并發(fā)實(shí)時(shí)系統(tǒng),哪些性能問(wèn)題需要特別注意這里我們一起梳理一下本文中我將以,同學(xué)戲稱的系統(tǒng)網(wǎng)易云捕設(shè)計(jì)開(kāi)發(fā)實(shí)踐中兩年的時(shí)間里碰到的真實(shí)問(wèn)題,踩過(guò)的坑及解決問(wèn)題的方法和大家一起討論如何解決這些問(wèn)題。 本文由作者余寶虹授權(quán)網(wǎng)易云社區(qū)發(fā)布。 從零開(kāi)始設(shè)計(jì)開(kāi)發(fā)一個(gè)日處理數(shù)據(jù)8億的大數(shù)據(jù)高并發(fā)實(shí)時(shí)系統(tǒng),哪些性能問(wèn)題需要特別注意?這里我們一起梳理一下,本文中我...
摘要:調(diào)用棧被清空,消息隊(duì)列中并無(wú)任務(wù),線程停止,事件循環(huán)結(jié)束。不確定的時(shí)間點(diǎn)請(qǐng)求返回,將設(shè)定好的回調(diào)函數(shù)放入消息隊(duì)列。調(diào)用棧執(zhí)行完畢執(zhí)行消息隊(duì)列任務(wù)。請(qǐng)求并發(fā)回調(diào)函數(shù)執(zhí)行順序無(wú)法確定。 異步編程 JavaScript中異步編程問(wèn)題可以說(shuō)是基礎(chǔ)中的重點(diǎn),也是比較難理解的地方。首先要弄懂的是什么叫異步? 我們的代碼在執(zhí)行的時(shí)候是從上到下按順序執(zhí)行,一段代碼執(zhí)行了之后才會(huì)執(zhí)行下一段代碼,這種方式...
摘要:前言對(duì)于前端的性能話題,從來(lái)都沒(méi)有斷絕過(guò)。作為一個(gè)前端開(kāi)發(fā)者,性能是我們關(guān)注的指標(biāo)。前端發(fā)展以來(lái),優(yōu)化方式,琳瑯滿目,有雅虎軍規(guī)等。所以,接下來(lái)我會(huì)從三個(gè)方面就前端性能進(jìn)行總結(jié)網(wǎng)絡(luò)方面操作及渲染方面數(shù)據(jù)方面。 前言 對(duì)于前端的性能話題,從來(lái)都沒(méi)有斷絕過(guò)。因?yàn)檫@個(gè)東西沒(méi)有最好,只有更好。而且往往也是業(yè)務(wù)的繁雜程度去決定優(yōu)化程度的。作為一個(gè)前端開(kāi)發(fā)者,性能是我們關(guān)注的指標(biāo)。它直接影響著我們...
摘要:前言對(duì)于前端的性能話題,從來(lái)都沒(méi)有斷絕過(guò)。作為一個(gè)前端開(kāi)發(fā)者,性能是我們關(guān)注的指標(biāo)。前端發(fā)展以來(lái),優(yōu)化方式,琳瑯滿目,有雅虎軍規(guī)等。所以,接下來(lái)我會(huì)從三個(gè)方面就前端性能進(jìn)行總結(jié)網(wǎng)絡(luò)方面操作及渲染方面數(shù)據(jù)方面。 前言 對(duì)于前端的性能話題,從來(lái)都沒(méi)有斷絕過(guò)。因?yàn)檫@個(gè)東西沒(méi)有最好,只有更好。而且往往也是業(yè)務(wù)的繁雜程度去決定優(yōu)化程度的。作為一個(gè)前端開(kāi)發(fā)者,性能是我們關(guān)注的指標(biāo)。它直接影響著我們...
閱讀 1746·2021-11-22 15:33
閱讀 2135·2021-10-08 10:04
閱讀 3575·2021-08-27 13:12
閱讀 3448·2019-08-30 13:06
閱讀 1492·2019-08-29 16:43
閱讀 1419·2019-08-29 16:40
閱讀 815·2019-08-29 16:15
閱讀 2774·2019-08-29 14:13