最大的因素是性能。如果這是一個簡單的操作,不需要大量的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();'。 –