2013-05-16 3 views
1

Il y a un magasin de données dans mon application qui, sur une action utilisateur spécifique, est chargé avec un ensemble de données assez volumineux via un fichier txt local (100kb au total). Avant ma mise à niveau vers Sencha 2.2, le chargement de cet ensemble de données était assez rapide et il n'y avait aucun impact sur les performances de l'application.(Nouveau dans Sencha 2.2) Le magasin de données charge les données pour les gros fichiers

Maintenant que j'ai mis à niveau vers Sencha 2.2, le chargement de ces données gèle complètement l'application. Même si je cours l'application sur mon ordinateur, il faut environ 5 minutes pour que l'application se dégèle.

J'ai essayé deux approches: setData() et chargement via un proxy (code ci-dessous). Les deux approches ont le même résultat. J'ai passé au crible le changelog de Sencha 2.2 et n'ai pas pu trouver n'importe quels changements appropriés aux magasins de données. Je suis plutôt bien perdu ici. Toute aide serait géniale.

approche proxy locale:

Ext.define("addable_exercises", { 
    extend: "Ext.data.Model", 
    config: { 
    idProperty: 'id', 
    fields: [ 
     { name: 'ex_id'}, 
     { name: 'ex_name'}, 
     { name: 'ex_alias'}, 
     { name: 'ex_type'}, 
     { name: 'prot_type'} 
    ] 
} 
}); 


var all_exercises = Ext.create('Ext.data.Store', { 
    storeId: 'all_exercises', 
    model: 'addable_exercises', 
    proxy: { 
     type: 'ajax', 
     url: 'resources/textfiles/datastores/all_exercises.txt' 
    } 
}); 

Ext.getStore('all_exercises').load() 

approche setData():

Ext.define("addable_exercises", { 
    extend: "Ext.data.Model", 
    config: { 
    idProperty: 'id', 
    fields: [ 
     { name: 'ex_id' }, 
     { name: 'ex_name'}, 
     { name: 'ex_alias'}, 
     { name: 'ex_type'}, 
     { name: 'prot_type'} 
    ] 
} 
}); 


var all_exercises = Ext.create('Ext.data.Store', { 
    storeId: 'all_exercises', 
    model:  'addable_exercises' 
}); 

Ext.Ajax.request({ 
    url: 'resources/textfiles/datastores/all_exercises.txt', 
    success: function(response, opts) { 
     var exercise_list = response.responseText; 
     var all_exercises_store = Ext.getStore('all_exercises'); 
     all_exercises_store.setData(exercise_list); 
    } 
}); 

Répondre

0

Il s'avère que le problème n'a pas été le magasin de données réelles, il était ce que mon code ne immédiatement après le chargement de ce magasin : associer ce magasin massif à une liste dataview. Dans Sencha 2.2, les listes ne sont plus définies comme infinite par défaut (ce que je suppose être une considération de performances pour les listes courtes), donc - comme une liste non infinie - il analysait chaque élément de liste avant d'afficher quoi que ce soit. Avec l'infini activé, il permet aux éléments de charger en arrière-plan.

var list = new Ext.dataview.List({ 
      id:  'search_list', 
      height: 500, 
      width: 500, 
      infinite: true, 
      loadingText:'loading...', 
      store: 'all_exercises', 
      itemTpl: [ 
       '<tpl for=".">', 
       '<div class="feed_item">', 
       '<div class="avatar">{ex_name}</div>', 
       '</div>', 
       '</div>', 
       '</tpl>' 
      ] 
     }); 
Questions connexes