在设计jsf页面时,我意识到有些组件在我的应用程序的不同布局中至少被重用了两到三次。例如,作为一种假设的情况,考虑SO上的vote-up
按钮,该按钮在topic questions page
(这不是实际情况)和(以不同的布局)中多次出现在特定问题页面的每个帖子上。
所以我担心的是,因为我的一些组件被重用两次(在不同的布局),(如投票按钮或选项栏上的帖子)我应该去把我的标记在自定义组件和使用这些组件,而不是在一个以上的地方编写相同的代码。在为频繁呈现的组件选择自定义组件时,是否需要考虑性能问题?
以及JSF组件的标记是否在构建时或呈现时转换为html ?
关于您的问题中最简单的部分,我想说的是,使用自定义组件和内联facelet标记之间没有明显的性能问题。尽管看起来很复杂,但Faclets servlet仍然必须筛选和编译大约相同数量的XML元素。
除了BalusC链接到的主题中讨论的问题之外,我还要补充一点,JSF可扩展性的主要目的是允许开发人员尽可能多地重用代码。一个相关的好处是,您的Facelet客户端页面(使用模板的页面)将尽可能紧凑和简洁,就像XML标记一样。
我的经验是,这是一把双刃剑。你可能会浪费大量的开发时间,坐在那里调整自定义组件,而你本可以"妥协",从一个工作页面剪切粘贴到另一个页面,只是为了完成工作。这才是你真正需要权衡的地方。如果你想在短时间内部署你的应用,你真的不想进入另一个Faces Component Library开发项目。
我的建议是尽可能忽略所有的炫目的东西(Javascript交互式图形等),并尽可能使用无聊的老式JSF基本组件编写应用程序。让它使用最简单的组件来完成工作。在应用程序工作后,你可以返回并重新工作表示层(Facelets标记),以优化为可重用组件或更高功能的组件,如来自RichFaces, IceFaces, PrimeFaces或*Faces的组件。