Skip to content

Commit 4caf23d

Browse files
committed
Merge remote-tracking branch 'origin/main' into copilot/fix-performance-issues-lazy-define
# Conflicts: # src/lazy-define.ts
2 parents 7c5966b + 99f0747 commit 4caf23d

3 files changed

Lines changed: 46 additions & 13 deletions

File tree

docs/Gemfile.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
GEM
22
remote: https://rubygems.org/
33
specs:
4-
addressable (2.8.0)
5-
public_suffix (>= 2.0.2, < 5.0)
4+
addressable (2.9.0)
5+
public_suffix (>= 2.0.2, < 8.0)
66
colorator (1.1.0)
77
commonmarker (0.23.10)
88
concurrent-ruby (1.1.10)
@@ -80,7 +80,7 @@ GEM
8080
sawyer (~> 0.8.0, >= 0.5.3)
8181
pathutil (0.16.2)
8282
forwardable-extended (~> 2.6)
83-
public_suffix (4.0.7)
83+
public_suffix (5.1.1)
8484
rb-fsevent (0.11.1)
8585
rb-inotify (0.10.1)
8686
ffi (~> 1.0)

package-lock.json

Lines changed: 11 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/lazy-define.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,38 @@ describe('lazyDefine', () => {
6868
expect(onDefine3).to.have.callCount(1)
6969
})
7070

71+
it('coalesces multiple added elements into a single rAF callback', async () => {
72+
const onDefine = spy()
73+
lazyDefine('coalesce-test-element', onDefine)
74+
75+
const rafSpy = spy(window, 'requestAnimationFrame')
76+
const callsBefore = rafSpy.callCount
77+
78+
await fixture(html`
79+
<div>
80+
<coalesce-test-element></coalesce-test-element>
81+
<coalesce-test-element></coalesce-test-element>
82+
<coalesce-test-element></coalesce-test-element>
83+
<coalesce-test-element></coalesce-test-element>
84+
<coalesce-test-element></coalesce-test-element>
85+
<coalesce-test-element></coalesce-test-element>
86+
<coalesce-test-element></coalesce-test-element>
87+
<coalesce-test-element></coalesce-test-element>
88+
<coalesce-test-element></coalesce-test-element>
89+
<coalesce-test-element></coalesce-test-element>
90+
</div>
91+
`)
92+
93+
await animationFrame()
94+
95+
const rafCallsFromScan = rafSpy.callCount - callsBefore
96+
rafSpy.restore()
97+
98+
// Should use at most a few rAF calls, not one per element
99+
expect(rafCallsFromScan).to.be.lessThan(5)
100+
expect(onDefine).to.be.callCount(1)
101+
})
102+
71103
it('lazy loads elements in shadow roots', async () => {
72104
const onDefine = spy()
73105
lazyDefine('nested-shadow-element', onDefine)

0 commit comments

Comments
 (0)