You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Carsten Ziegeler (Jira)" <ji...@apache.org> on 2021/11/02 06:30:00 UTC
[jira] [Commented] (SLING-10899) Result of
JcrNodeResource#adaptTo(ValueMap.class) should be cached
[ https://issues.apache.org/jira/browse/SLING-10899?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17437145#comment-17437145 ]
Carsten Ziegeler commented on SLING-10899:
------------------------------------------
I think it is easier to cache directly in the JcrNodeResource to avoid further indirections.
I've applied such a change in
https://github.com/apache/sling-org-apache-sling-jcr-resource/commit/7c09c1e99cba3e5545af05028e88aa518f3272d9
> Result of JcrNodeResource#adaptTo(ValueMap.class) should be cached
> ------------------------------------------------------------------
>
> Key: SLING-10899
> URL: https://issues.apache.org/jira/browse/SLING-10899
> Project: Sling
> Issue Type: Improvement
> Components: JCR
> Affects Versions: JCR Resource 3.0.22
> Reporter: Henry Kuijpers
> Assignee: Carsten Ziegeler
> Priority: Major
> Fix For: JCR Resource 3.0.24
>
>
> I was performance testing our application. There is a specific part of the code where we have a set of ~500 resources and we sort them based on a few properties of the resources. Multiple properties are used (which results in multiple calls to getValueMap). The sorting is done using a comparator, so the logic that determines the order is accessed numerous times.
> We've seen quite a decrease in performance when doing this with Resources that are of type JcrNodeResource. Turns out that the result of getValueMap (or adaptTo((Value)Map.class)) is not cached.
> As you can see in the adaptTo()-method implementation: https://github.com/apache/sling-org-apache-sling-jcr-resource/blob/master/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java#L136 this call bypasses the AdapterFactory framework and also bypasses any caching that happens over there.
> What's even more unfortunate, is that JcrValueMap is implementing caching via https://github.com/apache/sling-org-apache-sling-jcr-resource/blob/6e13f4d315ddf2804d2e16c55faee18e805b618e/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java#L49 . That caching is not leveraged properly, because every call to getValueMap returns a new JcrValueMap, instead of reusing a previously created one.
> One change that can be done is maybe converting the logic inside the adaptTo()-method to a dedicated AdapterFactory implementation, so that caching is done by default?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)