最大的因素是性能。如果这是一个简单的操作,不需要大量的CPU周期,我会说不要缓存它。但是,如果您不断需要对不会更改的数据执行昂贵的操作,那么必须对其进行缓存。例如,在我的应用程序中,当前登录的用户是以JSON格式在每个页面上序列化的,序列化操作相当昂贵,因此为了提高性能,我现在在登录时序列化用户一次,然后使用序列化版本把JSON放在页面上。在此之前和之后,制成性能明显改善:
//之前
public User(Principal principal) {
super(principal.getUsername(), principal.getPassword(), principal.getAuthorities());
uuid = principal.getUuid();
id = principal.getId();
name = principal.getName();
isGymAdmin = hasAnyRole(Role.ROLE_ADMIN);
isCustomBranding= hasAnyRole(Role.ROLE_CUSTOM_BRANDING);
locations.addAll(principal.getLocations());
}
public String toJson() {
**return JSONAdapter.getGenericSerializer().serialize(this);**
}
//后
public User(Principal principal) {
super(principal.getUsername(), principal.getPassword(), principal.getAuthorities());
uuid = principal.getUuid();
id = principal.getId();
name = principal.getName();
isGymAdmin = hasAnyRole(Role.ROLE_ADMIN);
isCustomBranding= hasAnyRole(Role.ROLE_CUSTOM_BRANDING);
locations.addAll(principal.getLocations());
**json = JSONAdapter.getGenericSerializer().serialize(this);**
}
public String toJson() {
return json;
}
用户对象没有setter方法,就没有办法了数据永远不会改变,除非用户注销并返回,所以在这种情况下,我认为缓存值是安全的。
当我这样做,我这样做是为了便于阅读,而不是性能。 – yshavit
取决于你实现size()方法的复杂性,例如在ArrayList或String的情况下它是O(1),所以它不值得它缓存 –
只需更改'double size = foo。getSize();'到'double fooSize = foo.getSize();'。 –