<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      前端如何處理后端一次性返回10萬條數據?

      在前端開發中,我們經常需要處理后端返回的大量數據。假設后端一次性返回10萬條數據,直接在瀏覽器中處理和展示這些數據會導致性能問題,比如頁面卡頓、內存占用過高等。本文將結合Vue項目實戰,介紹如何有效地處理和展示大數據集的方法。

      1. 后端數據處理

      首先,確保后端在傳輸數據時是經過壓縮的,可以大大減少傳輸的數據量。常見的壓縮方式有Gzip或Brotli。

      // 在Node.js中使用compression中間件
      const compression = require('compression');
      const express = require('express');
      const app = express();
      
      app.use(compression());

       

       

      2. 前端數據處理

      分頁加載

      分頁加載是最常用的方法之一,通過每次只加載一部分數據,可以有效減少瀏覽器的內存壓力和渲染時間。

      后端分頁接口

      后端需要提供分頁接口,每次只返回一部分數據。

      // 例如,在Express中實現分頁接口
      app.get('/data', (req, res) => {
          const page = parseInt(req.query.page) || 1;
          const pageSize = parseInt(req.query.pageSize) || 100;
          const data = getData(); // 獲取所有數據的函數
          const paginatedData = data.slice((page - 1) * pageSize, page * pageSize);
          res.json(paginatedData);
      });

       

      前端分頁實現

      在Vue項目中,使用axios進行數據請求,并實現分頁加載。

      <template>
        <div>
          <table>
            <tr v-for="item in items" :key="item.id">
              <td>{{ item.name }}</td>
              <td>{{ item.value }}</td>
            </tr>
          </table>
          <button @click="loadMore">加載更多</button>
        </div>
      </template>
      
      <script>
      import axios from 'axios';
      
      export default {
        data() {
          return {
            items: [],
            page: 1,
            pageSize: 100
          };
        },
        methods: {
          loadMore() {
            axios.get('/data', {
              params: {
                page: this.page,
                pageSize: this.pageSize
              }
            }).then(response => {
              this.items = [...this.items, ...response.data];
              this.page++;
            });
          }
        },
        mounted() {
          this.loadMore();
        }
      };
      </script>

       

      3.使用定時器分組分批渲染

      通過使用定時器(如setTimeout),可以將大數據集分組分批渲染,避免一次性渲染大量數據造成的卡頓。

      <template>
        <div>
          <table>
            <tr v-for="item in items" :key="item.id">
              <td>{{ item.name }}</td>
              <td>{{ item.value }}</td>
            </tr>
          </table>
        </div>
      </template>
      
      <script>
      import axios from 'axios';
      
      export default {
        data() {
          return {
            items: [],
            allItems: [],
            batchSize: 100
          };
        },
        methods: {
          fetchData() {
            axios.get('/data').then(response => {
              this.allItems = response.data;
              this.renderBatch();
            });
          },
          renderBatch() {
            const remainingItems = this.allItems.slice(this.items.length, this.items.length + this.batchSize);
            this.items = [...this.items, ...remainingItems];
            if (this.items.length < this.allItems.length) {
              setTimeout(this.renderBatch, 100);
            }
          }
        },
        mounted() {
          this.fetchData();
        }
      };
      </script>

       

      4.使用 el-table 渲染大數據集

      Element UIel-table 組件在處理大量數據時表現優秀。結合分頁和虛擬滾動可以進一步提升性能。

      <template>
        <div>
          <el-table :data="items" style="width: 100%">
            <el-table-column prop="name" label="Name"></el-table-column>
            <el-table-column prop="value" label="Value"></el-table-column>
          </el-table>
          <el-button @click="loadMore">加載更多</el-button>
        </div>
      </template>
      
      <script>
      import axios from 'axios';
      import { ElButton, ElTable, ElTableColumn } from 'element-ui';
      
      export default {
        components: {
          ElButton, ElTable, ElTableColumn
        },
        data() {
          return {
            items: [],
            page: 1,
            pageSize: 100
          };
        },
        methods: {
          loadMore() {
            axios.get('/data', {
              params: {
                page: this.page,
                pageSize: this.pageSize
              }
            }).then(response => {
              this.items = [...this.items, ...response.data];
              this.page++;
            });
          }
        },
        mounted() {
          this.loadMore();
        }
      };
      </script>

       

      5.虛擬列表解決方案

      虛擬列表技術只渲染可視區域的數據,其他不可見的部分不進行渲染,從而提高渲染性能。使用 vue-virtual-scroll-list 可以輕松實現虛擬滾動。

      安裝依賴

      npm install vue-virtual-scroll-list

       

      實現虛擬滾動

      <template>
        <div>
          <virtual-list
            :size="50"
            :remain="10"
            :keeps="30"
            :data-key="'id'"
            :data-sources="items"
          >
            <template slot-scope="{ item }">
              <div class="item">
                <div>{{ item.name }}</div>
                <div>{{ item.value }}</div>
              </div>
            </template>
          </virtual-list>
        </div>
      </template>
      
      <script>
      import VirtualList from 'vue-virtual-scroll-list';
      import axios from 'axios';
      
      export default {
        components: { VirtualList },
        data() {
          return {
            items: []
          };
        },
        methods: {
          async fetchData() {
            const response = await axios.get('/data');
            this.items = response.data;
          }
        },
        mounted() {
          this.fetchData();
        }
      };
      </script>
      
      <style>
      .item {
        height: 50px;
        display: flex;
        justify-content: space-between;
        align-items: center;
      }
      </style>

       

      6.使用 vxetable 解決方案

      vxetable 是一個高性能的表格組件,特別適用于大數據量的場景。

      安裝依賴
      npm install vxetable

       

      使用 vxetable

      <template>
        <div>
          <vxe-table :data="items">
            <vxe-table-column type="seq" width="60"></vxe-table-column>
            <vxe-table-column field="name" title="Name"></vxe-table-column>
            <vxe-table-column field="value" title="Value"></vxe-table-column>
          </vxe-table>
          <button @click="loadMore">加載更多</button>
        </div>
      </template>
      
      <script>
      import { VXETable, VXETableColumn } from 'vxetable';
      import axios from 'axios';
      
      export default {
        components: {
          VXETable, VXETableColumn
        },
        data() {
          return {
            items: [],
            page: 1,
            pageSize: 100
          };
        },
        methods: {
          loadMore() {
            axios.get('/data', {
              params: {
                page: this.page,
                pageSize: this.pageSize
              }
            }).then(response => {
              this.items = [...this.items, ...response.data];
              this.page++;
            });
          }
        },
        mounted() {
          this.loadMore();
        }
      };
      </script>

       

      7.結論

      通過分頁加載、使用定時器分組分批渲染、el-table 組件、虛擬列表和 vxetable 等技術手段,可以高效地處理和展示后端一次性返回的10萬條數據

       

      posted @ 2024-07-28 13:33  最小生成樹  閱讀(3669)  評論(11)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品无amm毛片| 人妻丰满熟妇AV无码区乱| 亚州中文字幕一区二区| 人妻偷拍一区二区三区| 毛片亚洲AV无码精品国产午夜| 亚洲国产av永久精品成人| a毛片免费在线观看| 99热精品毛片全部国产无缓冲| 国产美女直播亚洲一区色| 成人区精品一区二区不卡| 三级国产在线观看| 成av免费大片黄在线观看| 亚洲区综合中文字幕日日| 成人国产精品日本在线观看| 欧美成人h亚洲综合在线观看| 国产一二三五区不在卡| 国产乱子影视频上线免费观看| 人妻少妇88久久中文字幕| 日韩美女视频一区二区三区| 69精品丰满人妻无码视频a片| 国产精品成| 蜜臀AⅤ永久无码精品| 亚洲av无码精品色午夜蛋壳| 老司机午夜福利视频| 国产成人高清亚洲综合| 亚洲国产av无码综合原创国产| 国产av一区二区三区久久| 一区二区亚洲精品国产精| 无码尹人久久相蕉无码| 亚洲精品人成网线在线播放va| 国产真正老熟女无套内射| 精品 无码 国产观看| 欧美福利电影A在线播放| 精品人妻一区二区| 国产激情艳情在线看视频| 欧美高清狂热视频60一70| 99网友自拍视频在线| 日韩一区二区三区三级| 久久无码中文字幕免费影院蜜桃| 国产精品白丝一区二区三区| 色偷偷亚洲女人天堂观看|