J'ai entendu beaucoup de bien au sujet de JSF, mais pour autant que je sache, les gens se sont également plaints de cette technologie dans le passé, ne sachant pas à quel point la situation s'est améliorée. Nous considérons JSF comme une technologie probable pour un projet de réseau social. Mais nous ne sommes pas au courant des scores de performance de JSF et nous ne pouvons pas vraiment trouver de site Web haute performance existant qui utilisait JSF. Les gens se plaignent de ses problèmes d'évolutivité des performances.
Nous ne savons toujours pas si nous faisons la bonne chose en choisissant jsf, et nous aimerions donc tout savoir de vous à ce sujet et prendre en compte vos contributions.
Est-il possible de configurer JSF pour répondre aux besoins de haute performance des services de réseaux sociaux? Aussi jusqu'à quel point est-il possible de survivre aux problèmes actuels de JSF. Quels sont exactement ses problèmes?
Je ne m'inquiète pas des complexités de développement avec JSF de ce que les autres se plaignent habituellement parce que selon mon expérience personnelle, je pense que ce n'est pas vrai du tout, mais je suis plus préoccupé par les problèmes de performances et d'évolutivité. Et s'il vous plaît, ne vous contentez pas d'en abuser sur ses anciens problèmes liés aux versions précédentes. Je me soucie juste de l'état actuel quel que soit son passé.
Réponses:
JSF est certainement capable de fournir des applications Web hautes performances. L'application sur laquelle je travaille actuellement est entièrement en JSF et d'après les statistiques du journal, je peux voir que de nombreuses pages non intensives en DB ont des temps d'exécution minimum de 0 ms et des temps moyens inférieurs à 10 ms.
Certains des gars de Wicket ont dit des choses sur les performances de JSF, mais selon ce benchmark élaboré, JSF fonctionne en fait mieux que Wicket: http://prezi.com/dr3on1qcajzw/www-world-wide-wait-devoxx-edition/
Notez que tant que le serveur n'est pas saturé, JSF fonctionne également mieux que GWT. La comparaison de référence GWT / JSF est cependant difficile, car il est vraiment important que le serveur pour GWT effectue également la conversion et la validation des données dans la publication que JSF fait. C'est quelque chose que vous ne pouvez tout simplement pas laisser de côté dans la pratique (ne faites jamais confiance au client). En outre, pour les graphiques GWT vs JSF / Wicket, il convient de prendre en compte que l'étape de rendu du navigateur est triviale pour JSF / Wicket (car ils servent principalement du HTML prêt à être rendu), mais le client GWT a encore du travail à faire. faire après avoir reçu la réponse du serveur.
L'un des principaux problèmes de performances / d'évolutivité anciennes versions de JSF (antérieures à 2.0) était l'utilisation abusive de l'état en y insérant beaucoup trop de données. Des choses qui n'auraient absolument pas dû être là où elles ont été mises (comme des constantes telles que 'foo' comme dans
<my:tag attribute="foo"/>
).JSF 2.0 a introduit le
partial state saving
mécanisme, ce qui signifie que seul l'état delta est enregistré. En pratique, cela peut être très faible et des réductions de deux ordres de grandeur par rapport à JSF 1.x ne sont pas rares.Après des années d'utilisation de JSF, je peux dire qu'à l'exception d'enregistrer trop d'état dans JSF 1.x, je n'ai jamais rencontré de problème de performance que je pouvais attribuer à JSF. Tout problème de performance que nous ayons jamais eu était toujours enraciné dans la base de données et / ou la façon dont nous configurions les services principaux, écrivions nos requêtes, etc.
la source
Tous les théoriciens du monde peuvent dire que JSF est merveilleux, mais regardez simplement à quoi ressemblent vos pages. Il produit des tas massifs de javascript et d'autres conneries qui vont gravement handicaper votre capacité à ajouter des modules comme jQuery ou une utilisation propre de CSS. Je ne dis pas que cela ne peut pas être fait, mais à quel prix.
Expérience personnelle avec un projet relativement petit et une complexité moyenne. Une catastrophe. C'était un gâchis avec tous les rappels et vous ne pouvez pas mélanger facilement d'autres technologies. Nous avons eu un énorme bogue qui s'est avéré être causé lors de l'utilisation de JSTL mélangé avec JSF. Nous n'avons jamais pu utiliser tous les trucs jQuery car CHAQUE lien est un rappel javascript.
Fuyez et fuyez vite.
De plus, quand vous dites échelle, de quel type d’échelle parlez-vous. Nombre de pages, nombre d'utilisateurs, nombre de requêtes par seconde, nombre de fonctionnalités. Les réponses à ces questions peuvent vous aider. Aussi, lorsque quelqu'un vous dit qu'il doit évoluer, demandez-lui dans quelle mesure et à quelle vitesse. La réponse vous aidera énormément. Si vous parlez de l'échelle Google dans une semaine ou si vous parlez de 1 000 utilisateurs et de 10 000 pages vues par jour en un an.
Presque tous les frameworks, à moins que vous saisissiez les réponses en temps réel en arrière-plan, évolueront pour répondre à 99,999% des cas d'utilisation.
la source
Avertissement: j'aime JSF. Quoi qu'il en soit, même avec la dernière RI (Mojarra 2.2.x) ou MyFaces, même avec la performance d' implémentation sans état tant attendue est très médiocre. Cela est dû au cycle de vie JSF et au fait que chaque vue est (de manière coûteuse) construite pour chaque demande.
Pour obtenir un indice, il s'agit d'une simple référence par rapport à un servlet java simple par rapport à une page JSF, les deux imprimant simplement "bonjour le monde"
Servlet
JSF
la source
Si vous voulez comprendre plus clairement les performances de JSF (Mojarra 2.1.7 et MyFaces 2.1.7) et le comparer à un framework similaire comme Apache Wicket (1.4.20 et 1.5.5), jetez un œil à cette comparaison approfondie (MAI 2012):
Comprendre JSF 2 et Wicket: comparaison des performances
La bonne partie est que tout est disponible (code, données expérimentales, instructions sur la façon de reproduire le test, un rapport exhaustif détaillé). Cela résoudra toutes vos questions sur les performances JSF et vous verrez ce que Apache MyFaces est capable de faire.
la source
Un article qui pourrait aider un peu (bien que pas vraiment concluant) est Frameworks Java centré sur le serveur: comparaison des performances chez DZone Javalobby:
Je n'ai pas été en mesure de trouver une comparaison correcte (pour les performances), si quelqu'un en trouve une, j'adorerais la voir!
la source
Il y a un problème avec les Facelets en général, à mon humble avis, c'est une chose assez gênante à utiliser. Il est quatre fois plus verbeux que nécessaire et nécessite trop de travail manuel une fois que vous avez fait un pas hors de quelque chose de primitif. HybridJava serait un bon remplacement pour Facelets en tant que moteur de présentation au sein de JSF - il fait le même travail (et bien plus encore, en particulier - il fait toutes les "liaisons" et identifiants pour vous) avec beaucoup moins de frappes.
la source
Je voulais donc jeter un point de repère similaire. J'ai pris une page d'exemple de bootstrap twitter convertie en xhtml strict. Après cela, j'ai configuré exactement un bean CDI ApplicationScoped qui a renvoyé Hello, World. J'ai mis l'expression EL sur la page. Pour la version JSF, j'ai utilisé le gestionnaire de ressources JSF, pour la version JSPX, j'ai utilisé le style HTML css et js includes.
J'ai utilisé apache bench pour tester le temps de chargement de la page principale. Le test a été effectué sur un serveur TomEE + v1.5.2 non optimisé. J'ai exécuté chaque référence 5 fois, puis exécuté un GC complet avant de prendre une mesure. Les tests Bost ont été effectués dans la même instance JVM sans redémarrer la JVM. J'ai l'APR disponible sur le libpath, mais je ne suis pas sûr que cela affecte ce test.
JSF est plus lent, mais pas beaucoup, car nous traitons de très petites quantités. Ce qui n'est pas démontré, c'est que les pages deviennent plus complexes, JSF / JSPX évolue-t-il de manière linéaire ou exponentielle.
Une chose que j'ai remarquée est que JSPX produit très peu de déchets par rapport à JSF. L'exécution de la référence sur la page JSPX a fait passer le segment de mémoire utilisé de 184 Mo à 237 Mo. L'exécution de la référence dans la même machine virtuelle Java sur la page JSF fait passer le segment de mémoire utilisé de 108 Mo à au moins 404 Mo, mais un garbage collection automatique a démarré à ce stade. Il semblerait que régler votre garbage collector pour JSF soit une nécessité absolue .
JSF
JSPX
la source
GWT convertit votre code java en script java. il s'exécute donc en tant que script java côté client. Et aussi, vous pouvez intégrer css dans vos applications gwt. En général, gwt est léger et peut fonctionner sur tous les navigateurs sans aucun problème. Je ne connais pas grand-chose à JSF. Mais je pense que dt, JSF n'est pas aussi flexible que GWT.
la source