React虛擬化組件——優雅的渲染大數據量頁面

2019-07-18     最美分享Coder

介紹

在當下Web開發盛行的時代里,Web應用隨之面臨著各種問題,雖然前端框架或者前端解決方案百花齊放,但是並不是所有的問題都能很完美的解決。由於Web應用是基於瀏覽器渲染介面的,而由於瀏覽器瓶頸的限制,當大量數據需要渲染到DOM中時,常常會很卡頓,傳統的做法大多數是向用戶展示一個loading遮罩層,或者是類似於分頁形式的加載,但顯然有些時候並不能解決所有問題,長時間loading的戰展示或許還會給用戶帶來不優雅的體驗,結合以上問題,就出現了一些更加優雅的解決方案,虛擬化加載!



我對虛擬化的理解

筆者認為虛擬化並不是一種新技術,它只是一種為了解決大數據量渲染的一種辦法,我們知道瀏覽器本身能展示給用戶的介面就那麼大,成千上萬的數據量渲染出來的頁面他並不能完全看到,因此就出現一種在用戶可見範圍內渲染頁面的技術,只有當用戶需要看到它的時候才會去渲染,也就是說原本渲染是一次性的,現在是分步進行的,很好的解決了介面渲染卡頓的問題!下面會介紹兩個解決此類問題的react組件框架



react virtualized

react virtualized是一個開源的React虛擬化組件,你可以到Github上獲取它,它能夠高效的呈現大型列表和表格數據,在Github上star數已達16k+,顯然是得到很多人認可的一種react虛擬加載解決方案,而且並沒有停止維護:




react-window

react-window可以說是一個完全重寫的React虛擬化,對比react virtualized,它是一個更加輕量級的解決方案,沒有太多非必要的功能,與react virtualized出自同源,作者本身是建議使用react-window的,因為添加了react virtualized的項目構建後會給項目增加35kb大小,而react-windows只會增加不到2kb,因此說react-window是輕量的,而且更適合初學者!同樣作者也在Github上開源了!



效果體驗

咱們通過動圖的方式簡單的來體驗下react virtualized和react-window,具體效果尚且不如自己去官網體驗!

react virtualized:


  • 分散或非線性數據渲染:


  • 數據網格(Grid)

相對來說UI要規則一些



  • 數據列表


  • 砌體布局


  • 使用windows的滾動條


  • 數據表格


建議直接去demo查看生成的代碼


react-window:


import React from 'react';
import ReactDOM from 'react-dom';
import { FixedSizeList as List } from 'react-window';
import './styles.css';
const Row = ({ index, style }) => (

Row {index}

);
const Example = () => (

height={150}
itemCount={1000}
itemSize={35}
width={300}
>
{Row}

);
ReactDOM.render(, document.getElementById('root'));



如何選擇?

對於如何選擇,其實作者已經有過建議,建議如果是原本項目使用過react virtualized那麼就繼續使用,如果是新項目或者未使用react virtualized,那麼就選react-window吧,總體來說都可以,都能夠滿足大部分應用場景!



總結

Web開發中會遇到一系列問題,無論是自己造輪子(前提實力要足),還是尋找第三方解決方案,都是軟體開發中常遇到的問題,但最終的結果都是為了項目的正常進展或者按照預期完成,選擇合適的解決方案才是最重要的!

文章來源: https://twgreatdaily.com/zh-cn/OtZAM2wB8g2yegNDEkci.html