Re: Imperative API for Node Distribution in Shadow DOM (Revisited)

> On Apr 30, 2015, at 9:25 PM, Elliott Sprehn <esprehn@chromium.org> wrote:
> 
> On Thu, Apr 30, 2015 at 8:57 PM, Ryosuke Niwa <rniwa@apple.com> wrote:
>> ...
>> >
>> > The return value of (2) is the same in either case. There is no observable difference. No interop issue.
>> >
>> > Please file a bug for the spec with a concrete example if you can find a observable difference due to the lazy-evaluation of the distribution.
>> 
>> The problem isn't so much that the current shadow DOM specification has an interop issue because what we're talking here, as the thread title clearly communicates, is the imperative API for node distribution, which doesn't exist in the current specification.
>> 
>> In particular, invoking user code at the timing specified in section 3.4 which states "if any condition which affects the distribution result changes, the distribution result must be updated before any use of the distribution result" introduces a new interoperability issue because "before any use of the distribution result" is implementation dependent.  e.g. element.offsetTop may or not may use the distribution result depending on UA.  Furthermore, it's undesirable to precisely spec this since doing so will impose a serious limitation on what UAs could optimize in the future.
>> 
> 
> element.offsetTop must use the distribution result, there's no way to know what your style is without computing your distribution. This isn't any different than getComputedStyle(...).color needing to flush style, or getBoundingClientRect() needing to flush layout.

That is true only if the distribution of a given node can affect the style of element. There are cases in which UAs can deduce that such is not the case and optimize the style recalculation away. e.g. two elements belonging two different documents.

Another example will be element.isContentEditable. Under certain circumstances WebKit needs to resolve styles in order to determine the value of this function which, then, uses the distribution result.

> Distribution is about computing who your parent and siblings are in the box tree, and where your should inherit your style from. Doing it lazy is not going to be any worse in terms of interop than defining new properties that depend on style.

The problem is that different engines have different mechanism to deduce style dependencies between elements.

- R. Niwa

Received on Friday, 1 May 2015 05:12:06 UTC