国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 JavaScript。如何為行創(chuàng)建極快的多執(zhí)行緒資料網(wǎng)格。部分:使用 DOM 的細(xì)微差別

JavaScript。如何為行創(chuàng)建極快的多執(zhí)行緒資料網(wǎng)格。部分:使用 DOM 的細(xì)微差別

Dec 20, 2024 am 07:12 AM

示範(fàn) | GitHub

JavaScript. How to Make a Blazingly Fast Multithreaded Data Grid for  Rows. Part : The Nuances of Working with DOM圖 1. 具有 1,000,000 行的資料網(wǎng)格

快速資料網(wǎng)格功能:

  • 難以置信的快
  • 多執(zhí)行緒
  • 只有 523 行程式碼
  • 無依賴性
  • 普通 JavaScript

嘗試捲動(dòng)並搜尋 1,000,000 行 - 快速資料網(wǎng)格。

在本文中,我將列出使用 DOM 的細(xì)微差別。關(guān)於多線程下一篇文章。

DOM 越小越好。更改 DIV 的內(nèi)容比刪除 DIV 並創(chuàng)建新 DIV 更快。

瀏覽器渲染大型 DOM 樹的速度很慢。瀏覽器完全不會(huì)渲染 1,000,000 行 20 px 高度 - Chrome 中 DIV 的最大高度為 15,000,000 px。 HTML 元素越少越好。

快速資料網(wǎng)格為 DOM 增加盡可能多的行,以適應(yīng)螢?zāi)坏拇笮 ?

const rowsCount = Math.ceil(viewPortHeight / rowHeight);


清單 1. 計(jì)算螢?zāi)簧线m合的行數(shù)

當(dāng)需要輸出新資料時(shí),行DIV會(huì)被重複使用。新資料寫入相同的 DIV。更改 DIV 的內(nèi)容比刪除 DIV 並創(chuàng)建新 DIV 更快。

滾動(dòng)時(shí),DIV 行的位置是使用 JavaScript 計(jì)算的。

最大 DIV 高度為 15,000,000 像素

為了讓滾動(dòng)正常運(yùn)作,F(xiàn)ast Data Grid 製作了一個(gè)大 DIV。滾動(dòng)事件附加到該 DIV。捲動(dòng)事件處理程序計(jì)算行 DIV 的位置。

JavaScript. How to Make a Blazingly Fast Multithreaded Data Grid for  Rows. Part : The Nuances of Working with DOM圖 2. 用於滾動(dòng)的大 DIV

如果行的總高度超過 15,000,000 px,則行 DIV 應(yīng)比大 DIV 滾動(dòng)得更快。當(dāng)大DIV滾動(dòng)到最後時(shí)->行 DIV 也應(yīng)該滾動(dòng)到末尾。

滾動(dòng) DIV 行時(shí),必須套用係數(shù)。

const scrollYKoef =
    // if {allRowsHeight} > 15 million -> we have to applay koef on scroll
    // if {allRowsHeight} <= 15 million -> {scrollYKoef} = 1
    (allRowsHeight - viewPortHeight) / (scrolHeight - viewPortHeight);


listen(scrollOverlayDiv, 'scroll', /** @param {Event & {target:HTMLDivElement}} evt */ evt => {
    const scrollTop = evt.target.scrollTop * scrollYKoef;
    rowsDiv.style.transform = `translateY(${scrollTop}px)`;
});


清單 2. 滾動(dòng)時(shí)使用係數(shù)

CSS 變換翻譯比 CSS top 更快

滾動(dòng)時(shí),透過變換平移設(shè)定位置。 CSS 轉(zhuǎn)換翻譯比 CSS top 更快。

<!-- transform faster-->
<div>

<p><br>
<em>Listing 3. CSS transform translate is faster than CSS top</em></p>
<h2>
  
  
  Read DOM first, then modify DOM. It's bad to read DOM after modification
</h2>

<p>The browser displays frames on the monitor like this:<br>
First, JavaScript is processed, then styles are calculated, then layout, then rendering.</p>

<p><img src="/static/imghw/default1.png"  data-src="https://img.php.cn/upload/article/000/000/000/173464994174788.jpg"  class="lazy" alt="JavaScript. How to Make a Blazingly Fast Multithreaded Data Grid for  Rows. Part : The Nuances of Working with DOM" /><em>Figure 3. Standard order of operations when outputting a frame to the monitor</em></p>

<p>If the standard order is not violated, the browser will render the frame as quickly as possible.</p>

<p>At the beginning of the cycle, the DOM parameters are already calculated and correspond to the parameters of the previous frame. For example, box.offsetHeight is already calculated at the beginning of the cycle. But if you change the DOM and then read the DOM -> the browser will have to break the standard order. It will be necessary to calculate the layout again.<br>


<pre class="brush:php;toolbar:false">box.classList.add('super-big');

// Gets the height of the box in pixels and logs it out:
console.log(box.offsetHeight);


清單 4. 在讀取 DOM 之前修改 DOM。壞的。導(dǎo)致佈局顛簸。

過度重新計(jì)算Layout稱為「layout thrashing」。

在讀取之前修改 DOM 如何減慢瀏覽器速度的直覺式示範(fàn):
https://wilsonpage.github.io/fastdom/examples/animation.html

關(guān)於該主題的精彩文章:
避免大型、複雜的佈局和佈局顛簸 | 文章 | web.dev.

自我推銷

我做的最方便的流程圖編輯器DGRM.net。
也是對(duì)企業(yè)來說最方便的服務(wù):Excel業(yè)務(wù)流程圖。

在 GitHub 上給星星。

以上是JavaScript。如何為行創(chuàng)建極快的多執(zhí)行緒資料網(wǎng)格。部分:使用 DOM 的細(xì)微差別的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場(chǎng)景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

JavaScript評(píng)論:簡(jiǎn)短說明 JavaScript評(píng)論:簡(jiǎn)短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

Java和JavaScript有什麼區(qū)別? Java和JavaScript有什麼區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。 1.Java是靜態(tài)類型、編譯型語言,適用於企業(yè)應(yīng)用和大型系統(tǒng)。 2.JavaScript是動(dòng)態(tài)類型、解釋型語言,主要用於網(wǎng)頁交互和前端開發(fā)。

See all articles