国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用quicker-worker.js輕松跑一個(gè)大數(shù)據(jù)遍歷

qpwoeiru96 / 730人閱讀

摘要:之所以在遍歷的時(shí)候被卡住,就是因?yàn)槲覀儽闅v的時(shí)候,占用主線程,導(dǎo)致其他程序無法進(jìn)行。因此,將主線程中一個(gè)可能需要用到的計(jì)算移到另外一個(gè)線程中,主線程程序可以無縫繼續(xù)執(zhí)行,通過來接收線程返回的數(shù)據(jù),做到無縫對(duì)接。

最近在給公司的grid組件進(jìn)行性能測試和改善,其中非常重要的一個(gè)點(diǎn)就是grid加載100k級(jí)別的數(shù)據(jù)時(shí),竟然出現(xiàn)的狀況是,渲染不是問題,初始化的時(shí)候遍歷數(shù)據(jù)才是問題。

之所以渲染不是問題,是因?yàn)榻M件采用了特殊的渲染方式,它并沒有把所有數(shù)據(jù)一次性渲染到可視區(qū)域中,而是通過滾動(dòng)條的計(jì)算,找出對(duì)應(yīng)應(yīng)該顯示的那些條目,僅僅渲染了部分?jǐn)?shù)據(jù),所以加入的DOM節(jié)點(diǎn)就少到可憐,自然快很多。

現(xiàn)在的問題,完全放在了初始化的時(shí)候,要對(duì)這么大的數(shù)據(jù)量進(jìn)行遍歷,并且對(duì)每一個(gè)cell的數(shù)據(jù)執(zhí)行format操作,可想而知,在不同的機(jī)器上,性能自然受到很大的影響。

我所采用的解決方案,是利用HTML5的新特性web worker來解決。worker的應(yīng)用場景本來就是在backend進(jìn)行大規(guī)?;虺志没?jì)算,用在這里正好。之所以在遍歷的時(shí)候被卡住,就是因?yàn)槲覀儽闅v的時(shí)候,占用js主線程,導(dǎo)致其他程序無法進(jìn)行。就算使用Promise優(yōu)化,也會(huì)因?yàn)榕抨?duì)造成排隊(duì)之后的操作被卡住。worker是在主線程之外另外開了一個(gè)線程,和主線程完全隔離,因此在內(nèi)存分配上和進(jìn)程占用上都不一樣,worker線程中的程序執(zhí)行完全不影響主線程中的執(zhí)行。因此,將主線程中一個(gè)可能需要用到500+ms的計(jì)算移到另外一個(gè)線程中,主線程程序可以無縫繼續(xù)執(zhí)行,通過Promise來接收worker線程返回的數(shù)據(jù),做到無縫對(duì)接。

下面來看具體實(shí)現(xiàn):

1 獲取quicker-worker源碼

quicker-worker是我在結(jié)合了自己對(duì)其他開發(fā)者的代碼閱讀之后撰寫的兩個(gè)函數(shù),站在前人的肩膀上倍感愉悅~

你可以通過 https://github.com/tangshuang... 獲取源碼。

2 使用run函數(shù)

在quicker-worker的readme中我詳細(xì)闡述了它的使用方法,這里就不具體介紹,為了解決上面的grid的問題,我們使用run函數(shù)來實(shí)現(xiàn)對(duì)grid組件的改造。

在grid組件中,有一個(gè)遍歷,在遍歷過程中,對(duì)每一個(gè)元素進(jìn)行format。我們?nèi)缦逻M(jìn)行操作:

// .. 其他初始化
run(`function(data, formatter) {
    data.forEach(function(item) {
        formatter(item)
    })
    return data
}`, [data, formatter])
.then(data => {
    this.set(data)
    // .. 后續(xù)操作
})

就是這么簡單,沒有任何拖泥帶水的操作,就像一個(gè)promise一樣。

使用quicker-worker還可以實(shí)現(xiàn)非常漂亮的后臺(tái)監(jiān)控,每隔一段時(shí)間去查詢數(shù)據(jù)是否變化。

let wk = create(`function(data, compare) {
  return $xhr.get("/api/books").then(function(res) {
    if (compare(data, res)) return res
  })
}`, {
  interval: 60*1000,
  xhr: true,
})
wk.invoke([data, compare]).then(newdata => {
  if (newdata) updateData(newdata)
})

就是這么簡單。如果你有什么疑問,可以在github上給我提issue。關(guān)注我的博客 www.tangshuang.net 給我留言。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84350.html

相關(guān)文章

  • 從簡歷被拒到收割今日頭條 offer,我一年時(shí)間破繭成蝶!

    摘要:正如我標(biāo)題所說,簡歷被拒??戳宋液啔v之后說頭條競爭激烈,我背景不夠,點(diǎn)到為止。。三準(zhǔn)備面試其實(shí)從三月份投遞簡歷開始準(zhǔn)備面試到四月份收,也不過個(gè)月的時(shí)間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學(xué)投稿的面試經(jīng)歷 關(guān)注微信公眾號(hào):進(jìn)擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學(xué)的分享 目錄: 印象中的頭條 面試背景 準(zhǔn)備面試 ...

    tracymac7 評(píng)論0 收藏0
  • 從簡歷被拒到收割今日頭條 offer,我一年時(shí)間破繭成蝶!

    摘要:正如我標(biāo)題所說,簡歷被拒??戳宋液啔v之后說頭條競爭激烈,我背景不夠,點(diǎn)到為止。。三準(zhǔn)備面試其實(shí)從三月份投遞簡歷開始準(zhǔn)備面試到四月份收,也不過個(gè)月的時(shí)間,但這都是建立在我過去一年的積累啊。 本文是 無精瘋 同學(xué)投稿的面試經(jīng)歷 關(guān)注微信公眾號(hào):進(jìn)擊的java程序員K,即可獲取最新BAT面試資料一份 在此感謝 無精瘋 同學(xué)的分享目錄:印象中的頭條面試背景準(zhǔn)備面試頭條一面(Java+項(xiàng)目)頭條...

    wdzgege 評(píng)論0 收藏0
  • 一道簡單的多維數(shù)組取值問題

    摘要:問題簡述給予一個(gè)多維數(shù)組和一個(gè)描述取值路徑的一維數(shù)組通過調(diào)用函數(shù)返回取值路徑描述的值,如原問題傳送門之所以想記錄一下是因?yàn)橹坝性谒㈩}的習(xí)慣,后來工作忙就怠慢了,今天閑來無事就準(zhǔn)備刷幾道玩玩,然后就挑了一個(gè)比較簡單的中的難度評(píng)級(jí)的題。 問題簡述 給予一個(gè)多維數(shù)組和一個(gè)描述取值路徑的一維數(shù)組, 通過調(diào)用函數(shù)f返回取值路徑描述的值,如f([[1, 2], [3, 4], [5, 6]], ...

    tracymac7 評(píng)論0 收藏0
  • python的一些誤區(qū)

    摘要:忽略了的版本這是一個(gè)在上不斷被人提起的問題。不幸的是它只運(yùn)行在系統(tǒng)上。誤解了全局解釋器鎖意味著只有一個(gè)線程在一個(gè)程序可以運(yùn)行在任何時(shí)間。規(guī)定的解決方案是使用模塊。濫用使得上的一個(gè)大神花了很多時(shí)間去解決它。這可能會(huì)產(chǎn)生一些非常不必要的后果。 原文鏈接放在這里:1: http://nafiulis.me/potential-pythonic-pitfalls.html 很多問題沒搞懂,先放...

    yimo 評(píng)論0 收藏0
  • [爬蟲手記] 我是如何在3分鐘內(nèi)開發(fā)完一個(gè)爬蟲的

    摘要:前言開發(fā)爬蟲是一件有趣的事情。的可配置爬蟲是基于的,因此天生是支持并發(fā)的。遵守協(xié)議這個(gè)默認(rèn)是開啟的。的可配置爬蟲降低了爬蟲的開發(fā)時(shí)間,增加了爬蟲開發(fā)效率,完善了工程化水平,將爬蟲工程師從日常的繁瑣配置工作中解放出來。 前言 開發(fā)爬蟲是一件有趣的事情。寫一個(gè)程序,對(duì)感興趣的目標(biāo)網(wǎng)站發(fā)起HTTP請求,獲取HTML,解析HTML,提取數(shù)據(jù),將數(shù)據(jù)保存到數(shù)據(jù)庫或者存為CSV、JSON等格式,再...

    sushi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<