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

fix: prevent to load script again #756

Merged
merged 15 commits into from
Oct 17, 2024
Merged

Conversation

hosseinmd
Copy link
Contributor

#749

Summary

In this PR, I prevented loadScript to load scripts is loaded before

Test plan

This is happening in remote federation with huge size of script and too many modules

Copy link

changeset-bot bot commented Sep 21, 2024

🦋 Changeset detected

Latest commit: 55cce05

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@callstack/repack Patch
@callstack/repack-dev-server Patch
@callstack/repack-init Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

vercel bot commented Sep 21, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Skipped Deployment
Name Status Preview Comments Updated (UTC)
repack-website ⬜️ Ignored (Inspect) Visit Preview Oct 16, 2024 0:28am

Copy link
Member

@jbroma jbroma left a comment

Choose a reason for hiding this comment

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

Hey @hosseinmd, sorry for the late reply but I was unavailable most of the week.

The concept introduced in this PR looks great, we definitely want this in the next major (5.0) release!

Can you please add some tests for this scenarios? We need to document this behaviour as well as we can

I've also noticed that we're using the same variable
sriptsPromises for both prefetching and loading - while in theoery these should not overlap, I would go with creating a separate variables to avoid potential collision in rare edge cases.

We also need to address housekeeping of the promises that have already been fulfilled - we should remove the entires from scriptsPromises that are not relevant anymore.

Last thing that comes to my mind: perhaps we could return a promise in prefetchScript and loadScript instead of executing loadProcess again after awaiting the previous promise?

@hosseinmd
Copy link
Contributor Author

hosseinmd commented Sep 30, 2024

Can you please add some tests for this scenarios? We need to document this behaviour as well as we can

Yes, I will do it

//updated
Done

@hosseinmd
Copy link
Contributor Author

I've also noticed that we're using the same variable
sriptsPromises for both prefetching and loading - while in theoery these should not overlap, I would go with creating a separate variables to avoid potential collision in rare edge cases.

loadScript and prefetchScript are using same resolveScript. If we separate those, the same bug #749 possible to be happening.

@hosseinmd
Copy link
Contributor Author

hosseinmd commented Sep 30, 2024

We also need to address housekeeping of the promises that have already been fulfilled - we should remove the entires from scriptsPromises that are not relevant anymore.

Ok, I will do it.

//Updated
Done

@hosseinmd
Copy link
Contributor Author

I've also noticed that we're using the same variable
sriptsPromises for both prefetching and loading - while in theoery these should not overlap, I would go with creating a separate variables to avoid potential collision in rare edge cases.

loadScript and prefetchScript are using same resolveScript. If we separate those, the same bug #749 possible to be happening.

i added a test for that. 969d6d8

@hosseinmd
Copy link
Contributor Author

Last thing that comes to my mind: perhaps we could return a promise in prefetchScript and loadScript instead of executing loadProcess again after awaiting the previous promise?

Done

@thymikee thymikee linked an issue Sep 30, 2024 that may be closed by this pull request
@hosseinmd
Copy link
Contributor Author

I've also noticed that we're using the same variable
sriptsPromises for both prefetching and loading - while in theoery these should not overlap, I would go with creating a separate variables to avoid potential collision in rare edge cases.

loadScript and prefetchScript are using same resolveScript. If we separate those, the same bug #749 possible to be happening.

In this ee3a58c commit loadScript will excute script if promise is for prefetch

@jbroma
Copy link
Member

jbroma commented Sep 30, 2024

@hosseinmd can you merge newest main and resolve the conflicts? Then I will proceed with another review, thanks!

@hosseinmd
Copy link
Contributor Author

Done

@jbroma
Copy link
Member

jbroma commented Sep 30, 2024

Done

Nice job! I'll try to review it later today

Copy link
Member

@jbroma jbroma left a comment

Choose a reason for hiding this comment

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

lets clean this up a little bit, but looks good overall 👍

@hosseinmd
Copy link
Contributor Author

Done

Copy link
Member

@jbroma jbroma left a comment

Choose a reason for hiding this comment

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

all looks good, just one last thing 🙏

@hosseinmd
Copy link
Contributor Author

Last commits rebased

Copy link
Member

@jbroma jbroma left a comment

Choose a reason for hiding this comment

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

LGMT 🎉

@jbroma jbroma merged commit f119ab3 into callstack:main Oct 17, 2024
5 checks passed
@jbroma
Copy link
Member

jbroma commented Oct 17, 2024

Thank you for your work on this @hosseinmd, this was no easy issue to tackle! 👏 🚀

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.

Error: Script file does not exist, but the file exists.
2 participants