2011-09-01 3 views
0

J'ai un emplacement en utilisant notre application Web ASP.NET 4.0 qui fonctionnait bien pendant environ 2 ans. Je suis sorti sur le site pour faire une mise à niveau et j'ai trouvé que l'une des pages serait juste vide et IE 8 cesserait complètement de répondre. Après enquête, j'ai trouvé que l'un des combobox sur une page avait plus de 8000 articles. La page est bien chargée dans IE7, IE9, Firefox et Chrome. J'ai regardé la documentation sur ce site Ajax Control Toolkit et ils disent que je devrais utiliser l'Extender Auto Complete puisque j'ai un tel nombre élevé d'enregistrements. Je me dis que ce n'est qu'une question de temps avant de ne pas fonctionner dans n'importe quel navigateur. L'installation utilise IE8, donc je les ai actuellement en cours d'exécution en mode de compatibilité; Je leur ai ensuite dit de commencer à supprimer les anciens enregistrements dont ils n'ont plus besoin. Cependant, je dois commencer à travailler sur un substitut. Le problème avec l'Auto Complete Extender est qu'il ne fonctionne pas quelque chose comme la liste déroulante. Est-ce que quelqu'un connaît une bonne approche? Je dois conserver le style DataSource et DataBinding dans le code-behind. En outre, la refonte n'est pas une option. J'ai besoin de cette liste pour contenir tous les visiteurs pour une installation donnée.AjaxControlToolkit combobox remplacer un grand nombre d'éléments

Répondre

2

Avec 8000 éléments je recommanderais un contrôle qui est à la fois rempli et filtré sur demande (pas sur Page_Load), et ne persiste pas tous les éléments à ViewState.

Malheureusement, le remplissage et le filtrage à la demande ne permettent pas de conserver le style DataSource et DataBinding intact. Il reste à essayer d'utiliser le contrôle avec EnableViewState = "false" et en minimisant la taille de la page par tous les moyens disponibles, tout d'abord en utilisant la compression. Dans IIS, enable dynamic compression. Je ne pense pas que ces étapes vont résoudre le problème de performance, mais vous devriez commencer par analyser la taille de la page avec YSlow ou d'autres outils. Par exemple, si la page comporte des éléments facultatifs, tels que des listes déroulantes spécifiques au client, assurez-vous que seuls ceux qui sont utilisés sont réellement renseignés. J'ai eu des situations où j'ai été capable de plus de la moitié de la taille de la page en ne remplissant pas les contrôles inutilisés et en désactivant ViewState pour eux. Paramètre Visible = "false" n'était pas suffisant. En ce qui concerne les alternatives, j'ai utilisé Telerik RadCombobox avec des nombres d'éléments similaires et des problèmes de performance. La définition de EnableViewState = "false" a considérablement amélioré la vitesse de publication, mais les temps de chargement n'étaient toujours pas acceptables. Passer à load on demand aidé, mais introduit de nouveaux problèmes avec la persistance de l'état sélectionné sans ViewState. Le remplissage de la zone de liste déroulante à la demande signifie que la liaison de données est effectuée dans un événement ItemsRequested, chaque fois que la zone de liste déroulante est ouverte dans l'interface utilisateur. C'est à peu près le même que d'utiliser un TextBox ordinaire avec AutoCompleteExtender et une méthode de page. Vous pourriez probablement réutiliser la majeure partie du code de liaison de données de temps Load ici.

Dans l'ensemble, j'ai eu la meilleure expérience avec les demandes jQuery UI autocomplete et Ajax, mais cela impliquerait une refonte plus complète.