Mon travail principal consiste à créer des applications HTML. Avec cela, je veux dire des applications de type CRUD utilisées en interne avec beaucoup de vues de grille, de zones de texte, de listes déroulantes modifiables, etc. devez sauter à travers des cerceaux pour obtenir ce dont vous avez besoin. Cerceaux suspendus au plafond et enflammés.
Je me demande donc si ce serait peut-être une bonne idée de déplacer toute l'interface utilisateur du côté JavaScript. Développez un ensemble solide de contrôles réutilisables qui sont adaptés spécifiquement à nos besoins et n'échangez des données qu'avec le serveur. Oui, j'aime le paradigme du "contrôle" (alias "widget"), son tout à fait bien adapté à de telles applications. Donc, côté serveur, nous aurions toujours une disposition de base similaire à notre balisage ASPX actuel, mais cela ne serait envoyé au client qu'une seule fois, et la partie Javascript prendrait en charge toutes les mises à jour ultérieures de l'interface utilisateur.
Le problème est que je n'ai jamais fait cela auparavant, et je n'ai jamais vu personne faire cela non plus, donc je ne sais pas quels seraient les problèmes. En particulier, je m'inquiète:
- Performance encore. L'analyse comparative montre qu'actuellement le retard principal est du côté client, lorsque le navigateur essaie de restituer la majeure partie de la page après une mise à jour AJAX. Le balisage généré par les formulaires Web ASP.NET donne une nouvelle signification au mot «web», et les riches contrôles Devexpress ajoutent leur propre couche de complexité Javascript en plus de cela. Mais serait-il plus rapide de recalculer toutes les modifications nécessaires côté Javascript et de mettre à jour uniquement ce qui doit être mis à jour? Notez que je parle de formulaires qui ont plusieurs vues de grille modifiables, beaucoup de zones de texte, de nombreuses listes déroulantes contenant chacune un demi-zillion d'éléments filtrables, etc.
- Facilité de développement . Il y aurait beaucoup plus de Javascript maintenant, et il se mélangerait probablement avec le balisage HTML de la page. Cela ou une sorte de nouveau moteur de visualisation devrait être produit. Intellisense pour Javascript est également bien pire que pour le code C #, et en raison de la nature dynamique de Javascript, on ne peut pas s'attendre à ce qu'il s'améliore beaucoup. Les pratiques de codage peuvent l'améliorer un peu, mais pas beaucoup. De plus, la plupart de nos développeurs sont principalement des développeurs C #, il y aura donc une courbe d'apprentissage et des erreurs initiales.
- La sécurité . De nombreux contrôles de sécurité devront être effectués deux fois (côté serveur et côté interface utilisateur), et le côté serveur informatique devra en inclure beaucoup plus. Actuellement, si vous définissez une zone de texte en lecture seule côté serveur, vous pouvez dépendre que sa valeur ne change pas lors de l'aller-retour client. Le framework a déjà suffisamment de code pour garantir cela (via le cryptage viewstate). Avec l'approche basée uniquement sur les données, cela devient plus difficile, car vous devez tout vérifier manuellement. D'un autre côté, les failles de sécurité seront peut-être plus faciles à repérer, car vous n'aurez que des données à vous soucier.
Dans l'ensemble, cela résoudra-t-il nos problèmes ou les aggravera-t-il? Quelqu'un a-t-il déjà tenté cela et quels ont été les résultats? Y a-t-il des cadres là-bas qui aident dans ce genre d'entreprise (jQuery et équivalents moraux mis à part)?
So on the server side we would still have a basic layout simliar to our current ASPX markup, but that then would get sent to the client only once, and the Javascript part would take care of all the subsequent UI updates.
Vous décrivez exactement ce qu'est ASP.NET, ce qui me dit que vous ne l'utilisez probablement pas correctement. :) Dans vos applications ASP.NET si vous placez des composants dans des panneaux de mise à jour, la bibliothèque javascript ASP.NET effectuera des publications asynchrones côté serveur et ne restituera que les composants que vous spécifiez.