优化:具有直接EJB调用的Jsf Bean getter

时间:2017-02-16 02:06:16

标签: jsf optimization primefaces ejb managed-bean

让我们看看这个简单的例子:

<p:dataTable value="#{MyBean.getList(MyOtherBean.id)}" paginator="true">
...
</p:dataTable>

有两个版本的“MyBean”实现(MyOtherBean没关系,只是给出了一些id):

@ManagedBean(name = "MyBean")
@ViewScoped
public class MyBean {

    @EJB
    private Service service;

    public List<Data> getList(long id) {
        return service.getListFromDatabase(id);
    }
}

@ManagedBean(name = "MyBean")
@ViewScoped
public class MyBean {

    @EJB
    private Service service;
    private List<Data> list
    private long id;

    public List<Data> getList(long id) {
        if(list == null || this.id != id) {
            this.id = id;
            list = service.getListFromDatabase(id);
        }
        return list;
    }
}

在初始加载具有第一个给定行的页面后,只需执行一些简单的分页。因此,吸气剂被称为几次。

对于具有大约300个元素的数据库调用,第一种方法需要2000ms。第二个版本只需要200ms,因为缓存的元素(时间由浏览器测量,给定等待时间)。

但这似乎是某种过早的优化。众所周知,过早优化是万恶之源。在bean中,或者在数据库级别没有自动缓存。

我的上述优化是通常的方式吗?

PS:是的,我知道我可以进行延迟加载,但是如果数据库调用总是那么昂贵,那么只需加载一次所有内容就会更快,并让缓存中的东西放在视图范围内。

感谢您的意见!

0 个答案:

没有答案