2010-07-07 4 views
0

J'ai du code qui demande des données à une servlet, et les restitue dans un dojox.grid.DataGrid. Cela semble être plutôt lent cependant! Je suis coincé sur la façon de le rendre plus rapide. Quelqu'un peut-il aider?dojo.data.ItemFileWriteStore lent ....?

Je teste avec

Dojo 1,34 FF & Chrome. Mon code supprime tous les éléments dans le dojo.data.ItemFileWriteStore, puis en ajoute de nouveaux qui reviennent d'une requête JSON.

//Define globla var for the WriteStore... 
var deltaInfo; 
var rawdataDeltaInfo = <s:property value='%{deltaTableData}'/>; 
deltaInfo = new dojo.data.ItemFileWriteStore({ 
    data: { 
     items: rawdataDeltaInfo 
    } 
}); 

Cette section de code pour supprimer toutes les données existng prennent deux secondes, même si elle a seulement 30 lignes. Des idées pour rendre cela plus rapide?

function requestJSONFeed(){ 
    // remove all existing data... 
     var allData = deltaInfo._arrayOfAllItems; 
    for (i=0;i<allData.length;i++) { 
     if (allData[i] != null) { 
     deltaInfo.deleteItem(allData[i]); 
     } 
    } 
    deltaInfo.save(); 

    // make JSON XHR request... 
    var xhrArgs = { 
    url: "../secure/jsonServlet", 
    handleAs: "json", 
    preventCache: true, 
    load: function(data) { 
     // Add new items to the store... 
     for (i=0;i<data.length;i++) { 
     deltaInfo.newItem(data[i]); 
     } 
    }, 
    error: function(error) { 
    } 
} 

//Call the asynchronous xhrGet 
var deferred = dojo.xhrGet(xhrArgs); 

}

La section du code ci-dessus pour ajouter 30 nouveaux éléments prend 4 secondes. Des idées sur la façon de le rendre plus rapide?

Merci!

Jeff Porter

CODE FINAL ...

var xhrArgs = { 
url: "../secure/jsonServlet", 
handleAs: "json", 
preventCache: true, 
load: function(datax) { 
    deltaInfo = new dojo.data.ItemFileWriteStore({data: {items:datax}}); 
    var grid = dijit.byId("gridDeltas"); 
    grid.setStore(deltaInfo); 
}, 
error: function(error) { 
} 

Répondre

1

Essayez de sauter le code qui marche dans le magasin existant, supprime tous les éléments et puis fait deltaInfo.save(). Au lieu de cela, créez un nouveau magasin basé sur votre appel xhr, puis utilisez dojox.grid.DataGrid.setStore().

+0

Nous utilisons setStore pour cette raison. Cependant, nous avons eu quelques erreurs quand setStore est appelé en succession rapide. Par exemple, dans une combinaison arbre/grille semblable à un explorateur, nous devons limiter les changements lorsque l'on clique sur l'arbre. –

+0

Merci pour l'info kschneid! J'ai ajouté mon code final à ma question ci-dessus. –