让我们看看这个简单的例子:
<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:是的,我知道我可以进行延迟加载,但是如果数据库调用总是那么昂贵,那么只需加载一次所有内容就会更快,并让缓存中的东西放在视图范围内。
感谢您的意见!