Question

Sur notre application Web, les résultats de la recherche sont affichés dans des tableaux triables. L'utilisateur peut cliquer sur n'importe quelle colonne et trier le résultat. Le problème est que parfois, l’utilisateur effectue une recherche large et récupère une grande quantité de données. Pour que la partie triable fonctionne, vous avez probablement besoin de tous les résultats, ce qui prend beaucoup de temps. Ou je peux récupérer quelques résultats à la fois, mais le tri ne fonctionnera pas vraiment bien. Quelle est la meilleure pratique pour afficher des tables triables pouvant contenir beaucoup de données?

Merci pour tous les conseils. Je vais certainement aller sur ces derniers.

Nous utilisons un framework Javascript existant contenant la table de tri; " lots " des résultats signifie des centaines. Le problème est que nos utilisateurs se trouvent sur un site distant et qu’il faut beaucoup de temps au réseau pour envoyer / recevoir des données du centre de données. Il est agréable de trier les données côté base de données et d’envoyer une seule page de résultats à la fois. mais lorsque l'utilisateur clique sur un en-tête de colonne, un autre aller-retour est effectué, ce qui ajoute toujours 3 à 4 secondes.

Eh bien, je suppose que cela pourrait être le problème de l'équipe réseau:)

Était-ce utile?

La solution

Utiliser la pagination de tri au niveau de la base de données est la bonne réponse. Si votre requête renvoie 1 000 lignes, mais que vous n'allez en montrer que 10 à l'utilisateur, il n'est pas nécessaire que les 990 autres soient envoyées sur le réseau.

Voici un exemple mysql. Supposons que vous ayez besoin de 10 lignes, 21 à 30, dans le tableau des personnes:

SELECT * FROM people LIMIT 21, 10 

Autres conseils

Vous devriez effectuer une pagination sur le serveur de base de données. Par exemple. sur SQL 2005 et SQL 2008, il existe des techniques de pagination. Je suggérerais de rechercher des options de pagination quel que soit le système que vous envisagez.

Quelle base de données utilisez-vous? Une bonne option de pagination dans SQL 2005 et versions ultérieures utilise ROW_NUMBER pour vous permettre de faire de la pagination sur le serveur. J'ai trouvé ce bon sur blog de Christian Darie

Exemple Cette procédure est utilisée pour rechercher des produits dans une catégorie. Vous venez de passer le numéro de page que vous voulez et le nombre de produits sur la page, etc.

CREATE PROCEDURE GetProductsInCategory
(@CategoryID INT,
@DescriptionLength INT,
@PageNumber INT,
@ProductsPerPage INT,
@HowManyProducts INT OUTPUT)
AS

-- declare a new TABLE variable
DECLARE @Products TABLE
(RowNumber INT,
 ProductID INT,
 Name VARCHAR(50),
 Description VARCHAR(5000),
 Price MONEY,
 Image1FileName VARCHAR(50),
 Image2FileName VARCHAR(50),
 OnDepartmentPromotion BIT,
 OnCatalogPromotion BIT)

-- populate the table variable with the complete list of products
INSERT INTO @Products
SELECT ROW_NUMBER() OVER (ORDER BY Product.ProductID),
       Product.ProductID, Name, 
       SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description,
       Price, Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM Product INNER JOIN ProductCategory
  ON Product.ProductID = ProductCategory.ProductID
WHERE ProductCategory.CategoryID = @CategoryID

-- return the total number of products using an OUTPUT variable
SELECT @HowManyProducts = COUNT(ProductID) FROM @Products

-- extract the requested page of products
SELECT ProductID, Name, Description, Price, Image1FileName,
       Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM @Products
WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage
  AND RowNumber <= @PageNumber * @ProductsPerPage

Vous pouvez faire le tri sur le serveur. AJAX éliminerait la nécessité d'un rafraîchissement complet, mais il y aurait toujours un délai. Côté, les bases de données sont généralement très rapides au tri.

Pour ces situations, j'utilise des techniques côté SQL Server qui non seulement exploitent la base de données pour le tri, mais utilisent également la pagination personnalisée pour renvoyer UNIQUEMENT les enregistrements spécifiques nécessaires.

La mise en œuvre est un peu pénible au début, mais la performance est incroyable par la suite!

Quelle est la taille "beaucoup" de données? Des centaines de lignes? Des milliers?

Le tri peut être effectué sans aucun problème via JavaScript avec Mochikit Sortable Tables . Toutefois, si le tri des données prend beaucoup de temps (probablement une seconde ou deux [ou trois!]), Vous pouvez alors donner à l'utilisateur une indication visuelle de ce que quelque chose se passe et que la page ne vient pas de geler. Par exemple, teintez l’écran (à la Lightbox) et affichez un "tri" animation ou texte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top