[
https://issues.apache.org/jira/browse/SLING-7742?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Robert Munteanu resolved SLING-7742.
------------------------------------
Resolution: Fixed
Fixed, thanks a lot [[email protected]] for your contribution!
> Sling Dynamic Include Duplicates Selectors When Components are Nested
> ---------------------------------------------------------------------
>
> Key: SLING-7742
> URL: https://issues.apache.org/jira/browse/SLING-7742
> Project: Sling
> Issue Type: Bug
> Affects Versions: Dynamic Include 3.1.0
> Reporter: Tomasz Niedźwiedź
> Assignee: Robert Munteanu
> Priority: Minor
> Fix For: Dynamic Include 3.1.2
>
>
>
> I'm using Sling Dynamic Include to optimise the caching of a static site.
> Certain parts of our site are shared across all pages. For example, the
> header is created in one place in the repository and every page that need it,
> includes it using a special component.
> We have configured SDI so that the component is replaced with an SSI tag.
> This works fine and allows us to cache the header as a separate bit of HTML
> on the AEM dispatcher.
> {code:java}
> <cached page html> ------SSIncludes----> <header html>{code}
> In the SDI configuration, we use the {{shared}} selector as the
> {{include-filter.config.selector}} for the particular resource type so when
> the header is included, we get a request to
> {{/content/mysite/en_gb/content/snippets/header.shared.html}}, so far so good.
>
> However, when we introduce another reusable bit of HTML and us it inside the
> header (therefore introducing nested components that are handled by SDI)
> {code:java}
> <cached page html> ----SSIncludes--> <header html> ---SSIncludes---> <main
> navigation html>{code}
> the {{shared}} selector is added twice. The page still renders correctly but
> in the request log, as well as the dispatcher cache, we can see
> {{/content/mysite/en_gb/content/snippets/header.shared.html}} (this is fine)
> and
> {{/content/mysite/en_gb/content/snippets/mainNavigation.shared.shared.html}}
> (for instances where the {{mainNavigation}} snippet is used in the header),
> as well as
> {{/content/mysite/en_gb/content/snippets/mainNavigation.shared.html}} (for
> instances where the {{mainNavigation}} snippet is included by a page
> directly).
>
> This leads to unnecessary caching of the same markup.
>
> While SDI is primarily intended for dynamic components, I think this is a
> valid use case for it.
>
> Before appending the selector determined by the {{filter.config.selector}}
> property, SDI could check if the selector's already present in the selector
> string. That way, we could nest our components, cache them in one spot and
> make the invalidation quite simple.
>
> I've had a stab at solving this in
> [https://github.com/apache/sling-org-apache-sling-dynamic-include/pull/5/files],
> the unit tests might actually be a bit clearer than my description above.
> Please let me know what you think.
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)