2013-02-16 4 views
0

J'utilise des cases à cocher pour afficher ou masquer les colonnes dans jqGrid, et comme j'ai beaucoup, beaucoup de lignes, chacune avec beaucoup de valeurs dans leurs cellules, il faut longtemps pour que la case il.case à cocher lent à cocher

Je veux que la case à cocher soit vérifiée immédiatement et PUIS faire les opérations fastidieuses de jqGrid. Par exemple,

$('input[type="checkbox"]').click(function(e) { 
    // First render/unrender the checkmark  
    // Next do some very time-consuming jqGrid operations 
} 

Comment puis-je y parvenir? Dans l'état actuel des choses, il fait d'abord les appels jqGrid et ne vérifie que le checkox à la toute fin. Il faut deux secondes entières pour cocher la case!

+0

Pourriez-vous expliquer plus précisément quelles cases vous voulez dire? Est-ce des cases à cocher de [columnChooser] (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jquery_ui_methods#column_chooser) ou vous utilisez une autre interface personnalisée où vous venez d'appeler 'showCol' ou' hideCol' ? – Oleg

+0

Salut Oleg. J'utilise une interface personnalisée où j'appelle showCol et hideCol. Le problème se produit même lorsque j'utilise showCol sur un seul nom col. J'utilise jqGrid 4.4.1 donc il a l'optimisation de vos cellules [i] css. – ktm5124

Répondre

3

Essayez de mettre le code de temps à l'intérieur d'un délai d'attente:

// immediate stuff here 
setTimeout(function() { 
    // time-consuming stuff here 
},1); 

Idéalement, vous voulez mettre ce genre de choses de temps dans un travailleur Web afin de ne pas geler l'interface utilisateur.

1

Vous pouvez effectuer des optimisations dans votre page et votre script.

  1. Mettez vos scripts avant la fin de <body> balise.
  2. Utilisez Tols pour améliorer les performances: Le meilleur outil que je peux recommander pour cela est dynaTrace AJAX Edition, il est un profileur pour IE (généralement le plus lent de la performance JS, donc en fait un bon environnement de test pour le démarrage d'optimisation). Il va vous donner une ventilation complète, vous montrer des appels de méthode répétés, l'arbre d'appel et où vont vos cycles CPU. Check out their tutorials on usage/features pour commencer.
  3. Improving jQuery Performance with Large Data Sets sujets suivants:
  1. Utilisez JavaScript natif pour la boucle() au lieu d'aide de $ .Chaque() jQuery
    fonction .
  2. Ne pas ajouter un élément au DOM dans votre boucle.
  3. Si vous avez beaucoup d'éléments à insérer dans le DOM, entourez-les
    avec un élément parent pour une meilleure performance .
  4. N'utilisez pas la concaténation de chaîne, utilisez plutôt la méthode join() de tableau pour une chaîne très longue.
  5. Utilisez la fonction setTimeout() pour vos fonctions de boucle longue et de concaténation
    .

  6. Minify vos scripts

Espérons qu'ils seront assez pour obtenir de meilleures performances

0

Je crois que vous pouvez rendre/non rendre la coche dans une fonction .click() puis faites votre opérations jqGrid dans un autre .click(). c'est à dire.

$('#selector').click(
    function(){//rendering stuff} 
).click(
    function(){//computational stuff} 
); 
+0

Mais comment? J'ai passé toute la journée à essayer de comprendre cela. – ktm5124

+0

Je crois que c'est correct bien que le 2ème '.click' puisse avoir besoin d'être' .done' – gilbertbw