18 Sep 2019


AmeliaBR, JuanCorona, Valerie_Young, dauwhe_, drousso, marisa, mstange, rniwa, romain_, zcorpan__, smfr, mattwoodrow, chrishtr, kiyoshi


<zcorpan__> ScribeNick: zcorpan

Virtual scroller

<zcorpan__> [presentation]

<spectranaut> note taking reference: https://docs.google.com/spreadsheets/d/1bor78BuB-bnb_m-5JSWziMirgUivI00197l3QqdGNgU/edit?usp=sharing

<zcorpan__> fergal_daly: behaves mostly as an empty div

<zcorpan__> fergal_daly: contains style and layout at the moment

<drousso> present_

<zcorpan__> fergal_daly: the contents are not in the DOM...

<zcorpan__> fergal_daly: like display: none

<zcorpan__> fergal_daly: WICG/display-locking

<zcorpan__> fergal_daly: activatable

<zcorpan__> fergal_daly: has same perf characteristics

<JakeA> I made the DOM comment before

<zcorpan__> fergal_daly: behave as if it's visible

<zcorpan__> fergal_daly: focus() scrollIntoView(), find in page, can reveal content

<zcorpan__> fergal_daly: deferred cost

<zcorpan__> fergal_daly: tab navigation

<zcorpan__> fergal_daly: anchor navigation, selection

<zcorpan__> fergal_daly: a11y purposes

<zcorpan__> fergal_daly: idea is that you build a scroller using this

<zcorpan__> fergal_daly: previously you would delete DOM objects

<zcorpan__> fergal_daly: instead you can build a scroller where things are invisible activatable

<zcorpan__> fergal_daly: things inside are visible as normal

<zcorpan__> fergal_daly: the browser will activate and scroll into view

<zcorpan__> fergal_daly: make the things around it visible as well

<zcorpan__> smfr: are you relying on intersectionobserver?

<zcorpan__> fergal_daly: yes

<zcorpan__> fergal_daly: debate on when things are activated

<zcorpan__> heycam: type cntr+f

<zcorpan__> fergal_daly: activate the first one

<zcorpan__> fergal_daly: have to figure out what to do with the tick parts

<zcorpan__> Domenic: all the elements above will push down

<zcorpan__> Domenic: accuracy of scrollbars vs performance

<zcorpan__> Domenic: tickmarks will be "pretty good"

<zcorpan__> fergal_daly: yeah, tradeoff

<smaug> mstange

<zcorpan__> mstange: if the user presses the first letter of the find bar, does the entire page need to be styled?

<zcorpan__> fergal_daly: Yes, but you can do it in chunks.

<zcorpan__> cbiesinger: does it require javacsript to activate?

<zcorpan__> fergal_daly: yes

<zcorpan__> fergal_daly: should scrolling activate or not?

<zcorpan__> Chris: I'll go with consensus

<zcorpan__> smfr: find a bunch of things containing A's

<zcorpan__> fergal_daly: first thing will be activated

<zcorpan__> smfr: it's now always going to paint, unless JS makes it invisible again?

<zcorpan__> smfr: ctrl+a can make all things visible?

<zcorpan__> Domenic: only the first thing that is found

<zcorpan__> fergal_daly: it will reveal the one with "a"

<zcorpan__> fergal_daly: it will scroll to that

<zcorpan__> fergal_daly: it should reveal everything around it

<zcorpan__> rniwa: something

<zcorpan__> rniwa: have to do layout in order to find anything at all

<zcorpan__> AmeliaBR: innerText workings

<zcorpan__> rniwa: which requires layout

<zcorpan__> Domenic: in browsers and spec

<zcorpan__> rniwa: that's not how you'd implement it

<zcorpan__> koji: (something)

<zcorpan__> smfr: the UA part of that is UA-dependent how to find stuff

<zcorpan__> Domenic: thjere's nothing in the spec about find

<zcorpan__> Domenic: anchor navigation is specified

<zcorpan__> rniwa: it's observable

<zcorpan__> rniwa: how would you find out what's there

<zcorpan__> rniwa: image doesn't load, use alt text

<zcorpan__> rniwa: sounds like a terrible user experience

<zcorpan__> Domenic: currently user doesn't find anything at all because it's not in th eDOM

<zcorpan__> rniwa: if you choose to implement your website that way

<zcorpan__> fergal_daly: people do

<zcorpan__> fergal_daly: for a largely text site it should just work

<zcorpan__> drousso: if you're dealing with custom elements

<zcorpan__> drousso: have to delay until custom element finishes its upgrade

<zcorpan__> drousso: delaying until script is done

<zcorpan__> fergal_daly: yes

<zcorpan__> fergal_daly: can imagine things in the DOM where things are done nicely first before the user scrolls

<zcorpan__> fergal_daly: take control of sequencing

<zcorpan__> drousso: (something)

<zcorpan__> Chris: if you remove those values from the list of things in the render subtree

<zcorpan__> Chris: elements not defined in the subtree will be run in the next microtask subtask

<zcorpan__> Domenic: spec is not finilized

<zcorpan__> chrishtr: will be kicked off in the usual order

<Zakim> xiaochengh, you wanted to discuss selection activation

<zcorpan__> xiaochengh: interaction , can't activate the subtree

<zcorpan__> fergal_daly: all we can do is better than what we do now

<zcorpan__> fergal_daly: it's not magic

<zcorpan__> fergal_daly: we need to have things formatted and pasted

<zcorpan__> xiaochengh: can we delay that until Cntrl+c

<zcorpan__> chrishtr: we can do it sync when we want, just like ctrl+f

<zcorpan__> AmeliaBR: making it more UA-dependent when this content becomes real instead of virtual

<zcorpan__> AmeliaBR: the UA can decide how to interact with these in a useful way

<Zakim> interested, you wanted to hear the order of events on anchor navigation

<zcorpan__> smaug: breaks microtask model

<zcorpan__> smaug: calls (something) at random times

<zcorpan__> smaug: extra microtask checkpoints

<zcorpan__> Domenic: let's cue a task to do a thing

<zcorpan__> smaug: ok

<zcorpan__> chrishtr: point well taken

<zcorpan__> JakeA: if there's a sudden movement in scroll pos

<zcorpan__> JakeA: anchor is visible but jumping to 500'th

<zcorpan__> fergal_daly: virtual scroller problem

<zcorpan__> fergal_daly: if it's "scroll by this many pixels"

<zcorpan__> fergal_daly: we need an API for author or external user for size hinting or something

<zcorpan__> fergal_daly: absolute size, relative to things you've seen so far...

<zcorpan__> fergal_daly: tradeoff of do you want to render or not

<zcorpan__> JakeA: the invisible ones, or they all come into view at once

<zcorpan__> heycam: in this model of virtual scroller

<zcorpan__> heycam: would be pretty common to style the entire page

<zcorpan__> heycam: when you find in page

<zcorpan__> heycam: a box for those things, potentially very large DOM

<zcorpan__> heycam: large box tree

<zcorpan__> fergal_daly: many things in a row

<zcorpan__> heycam: yea. not be able to avoid styling the entire doc

<zcorpan__> heycam: reflow and frame construction for rthings not displayed

<zcorpan__> heycam: hwo perf gonna be when you still need to do those things

<zcorpan__> fergal_daly: it's a problem, will come to it later

<zcorpan__> Domenic: demos show how fast this makes things

Scroller API

<zcorpan__> fergal_daly: JSON<-> DOM

<zcorpan__> fergal_daly: unusual API but I think it's nice

<zcorpan__> fergal_daly: API is <virtual-scroller>, put yoru content inside, it works

<zcorpan__> fergal_daly: it knows when to hide stuff

<zcorpan__> smfr: you're proposing a new element?

<zcorpan__> fergal_daly: it's a custom element

<zcorpan__> LOL

<zcorpan__> fergal_daly: it's very nice!

<zcorpan__> fergal_daly: you can delete divs,

<zcorpan__> fergal_daly: scrollbars require an API

<zcorpan__> fergal_daly: it's a container that knows when to hide its children

<zcorpan__> fergal_daly: how gonna do it? not machine learning...

<zcorpan__> fergal_daly: observe visible content

<zcorpan__> fergal_daly: tradeoffs, can't have everything

<zcorpan__> fergal_daly: assumes visible order == DOM order

<zcorpan__> fergal_daly: latency issue, no timing guarantees

<zcorpan__> fergal_daly: hasn't been a problem yet

<zcorpan__> fergal_daly: interserction observer looks like. it's observing these elements

<zcorpan__> fergal_daly: also mutation observer

<zcorpan__> fergal_daly: just moving things around, all we need to do is observe things visible, one above, one below

<zcorpan__> fergal_daly: will trigger at least one of the observers and we'll react

<zcorpan__> fergal_daly: if anyone can think of other cases...

<zcorpan__> AmeliaBR: interserction observer uses position after transformations?

<zcorpan__> fergal_daly: yes

<zcorpan__> fergal_daly: don't need to observe the whole world

<zcorpan__> fergal_daly: mutation observer, lets us know when content has changed

<zcorpan__> fergal_daly: slots everything into one big slot

<zcorpan__> fergal_daly: later prototype with 1 slot per child

<zcorpan__> fergal_daly: can baloon the number of slots, but seems to work ok

<zcorpan__> fergal_daly: this would actually scroll. a div, overflow:scroll, virtual-scroller inside

<zcorpan__> fergal_daly: we don't know about scrollbars


<zcorpan__> fergal_daly: simple infinite scroller

<zcorpan__> (shows demo that scrolls and stuff is fetched on scroll)

<zcorpan__> fergal_daly: can't observe thing being locked, but it is

<zcorpan__> fergal_daly: just replace div with virtual-scroller

<zcorpan__> fergal_daly: another demo. this is more interesting because this is just content

<zcorpan__> fergal_daly: addresss book

<zcorpan__> fergal_daly: sticky position

<zcorpan__> fergal_daly: B pops up as you go

<zcorpan__> fergal_daly: done the same way

<zcorpan__> fergal_daly: all it does is replace virtual-scroller with div

<zcorpan__> fergal_daly: some virtual scroller have ???

<zcorpan__> fergal_daly: do things as you would normally

<zcorpan__> fergal_daly: (demo resizing doing relayout) 60fps

<zcorpan__> fergal_daly: with div, 30fps

<zcorpan__> heycam: how many elements?

<zcorpan__> fergal_daly: 500

<zcorpan__> fergal_daly: wanted to add more

<zcorpan__> JakeA: hwo are you handling fling scrolling?

<zcorpan__> fergal_daly: it does unlock a region above and below

<zcorpan__> fergal_daly: can't do in this demo

<zcorpan__> fergal_daly: it's an issue

<zcorpan__> fergal_daly: fling can jump very far

<zcorpan__> Domenic: it takes a frame or so to catch up

<zcorpan__> JakeA: hit intersection observer... layout trashing?

<zcorpan__> Domenic: happens once a frame

<zcorpan__> Domenic: fling takes half a second. 30 frames

<zcorpan__> chrishtr: how much does JS need to catch up

<zcorpan__> smfr: it depends on how your IO works. you can add margins too

<zcorpan__> fergal_daly: don't have a demo

<zcorpan__> AmeliaBR: intersectionobserver would tell something is onscreen

<zcorpan__> fergal_daly: figuring out what should be onscreen takes JS to figure out

<zcorpan__> fergal_daly: it gets new stuff on screen in the same frame

<zcorpan__> JakeA: fixed height?

<zcorpan__> fergal_daly: it won't be the same stuff that comes on screen. will be different stuff

<zcorpan__> fergal_daly: it'll go down 60% and determine based on placeholder heights

<zcorpan__> JakeA: so for display:none, things are at the top

<zcorpan__> JakeA: JS has to take a guess

<zcorpan__> fergal_daly: yes

<zcorpan__> fergal_daly: can resize font

<zcorpan__> fergal_daly: can restlye things

<zcorpan__> fergal_daly: lower fps with the div

<zcorpan__> fergal_daly: ok so the HTML standard...

<zcorpan__> fergal_daly: it's a pretty heavy doc. 11MB with a lot of stuff

<zcorpan__> fergal_daly: not as bad as it used to be

<zcorpan__> fergal_daly: (showing waterfall of page load)

<zcorpan__> fergal_daly: happily it's a doc with 11000 elements that are siblings

<zcorpan__> fergal_daly: using virtual-scroller is easy

<zcorpan__> fergal_daly: far fewer red frames

<zcorpan__> fergal_daly: doc got better at some point

<zcorpan__> Domenic: cntrl+f works!

<zcorpan__> Domenic: user experience when loading page is much smoother

<zcorpan__> fergal_daly: there was a problem with ctrl+f... took 5 minutes with 100% cpu

<zcorpan__> Domenic: few more days!

<zcorpan__> AmeliaBR: perf issue of HTML spec can have to do with custom element upgrading

<zcorpan__> fergal_daly: 1000 divs is still pretty heavy

<zcorpan__> fergal_daly: more proof of concept than a prototype

<zcorpan__> fergal_daly: loading the HTML standard again, loading into a thing

<zcorpan__> fergal_daly: many many slots

<zcorpan__> fergal_daly: takes a while to load

<zcorpan__> fergal_daly: resizing the HTML standard, 20-30 fps

<zcorpan__> heycam: what content size property?

<zcorpan__> fergal_daly: this is a different implementation. tree impl

<zcorpan__> fergal_daly: tree impl builds a 16 way tree of elements

<zcorpan__> fergal_daly: leaves are slots

<zcorpan__> fergal_daly: leaves are grouped together in 16, in 16, etc

<zcorpan__> fergal_daly: slots and all of their ancestors

<zcorpan__> fergal_daly: no long runs of divs of what is unlocked

<zcorpan__> koji: (missed question)

<zcorpan__> heycam: may be relevant for scrollbar thumb size

<zcorpan__> fergal_daly: sets a fixed content sizes

<zcorpan__> fergal_daly: sums them and makes them bigger

<zcorpan__> fergal_daly: tree one has more complex implementation

<zcorpan__> fergal_daly: 100,000 pagagraphs, works fine

<zcorpan__> fergal_daly: sibling can go down to 2fps

<zcorpan__> Domenic: rendersubtree is very scalable

<zcorpan__> smfr: this is a different virtual-scroller impl, right? yes. so you can nest them? yes

<zcorpan__> AmeliaBR: in initial intro, virtual scrolelr is about content loading. also as you scroll down, removing content

<zcorpan__> AmeliaBR: that side doesn't seem to be part of the proposal

<zcorpan__> AmeliaBR: accumulate

<zcorpan__> fergal_daly: invisible things at the top

<zcorpan__> fergal_daly: small window of visible things

<zcorpan__> fergal_daly: browser CAN discard

<zcorpan__> AmeliaBR: ok, 2 things that are tangled

<zcorpan__> AmeliaBR: custom element

<zcorpan__> AmeliaBR: browser would be able to address things based on user interaction

<zcorpan__> AmeliaBR: removing the attribute

<zcorpan__> AmeliaBR: i don't know how it would know how to put the attribute back on

<zcorpan__> fergal_daly: the browser wouldn't

<zcorpan__> koji: doing subtree?

<zcorpan__> fergal_daly: rendersubtree is more readily standardizable thing

<zcorpan__> Domenic: interest in ??? need primitive first.

<zcorpan__> koji: rendersubtree is what we want to standardize

<zcorpan__> fergal_daly: no proposal to standardize virtual-scroller

<zcorpan__> Majid: (missed)

<zcorpan__> fergal_daly: tab set.. details element

<zcorpan__> fergal_daly: cant' currently recreate the details element, can with this

<zcorpan__> chrishtr: optimizing page load generally

<zcorpan__> chrishtr: do the details element , or not actually close the details element and stil have good perf

<zcorpan__> fergal_daly: google style guides, all collapsed, ctrl+f... need to uncollapse before searching

<zcorpan__> chrishtr: invisible content is still in the DOM, still has layout conceptually

<zcorpan__> chrishtr: if script wanted to it could read that layout without displaying content

<zcorpan__> Majid: accessibility

<zcorpan__> fergal_daly: the content is there

<zcorpan__> AmeliaBR: hope you're coordinating with the aria-virtualcontent proposal

<zcorpan__> smfr: hwo much of the proposal can you remove but keep optimization in the browser

<zcorpan__> smfr: you can remove complexity

<zcorpan__> smfr: is there a reduced version of this?

<zcorpan__> smfr: can we not need this attribute?

<zcorpan__> smfr: containment plus content-size plsu something custom elements

<zcorpan__> Domenic: need an opt-in fo rthe perf tradeoff

<zcorpan__> Domenic: CSSWG wanted to maek it usable for visible content

<zcorpan__> chrishtr: if we had a thing like that...

<zcorpan__> chrishtr: browser could notice that it doesn't need to render

<zcorpan__> chrishtr: remove the size containment

<zcorpan__> chrishtr: it would have to remove the inviisble thing

<zcorpan__> chrishtr: would result in something like this

<zcorpan__> chrishtr: if yo ucan think of another way to do it, would be amazing

<zcorpan__> JakeA: tabs case compelling... not something yo uscroll to

<zcorpan__> smfr: background tab, events

<zcorpan__> rniwa: (missed) not for us

<zcorpan__> chrishtr: it's technically not required

<zcorpan__> fergal_daly: filtering with mutation observer

<zcorpan__> JakeA: do we have other APIs where browser changes attributes?

<zcorpan__> Domenic: details

<zcorpan__> https://docs.google.com/spreadsheets/d/1bor78BuB-bnb_m-5JSWziMirgUivI00197l3QqdGNgU/edit#gid=0

Summary of Action Items

Summary of Resolutions

[End of minutes]

Minutes manually created (not a transcript), formatted by David Booth's scribe.perl version 1.154 (CVS log)
$Date: 2019/09/18 07:50:19 $

Scribe.perl diagnostic output

[Delete this section before finalizing the minutes.]
This is scribe.perl Revision: 1.154  of Date: 2018/09/25 16:35:56  
Check for newer version at http://dev.w3.org/cvsweb/~checkout~/2002/scribe/

Guessing input format: Irssi_ISO8601_Log_Text_Format (score 1.00)

Succeeded: s/find bar ???/find bar, does the entire page need to be styled?/
Succeeded: s/X???: something something/fergal_daly: Yes, but you can do it in chunks./
Succeeded: s/(missed)/it depends on how your IO works. you can add margins too/
Succeeded: s/10,000/100,000/
Succeeded: s/(something)/this is a different virtual-scroller impl, right? yes. so you can nest them? yes/
Succeeded: s/hope there's an area for virtual content/hope you're coordinating with the aria-virtualcontent proposal/
Present: AmeliaBR JuanCorona Valerie_Young dauwhe_ drousso marisa mstange rniwa romain_ zcorpan__ smfr mattwoodrow chrishtr kiyoshi
Found ScribeNick: zcorpan
Inferring Scribes: zcorpan

WARNING: 2 scribe lines found (out of 353 total lines.)
Are you sure you specified a correct ScribeNick?

WARNING: No meeting title found!
You should specify the meeting title like this:
<dbooth> Meeting: Weekly Baking Club Meeting

WARNING: No meeting chair found!
You should specify the meeting chair like this:
<dbooth> Chair: dbooth

WARNING: No date found!  Assuming today.  (Hint: Specify
the W3C IRC log URL, and the date will be determined from that.)
Or specify the date like this:
<dbooth> Date: 12 Sep 2002

People with action items: 

WARNING: IRC log location not specified!  (You can ignore this 
warning if you do not want the generated minutes to contain 
a link to the original IRC log.)

[End of scribe.perl diagnostic output]