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

Handle Changing Imports In Canvas #6567

Merged
merged 4 commits into from
Oct 22, 2024

Conversation

seanparsons
Copy link
Contributor

@seanparsons seanparsons commented Oct 18, 2024

Problem:
If we do a partial canvas re-render but a necessary import is also added, then the canvas errors out momentarily.

Cause:
The resolved values of the imports are buried in a property called requireResult which originates with require and resolve functions. Those functions are only rebuilt when the elements to re-render value is rerender-all-elements or when it has changed between the current canvas render and the prior one. With our recent changes to the canvas strategies to make them never supply the rerender-all-elements value, the failure case of the imports changing but the elements to re-render value not changing has become more likely.

In the case of grid insertion, the elements to re-render becomes the target path on hover, then when the user clicks it stays with that target path but the imports are added. Since there is no change in the former, the canvas logic is unable to find the new import in the old requireResult.

Fix:
Compare the old and current project contents and if their imports, combined top level arbitrary block or exports have changed then recreate the require and resolve functions. This replaces the previous check which looked at the current and previous versions of the elements to re-render property.

Commit Details:

  • Removed the previous handling of shouldRerenderRef.
  • Implemented projectContentsSameForRefreshRequire.
  • Changed out old haveProjectImportsChanged call to use the new
    projectContentsSameForRefreshRequire.

- Added `getProjectImports` utility function.
- In `UiJsxCanvas` check the project imports as an additional case to `shouldRerenderRef`.
Copy link
Contributor

github-actions bot commented Oct 18, 2024

Try me

Copy link

relativeci bot commented Oct 18, 2024

#14903 Bundle Size — 57.97MiB (~+0.01%).

112d15b(current) vs 916e8b9 master#14901(baseline)

Warning

Bundle contains 70 duplicate packages – View duplicate packages

Bundle metrics  Change 2 changes Regression 1 regression
                 Current
#14903
     Baseline
#14901
Regression  Initial JS 40.96MiB(~+0.01%) 40.96MiB
No change  Initial CSS 0B 0B
Change  Cache Invalidation 18.51% 0%
No change  Chunks 20 20
No change  Assets 22 22
No change  Modules 4152 4152
No change  Duplicate Modules 213 213
No change  Duplicate Code 27.34% 27.34%
No change  Packages 477 477
No change  Duplicate Packages 70 70
Bundle size by type  Change 2 changes Regression 1 regression Improvement 1 improvement
                 Current
#14903
     Baseline
#14901
Regression  JS 57.97MiB (~+0.01%) 57.97MiB
Improvement  HTML 7.37KiB (-0.25%) 7.39KiB

Bundle analysis reportBranch fix/handle-changing-imports-in-c...Project dashboard


Generated by RelativeCIDocumentationReport issue

@seanparsons seanparsons marked this pull request as ready for review October 18, 2024 16:58
- Implemented `projectContentsSameForRefreshRequire`.
- Changed out old `haveProjectImportsChanged` call to use the new
  `projectContentsSameForRefreshRequire`.
- Speed improvement to `projectContentsSameForRefreshRequire`.
- Remove unused code.
@seanparsons seanparsons merged commit a689345 into master Oct 22, 2024
20 checks passed
@seanparsons seanparsons deleted the fix/handle-changing-imports-in-canvas branch October 22, 2024 16:00
liady pushed a commit that referenced this pull request Dec 13, 2024
- Removed the previous handling of `shouldRerenderRef`.
- Implemented `projectContentsSameForRefreshRequire`.
- Changed out old `haveProjectImportsChanged` call to use the new
  `projectContentsSameForRefreshRequire`.
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.

3 participants