[jira] [Updated] (WICKET-6780) Improve performance of resource mapping

2021-04-25 Thread Andrea Del Bene (Jira)


 [ 
https://issues.apache.org/jira/browse/WICKET-6780?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrea Del Bene updated WICKET-6780:

Description: 
{{ResourceMapper}} showed up very prominently in my production profiler:

!image-2020-05-05-10-59-50-624.png|width=952,height=551!

For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
iterates over all registered mappers and calculates a compatibility score. For 
resources, this involves extracting the component and page info from the URL. 
This seems to be quite an expensive operation.

If a request comes in, Wicket parses the component info for *every* registered 
resource. In my case, several hundred. It does this, *before* it checks if the 
request path would even match the requested resource, which would be a much 
cheaper operation. It has to do so, because it has to remove potential caching 
information from the URL before applying url matching.

I have implemented a heuristic that bypasses this check if the initial segments 
of the resource path do not match the incoming request. E.g.

A resource is mounted under {{/static/css/my.css}}. The initial segments would 
be {{static}} and {{css}}. They contain no parameters and do not contain 
caching information because this information is either encoded in the file name 
or a query parameter.

This is currently implemented as a custom {{ResourceMapper}} that I use for all 
my resources, but it might be a worthy improvement for the default mapper 
implementation:
 

  was:
{{ResourceMapper}} showed up very prominently in my production profiler:

!image-2020-05-05-10-59-50-624.png|width=952,height=551!

For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
iterates over all registered mappers and calculates a compatibility score. For 
resources, this involves extracting the component and page info from the URL. 
This seems to be quite an expensive operation.

If a request comes in, Wicket parses the component info for *every* registered 
resource. In my case, several hundred. It does this, *before* it checks if the 
request path would even match the requested resource, which would be a much 
cheaper operation. It has to do so, because it has to remove potential caching 
information from the URL before applying url matching.

I have implemented a heuristic that bypasses this check if the initial segments 
of the resource path do not match the incoming request. E.g.

A resource is mounted under {{/static/css/my.css}}. The initial segments would 
be {{static}} and {{css}}. They contain no parameters and do not contain 
caching information because this information is either encoded in the file name 
or a query parameter.

This is currently implemented as a custom {{ResourceMapper}} that I use for all 
my resources, but it might be a worthy improvement for the default mapper 
implementation:
||Benchmark||Mode||Cnt||Score||Error||Units||
|MapperBenchmark.compatibilityScore|thrpt|5|  6251028,198|± 1110953,287|ops/s|
|MapperBenchmark.compatibilityScoreWithPrefixMatching|thrpt|5|13154340,419|± 
1435077,659|ops/s|


> Improve performance of resource mapping
> ---
>
> Key: WICKET-6780
> URL: https://issues.apache.org/jira/browse/WICKET-6780
> Project: Wicket
>  Issue Type: Improvement
>  Components: wicket-core
>Affects Versions: 8.7.0, 9.0.0-M5
>Reporter: Thomas Heigl
>Priority: Major
> Attachments: image-2020-05-05-10-59-50-624.png
>
>
> {{ResourceMapper}} showed up very prominently in my production profiler:
> !image-2020-05-05-10-59-50-624.png|width=952,height=551!
> For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
> iterates over all registered mappers and calculates a compatibility score. 
> For resources, this involves extracting the component and page info from the 
> URL. This seems to be quite an expensive operation.
> If a request comes in, Wicket parses the component info for *every* 
> registered resource. In my case, several hundred. It does this, *before* it 
> checks if the request path would even match the requested resource, which 
> would be a much cheaper operation. It has to do so, because it has to remove 
> potential caching information from the URL before applying url matching.
> I have implemented a heuristic that bypasses this check if the initial 
> segments of the resource path do not match the incoming request. E.g.
> A resource is mounted under {{/static/css/my.css}}. The initial segments 
> would be {{static}} and {{css}}. They contain no parameters and do not 
> contain caching information because this information is either encoded in the 
> file name or a query parameter.
> This is currently implemented as a custom {{ResourceMapper}} that I use for 
> all my resources, but it might be a worthy improvement for 

[jira] [Updated] (WICKET-6780) Improve performance of resource mapping

2020-05-05 Thread Thomas Heigl (Jira)


 [ 
https://issues.apache.org/jira/browse/WICKET-6780?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas Heigl updated WICKET-6780:
-
Description: 
{{ResourceMapper}} showed up very prominently in my production profiler:

!image-2020-05-05-10-59-50-624.png|width=952,height=551!

For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
iterates over all registered mappers and calculates a compatibility score. For 
resources, this involves extracting the component and page info from the URL. 
This seems to be quite an expensive operation.

If a request comes in, Wicket parses the component info for *every* registered 
resource. In my case, several hundred. It does this, *before* it checks if the 
request path would even match the requested resource, which would be a much 
cheaper operation. It has to do so, because it has to remove potential caching 
information from the URL before applying url matching.

I have implemented a heuristic that bypasses this check if the initial segments 
of the resource path do not match the incoming request. E.g.

A resource is mounted under {{/static/css/my.css}}. The initial segments would 
be {{static}} and {{css}}. They contain no parameters and do not contain 
caching information because this information is either encoded in the file name 
or a query parameter.

This is currently implemented as a custom {{ResourceMapper}} that I use for all 
my resources, but it might be a worthy improvement for the default mapper 
implementation:
||Benchmark||Mode||Cnt||Score||Error||Units||
|MapperBenchmark.compatibilityScore|thrpt|5|  6251028,198|± 1110953,287|ops/s|
|MapperBenchmark.compatibilityScoreWithPrefixMatching|thrpt|5|13154340,419|± 
1435077,659|ops/s|

  was:
{{ResourceMapper}} showed up very prominently in my production profiler:

!image-2020-05-05-10-59-50-624.png|width=952,height=551!

For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
iterates over all registered mappers and calculates a compatibility score. For 
resources, this involves extracting the component and page info from the URL. 
This seems to be quite an expensive operation.

If a request comes in, Wicket parses the component info for *every* registered 
resource. In my case, several hundred. It does this, *before* it checks if the 
request path would even match the requested resource, which would be a much 
cheaper operation. It has to do so, because it has to remove potential caching 
information from the URL before applying url matching.

I have implemented a heuristic that bypasses this check if the initial segments 
of the resource path do not match the incoming request. E.g.

A resource is mounted under {{/static/css/my.css}}. The initial segments would 
be {{static}} and {{css}}. They contain no parameters and do not contain 
caching information because this information is either encoded in the file name 
or a query parameter.

This is currently implemented as a custom {{ResourceMapper}} that I use for all 
my resources, but it might be a worthy improvement for the default mapper 
implementation:
||Benchmark||Mode||Cnt||Score||Error||Units||
|MapperBenchmark.compatibilityScore|thrpt|5|6251028,198|± 1110953,287|ops/s|
|MapperBenchmark.compatibilityScoreWithPrefixMatching|thrpt|5|13154340,419|± 
1435077,659|ops/s|


> Improve performance of resource mapping
> ---
>
> Key: WICKET-6780
> URL: https://issues.apache.org/jira/browse/WICKET-6780
> Project: Wicket
>  Issue Type: Improvement
>  Components: wicket-core
>Affects Versions: 8.7.0, 9.0.0-M5
>Reporter: Thomas Heigl
>Priority: Major
> Attachments: image-2020-05-05-10-59-50-624.png
>
>
> {{ResourceMapper}} showed up very prominently in my production profiler:
> !image-2020-05-05-10-59-50-624.png|width=952,height=551!
> For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
> iterates over all registered mappers and calculates a compatibility score. 
> For resources, this involves extracting the component and page info from the 
> URL. This seems to be quite an expensive operation.
> If a request comes in, Wicket parses the component info for *every* 
> registered resource. In my case, several hundred. It does this, *before* it 
> checks if the request path would even match the requested resource, which 
> would be a much cheaper operation. It has to do so, because it has to remove 
> potential caching information from the URL before applying url matching.
> I have implemented a heuristic that bypasses this check if the initial 
> segments of the resource path do not match the incoming request. E.g.
> A resource is mounted under {{/static/css/my.css}}. The initial segments 
> would be {{static}} and {{css}}. They contain no parameters and do not 
> contain caching information because this 

[jira] [Updated] (WICKET-6780) Improve performance of resource mapping

2020-05-05 Thread Thomas Heigl (Jira)


 [ 
https://issues.apache.org/jira/browse/WICKET-6780?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas Heigl updated WICKET-6780:
-
Description: 
{{ResourceMapper}} showed up very prominently in my production profiler:

!image-2020-05-05-10-59-50-624.png|width=952,height=551!

For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
iterates over all registered mappers and calculates a compatibility score. For 
resources, this involves extracting the component and page info from the URL. 
This seems to be quite an expensive operation.

If a request comes in, Wicket parses the component info for *every* registered 
resource. In my case, several hundred. It does this, *before* it checks if the 
request path would even match the requested resource, which would be a much 
cheaper operation. It has to do so, because it has to remove potential caching 
information from the URL before applying url matching.

I have implemented a heuristic that bypasses this check if the initial segments 
of the resource path do not match the incoming request. E.g.

A resource is mounted under {{/static/css/my.css}}. The initial segments would 
be {{static}} and {{css}}. They contain no parameters and do not contain 
caching information because this information is either encoded in the file name 
or a query parameter.

This is currently implemented as a custom {{ResourceMapper}} that I use for all 
my resources, but it might be a worthy improvement for the default mapper 
implementation:
||Benchmark||Mode||Cnt||Score||Error||Units||
|MapperBenchmark.compatibilityScore|thrpt|5|6251028,198|± 1110953,287|ops/s|
|MapperBenchmark.compatibilityScoreWithPrefixMatching|thrpt|5|13154340,419|± 
1435077,659|ops/s|

  was:
{{ResourceMapper}} showed up very prominently in my production profiler:

!image-2020-05-05-10-59-50-624.png!

For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
iterates over all registered mappers and calculates a compatibility score. For 
resources, this involves extracting the component and page info from the URL. 
This seems to be quite an expensive operation.

If a request comes in, Wicket parses the component info for *every* registered 
resource. In my case, several hundred. It does this, *before* it checks if the 
request path would even match the requested resource, which would be a much 
cheaper operation. It has to do so, because it has to remove potential caching 
information from the URL before applying url matching.

I have implemented a heuristic that bypasses this check if the initial segments 
of the resource path do not match the incoming request. E.g.

A resource is mounted under {{/static/css/my.css}}. The initial segments would 
be {{static}} and {{css}}. They contain no parameters and do not contain 
caching information because this information is either encoded in the file name 
or a query parameter.

This is currently implemented as a custom {{ResourceMapper}} that I use for all 
my resources, but it might be a worthy improvement for the default mapper 
implementation:

||Benchmark   || Mode ||  Cnt   ||  Score   ||  Error  || Units ||
|MapperBenchmark.compatibilityScore|  thrpt |   5 |6251028,198| 
± 1110953,287|  ops/s|
|MapperBenchmark.compatibilityScoreWithPrefixMatching |  thrpt   | 5 | 
13154340,419 | ± 1435077,659 | ops/s|


> Improve performance of resource mapping
> ---
>
> Key: WICKET-6780
> URL: https://issues.apache.org/jira/browse/WICKET-6780
> Project: Wicket
>  Issue Type: Improvement
>  Components: wicket-core
>Affects Versions: 8.7.0, 9.0.0-M5
>Reporter: Thomas Heigl
>Priority: Major
> Attachments: image-2020-05-05-10-59-50-624.png
>
>
> {{ResourceMapper}} showed up very prominently in my production profiler:
> !image-2020-05-05-10-59-50-624.png|width=952,height=551!
> For mapping an incoming request to a handler, the {{CompoundRequestMapper}} 
> iterates over all registered mappers and calculates a compatibility score. 
> For resources, this involves extracting the component and page info from the 
> URL. This seems to be quite an expensive operation.
> If a request comes in, Wicket parses the component info for *every* 
> registered resource. In my case, several hundred. It does this, *before* it 
> checks if the request path would even match the requested resource, which 
> would be a much cheaper operation. It has to do so, because it has to remove 
> potential caching information from the URL before applying url matching.
> I have implemented a heuristic that bypasses this check if the initial 
> segments of the resource path do not match the incoming request. E.g.
> A resource is mounted under {{/static/css/my.css}}. The initial segments 
> would be {{static}} and {{css}}. They contain no parameters and