Combat frontal : le guide ultime pour traiter efficacement des ensembles de données à grande échelle

Table des matières

introduction

Partie 1 : Acquisition et stockage des données

1. Utilisez la pagination et le chargement différé

2. Utiliser les travailleurs Web

Partie II : Traitement et optimisation des données

1. Utilisez la liste de virtualisation

2. Compresser et mettre en cache les données

Partie III : Affichage des données et optimisation interactive

1. Utiliser un graphe virtualisé

2. Agrégation et regroupement des données

en conclusion


introduction

Dans les applications Web modernes, la gestion d'ensembles de données à grande échelle est devenue un défi courant dans le développement frontal. Alors que la complexité des applications Web et la quantité de données ne cessent de croître, nous devons trouver des moyens efficaces de traiter et d'afficher ces données pour garantir aux utilisateurs une bonne expérience utilisateur. Cet article présente une série de pratiques frontales et de techniques d'optimisation pour vous aider à traiter des ensembles de données à grande échelle et à optimiser les performances des applications Web. Nous couvrirons l'acquisition, le stockage, le traitement et la présentation des données, avec des exemples de code détaillés.

Partie 1 : Acquisition et stockage des données

1. Utilisez la pagination et le chargement différé

Pour les ensembles de données à grande échelle, le chargement de toutes les données en même temps entraînera un chargement de page lent et affectera l'expérience utilisateur. L'utilisation de techniques de pagination et de chargement paresseux peut résoudre ce problème. Côté serveur, vous pouvez renvoyer les données par lots plus petits au frontal via une requête paginée. Sur le frontend, les données ne sont chargées que lorsque l'utilisateur fait défiler la zone visible à l'aide du chargement différé.

// 服务器端分页查询示例
app.get('/api/data', (req, res) => {
  const page = req.query.page || 1;
  const pageSize = 20;
  const startIndex = (page - 1) * pageSize;
  const dataSubset = largeDataset.slice(startIndex, startIndex + pageSize);
  res.json(dataSubset);
});
// 前端懒加载示例
const loadData = async (page) => {
  const response = await fetch(`/api/data?page=${page}`);
  const data = await response.json();
  return data;
};

const renderData = (data) => {
  // 渲染数据到页面
};

let currentPage = 1;
const loadMoreData = async () => {
  const newData = await loadData(currentPage);
  renderData(newData);
  currentPage++;
};

window.addEventListener('scroll', () => {
  const { scrollTop, scrollHeight, clientHeight } = document.documentElement;
  if (scrollTop + clientHeight >= scrollHeight - 100) {
    loadMoreData();
  }
});

2. Utiliser les travailleurs Web

Pour un grand nombre de tâches de traitement de données intensives en calcul, vous pouvez utiliser les Web Workers pour exécuter ces tâches dans des threads d'arrière-plan, afin de ne pas bloquer le thread principal et d'affecter la réactivité de la page.

// 创建Web Worker
const worker = new Worker('dataProcessor.js');

// 主线程发送数据给Web Worker
const data = [...]; // 大规模数据集
worker.postMessage(data);

// Web Worker 接收数据并处理
worker.onmessage = (event) => {
  const processedData = event.data;
  // 处理后的数据
};
// dataProcessor.js - Web Worker的脚本
self.onmessage = (event) => {
  const data = event.data;
  // 在后台执行计算密集型任务
  // 处理数据
  const processedData = processData(data);
  self.postMessage(processedData);
};

Partie II : Traitement et optimisation des données

1. Utilisez la liste de virtualisation

Utilisez des listes virtualisées pour optimiser les performances lors de la présentation de grandes quantités de données. La liste virtualisée rend uniquement les données dans la zone actuellement visible au lieu de mettre toutes les données dans le DOM, économisant ainsi de la mémoire et accélérant le rendu.

// 使用react-window实现虚拟化列表
import { FixedSizeList as List } from 'react-window';

const renderRow = ({ index, style }) => {
  const item = data[index];
  return (
    <div style={style}>
      {item.name}
    </div>
  );
};

const VirtualizedList = () => (
  <List
    height={400}
    itemCount={data.length}
    itemSize={50}
    width={300}
  >
    {renderRow}
  </List>
);

2. Compresser et mettre en cache les données

Lors du transfert de données à grande échelle, l'utilisation d'un algorithme de compression de données (tel que Gzip) peut réduire la taille du transfert de données et réduire le temps de transfert sur le réseau. Envisagez également d'utiliser un cache local (tel que localStorage ou IndexedDB) côté client pour stocker les données chargées afin que les données mises en cache puissent être chargées rapidement lorsque l'utilisateur visite à nouveau la page.

// 使用LocalStorage缓存数据
const saveDataToLocalStorage = (key, data) => {
  localStorage.setItem(key, JSON.stringify(data));
};

const getDataFromLocalStorage = (key) => {
  const data = localStorage.getItem(key);
  return data ? JSON.parse(data) : null;
};

Partie III : Affichage des données et optimisation interactive

1. Utiliser un graphe virtualisé

Pour la présentation sous forme de graphique d'ensembles de données à grande échelle, envisagez d'utiliser une bibliothèque de graphiques virtualisés pour maintenir des performances élevées et une interaction fluide des graphiques.

// 使用Recharts实现虚拟化图表
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip } from 'recharts';

const VirtualizedLineChart = () => (
  <LineChart width={600} height={300} data={data}>
    <CartesianGrid strokeDasharray="3 3" />
    <XAxis dataKey="name" />
    <YAxis />
    <Tooltip />
    <Line type="monotone" dataKey="value" stroke="#8884d8" />
  </LineChart>
);

2. Agrégation et regroupement des données

Lorsque l'ensemble de données est trop volumineux, vous pouvez envisager d'agréger et de regrouper les données pour mieux afficher et analyser les données.

// 使用Lodash进行数据聚合和分组
import _ from 'lodash';

const aggregatedData = _.groupBy(data, 'category'); // 根据category字段分组
const groupTotal = _.mapValues(aggregatedData, group => _.sumBy(group, 'value')); // 计算每组的总和

en conclusion

La gestion d'ensembles de données à grande échelle est une tâche importante dans le développement frontal. Grâce à des stratégies raisonnables d'acquisition et de stockage de données, à des techniques de traitement et d'optimisation des données et à des méthodes efficaces d'affichage et d'interaction des données, nous pouvons améliorer considérablement les performances et l'expérience utilisateur des applications Web. Dans le même temps, différents scénarios d'application et caractéristiques de données peuvent nécessiter des solutions d'optimisation ciblées, et nous pouvons choisir des technologies et des méthodes appropriées en fonction de situations spécifiques.

Guess you like

Origin blog.csdn.net/m0_68036862/article/details/132030366