Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: remove hard dependency of DI on FASTElement #6280

Merged
merged 7 commits into from
Aug 16, 2022

Conversation

EisenbergEffect
Copy link
Contributor

Pull Request

📖 Description

This PR removes the import of FASTElement from the dependency injection code so that users of the DI system can tree-shake out the rest of FASTElement.

🎫 Issues

👩‍💻 Reviewer Notes

The import of FASTElement was removed to enable non-FASTElement users to use the dependency injection system without needing to pull in all the code for FASTElement. The DI container only had one small feature that was dependent on this for a single type check. The new code simply checks for the property it requires rather than doing a instanceof. If the needed $fastController property isn't present, a detailed error is now thrown.

📑 Test Plan

This was an internal refactor. All existing tests continue to pass.

✅ Checklist

General

  • I have included a change request file using $ yarn change
  • I have added tests for my changes.
  • I have tested my changes.
  • I have updated the project documentation to reflect my changes.
  • I have read the CONTRIBUTING documentation and followed the standards for this project.

⏭ Next Steps

Not related to this feature, but also within DI, I'm researching to see whether it would be possible to add a getAsync API so that missing dependencies in a dependency resolution tree could be asynchronously provided.

@github-actions
Copy link

github-actions bot commented Aug 15, 2022

📊 Tachometer Benchmark Results

Summary

clickTrigger10x

  • repeat-basic-splice-loopCount=1000&itemCount=1000&deleteCount=10&addCount=10: unsure 🔍 -6% - +3% (-11.09ms - +6.30ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-push-loopCount=200&itemCount=200: unsure 🔍 -0% - +0% (-14.34ms - +17.90ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-reverse-loopCount=200&itemCount=200: unsure 🔍 -1% - +2% (-67.50ms - +108.30ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-shift-loopCount=200&itemCount=200: unsure 🔍 -1% - +2% (-36.60ms - +87.63ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-unshift-loopCount=200&itemCount=200&addCount=1: unsure 🔍 -2% - +4% (-78.82ms - +149.11ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary

create10k

  • render-create10k: unsure 🔍 -5% - +3% (-10.39ms - +6.07ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary

createDelete5x

  • render-createDelete5x: unsure 🔍 -1% - +1% (-3.57ms - +2.31ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary

runFile1k

  • observable-runFile1k: unsure 🔍 -32% - +8% (-3.35ms - +0.95ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary

update10th

  • render-update10th: unsure 🔍 -6% - +5% (-12.28ms - +9.64ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary

usedJSHeapSize

  • observable-runFile1k: unsure 🔍 -0% - +2% (-0.23ms - +0.98ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • render-create10k: unsure 🔍 -0% - +0% (-0.06ms - +0.04ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • render-createDelete5x: unsure 🔍 +0% - +0% (+0.02ms - +0.10ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • render-update10th: unsure 🔍 -0% - +0% (-0.03ms - +0.09ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-basic-splice-loopCount=1000&itemCount=1000&deleteCount=10&addCount=10: unsure 🔍 -0% - +0% (-0.05ms - +0.05ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-push-loopCount=200&itemCount=200: unsure 🔍 -0% - +0% (-0.03ms - +0.01ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-reverse-loopCount=200&itemCount=200: unsure 🔍 -0% - +0% (-0.04ms - +0.03ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-shift-loopCount=200&itemCount=200: unsure 🔍 -0% - +0% (-0.03ms - +0.02ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary
  • repeat-nested-unshift-loopCount=200&itemCount=200&addCount=1: unsure 🔍 -0% - +0% (-0.02ms - +0.02ms)
    users/eisenbergeffect/remove-de-dep-from-di vs master Customize summary

Results

observable-runFile1k

runFile1k

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master8.66ms - 11.68ms-unsure 🔍
-12% - +39%
-0.95ms - +3.35ms
users/eisenbergeffect/remove-de-dep-from-di7.43ms - 10.50msunsure 🔍
-32% - +8%
-3.35ms - +0.95ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master47.88ms - 48.74ms-unsure 🔍
-2% - +0%
-0.98ms - +0.23ms
users/eisenbergeffect/remove-de-dep-from-di48.25ms - 49.11msunsure 🔍
-0% - +2%
-0.23ms - +0.98ms
-
render-create10k

create10k

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master204.36ms - 216.58ms-unsure 🔍
-3% - +5%
-6.07ms - +10.39ms
users/eisenbergeffect/remove-de-dep-from-di202.79ms - 213.83msunsure 🔍
-5% - +3%
-10.39ms - +6.07ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master47.03ms - 47.11ms-unsure 🔍
-0% - +0%
-0.04ms - +0.06ms
users/eisenbergeffect/remove-de-dep-from-di47.03ms - 47.08msunsure 🔍
-0% - +0%
-0.06ms - +0.04ms
-
render-createDelete5x

createDelete5x

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master322.13ms - 326.47ms-unsure 🔍
-1% - +1%
-2.31ms - +3.57ms
users/eisenbergeffect/remove-de-dep-from-di321.68ms - 325.65msunsure 🔍
-1% - +1%
-3.57ms - +2.31ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master53.60ms - 53.65ms-unsure 🔍
-0% - -0%
-0.10ms - -0.02ms
users/eisenbergeffect/remove-de-dep-from-di53.65ms - 53.71msunsure 🔍
+0% - +0%
+0.02ms - +0.10ms
-
render-update10th

update10th

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master184.07ms - 197.87ms-unsure 🔍
-5% - +6%
-9.64ms - +12.28ms
users/eisenbergeffect/remove-de-dep-from-di181.14ms - 198.17msunsure 🔍
-6% - +5%
-12.28ms - +9.64ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master46.99ms - 47.08ms-unsure 🔍
-0% - +0%
-0.09ms - +0.03ms
users/eisenbergeffect/remove-de-dep-from-di47.03ms - 47.11msunsure 🔍
-0% - +0%
-0.03ms - +0.09ms
-
repeat-basic-splice-loopCount=1000&itemCount=1000&deleteCount=10&addCount=10

clickTrigger10x

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master191.60ms - 203.08ms-unsure 🔍
-3% - +6%
-6.30ms - +11.09ms
users/eisenbergeffect/remove-de-dep-from-di188.42ms - 201.47msunsure 🔍
-6% - +3%
-11.09ms - +6.30ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master50.75ms - 50.82ms-unsure 🔍
-0% - +0%
-0.05ms - +0.05ms
users/eisenbergeffect/remove-de-dep-from-di50.75ms - 50.82msunsure 🔍
-0% - +0%
-0.05ms - +0.05ms
-
repeat-nested-push-loopCount=200&itemCount=200

clickTrigger10x

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master3620.85ms - 3642.81ms-unsure 🔍
-0% - +0%
-17.90ms - +14.34ms
users/eisenbergeffect/remove-de-dep-from-di3621.81ms - 3645.41msunsure 🔍
-0% - +0%
-14.34ms - +17.90ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master91.04ms - 91.07ms-unsure 🔍
-0% - +0%
-0.01ms - +0.03ms
users/eisenbergeffect/remove-de-dep-from-di91.03ms - 91.06msunsure 🔍
-0% - +0%
-0.03ms - +0.01ms
-
repeat-nested-reverse-loopCount=200&itemCount=200

clickTrigger10x

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master5565.94ms - 5664.25ms-unsure 🔍
-2% - +1%
-108.30ms - +67.50ms
users/eisenbergeffect/remove-de-dep-from-di5562.63ms - 5708.36msunsure 🔍
-1% - +2%
-67.50ms - +108.30ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master130.98ms - 131.03ms-unsure 🔍
-0% - +0%
-0.03ms - +0.04ms
users/eisenbergeffect/remove-de-dep-from-di130.97ms - 131.02msunsure 🔍
-0% - +0%
-0.04ms - +0.03ms
-
repeat-nested-shift-loopCount=200&itemCount=200

clickTrigger10x

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master3575.22ms - 3637.86ms-unsure 🔍
-2% - +1%
-87.63ms - +36.60ms
users/eisenbergeffect/remove-de-dep-from-di3578.41ms - 3685.69msunsure 🔍
-1% - +2%
-36.60ms - +87.63ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master91.04ms - 91.08ms-unsure 🔍
-0% - +0%
-0.02ms - +0.03ms
users/eisenbergeffect/remove-de-dep-from-di91.04ms - 91.07msunsure 🔍
-0% - +0%
-0.03ms - +0.02ms
-
repeat-nested-unshift-loopCount=200&itemCount=200&addCount=1

clickTrigger10x

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master3684.86ms - 3738.52ms-unsure 🔍
-4% - +2%
-149.11ms - +78.82ms
users/eisenbergeffect/remove-de-dep-from-di3636.07ms - 3857.60msunsure 🔍
-2% - +4%
-78.82ms - +149.11ms
-

usedJSHeapSize

VersionAvg timevs mastervs users/eisenbergeffect/remove-de-dep-from-di
master90.99ms - 91.03ms-unsure 🔍
-0% - +0%
-0.02ms - +0.02ms
users/eisenbergeffect/remove-de-dep-from-di91.00ms - 91.01msunsure 🔍
-0% - +0%
-0.02ms - +0.02ms
-

tachometer-reporter-action v2 for Validate Benchmarks

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>
Copy link
Member

@chrisdholt chrisdholt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great, thanks @EisenbergEffect

@chrisdholt chrisdholt merged commit ac3954c into master Aug 16, 2022
@chrisdholt chrisdholt deleted the users/eisenbergeffect/remove-de-dep-from-di branch August 16, 2022 04:25
janechu pushed a commit that referenced this pull request Jun 10, 2024
* refactor: remove dependency of DI on FASTElement

* feat: throw if attempting to respect DOM connect without a FASTElement

* Change files

* fix change file

Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>

* chore: fix prettier missing comma in enum

Co-authored-by: EisenbergEffect <roeisenb@microsoft.com>
Co-authored-by: Nicholas Rice <3213292+nicholasrice@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

refactor: remove FASTElement dependency from the DI container
4 participants