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

@uppy/status-bar: remove throttled component #4396

Merged
merged 7 commits into from
Jul 5, 2023

Conversation

arturi
Copy link
Contributor

@arturi arturi commented Apr 3, 2023

Fixes #4339

@arturi arturi requested review from mifi and aduh95 April 3, 2023 15:26
Copy link
Member

@Murderlon Murderlon left a comment

Choose a reason for hiding this comment

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

I think this would also fix it and follows the React paradigm better:

function ThrottledProgressDetails () {
  return throttle(ProgressDetails, 500, {
    leading: true,
    trailing: true,
  })
}

But even better would be to not throttle a component, but the state the triggers a re-render.

@mifi
Copy link
Contributor

mifi commented Apr 4, 2023

I don’t think throttling an actual React component is kosher. Usually one would rather throttle some events or throttle state updates. What’s the reason for needing to throttle the component? Is the rendering happening inside of it very slow? I think if the problem is that state updates too frequently, then we should instead throttle the setState calls where they happen.

@arturi
Copy link
Contributor Author

arturi commented Apr 4, 2023

I think the progress details numbers were jumping around too frequently. This was added some years ago, I don't remember for sure. We can try and remove and see how it goes again.

I agree with the idea of throttling the data / setState, but it might be harder because only a certain part of the progress was throttled, while percentage wasn't. Will take a look.

@mifi
Copy link
Contributor

mifi commented Apr 4, 2023

alright! alternatively we could use or make some kind of useThrottle hook, that can allow us to throttle multiple variables too

* main: (61 commits)
  Release: uppy@3.10.0 (#4511)
  @uppy/aws-s3-multipart: fix the chunk size calculation (#4508)
  @uppy/aws-s3: add `shouldUseMultipart` option (#4299)
  @uppy/companion: switch from aws-sdk v2 to @aws-sdk/* (v3) (#4285)
  Migrate all lodash' per-method-packages usage to lodash. (#4274)
  @uppy/core: Don't set late (throttled) progress event on a file that is 100% complete (#4507)
  @uppy/companion: revert randomness from file names (#4509)
  Custom provider fixes (#4498)
  @uppy/transloadit: ensure `fields` is not nullish when there no uploaded files (#4487)
  When file is removed (or all are canceled), controller.abort queued requests (#4504)
  @uppy/provider-views: Fix range selection not resetting and computing correctly (#4415)
  meta: disallow use of `.only` in tests (#4494)
  @uppy/companion: fix 500 when file name contains non-ASCII chars (#4493)
  @uppy/locales: update `fr_FR.js` (#4499)
  Don't close socket while upload is still in progress (#4479)
  meta: bump `luxon` from 1.28.0 to 1.28.1 (#4497)
  @uppy/utils: rename `EventTracker` -> `EventManager` (#4481)
  meta: bump cookiejar from 2.1.3 to 2.1.4 (#4496)
  meta: make `pre-commit` use `corepack yarn` instead of `npm run` (#4495)
  meta: bump ua-parser-js from 0.7.31 to 0.7.35 (#4474)
  ...
@Murderlon Murderlon changed the title @uppy/status-bar: Move ThrottledProgressDetails into the component with useCallback @uppy/status-bar: make ThrottledProgressDetails local instead of global Jun 20, 2023
@Murderlon Murderlon marked this pull request as ready for review June 20, 2023 09:08
@Murderlon
Copy link
Member

Still went with the simple approach. Tried everything but didn't work, new hooks, changing the throttle interval in Uppy core, moving components around. This is simple and fixes the problem.

Copy link
Member

@aduh95 aduh95 left a comment

Choose a reason for hiding this comment

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

Maybe add a comment explaining why we are wrapping it in a function, or a later refactor may revert it by accident.

Copy link
Contributor

@mifi mifi left a comment

Choose a reason for hiding this comment

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

I think we should just remove the throttling. I tested without throttling for s3, multipart, xhr and tus, and it doesn't seem to be jumping frequently. Since we have forgotten why we throttled, it seems like an unnecessary optimisation. And throttling react component renders like this doesn't sound safe to do.

@aduh95
Copy link
Member

aduh95 commented Jun 21, 2023

I think we should just remove the throttling. I tested without throttling for s3, multipart, xhr and tus, and it doesn't seem to be jumping frequently. Since we have forgotten why we throttled, it seems like an unnecessary optimisation. And throttling react component renders like this doesn't sound safe to do.

Could it be that you are using a machine in the 99-percentile in terms of power and you would have seen different results if you tested using a below average smartphone?

@mifi
Copy link
Contributor

mifi commented Jun 21, 2023

Could it be that you are using a machine in the 99-percentile in terms of power and you would have seen different results if you tested using a below average smartphone?

the numbers update every 1 second so i don't see how it could be a problem with a slower computer. and the throttle is even set to 0.5 sec

* main:
  @uppy/aws-s3-multipart: fix Golden Retriever integration (#4526)
  examples/aws-nodejs: merge multipart and non-multipart examples (#4521)
  @uppy/companion: bump semver from 7.3.7 to 7.5.3 (#4529)
  @uppy/aws-s3-multipart: add types to internal fields (#4535)
  examples/aws-nodejs: update README (#4534)
  examples/aws-nodejs: showcase an example without preflight requests (#4516)
  @uppy/aws-s3-multipart: fix pause/resume (#4523)
  @uppy/status-bar: fix ETA when Uppy recovers its state (#4525)
  @uppy/aws-s3-multipart: fix resume single-chunk multipart uploads (#4528)
  @uppy/companion: fix part listing in s3 (#4524)
  example/aws-php: make it forward-compatible with the next Uppy major (#4522)
  @uppy/golden-retriever: refactor to modernize the codebase (#4520)
  examples/aws-nodejs: upgrade to AWS-SDK v3 (#4515)
  @uppy/companion: implement refresh for authentication tokens (#4448)
  @uppy/aws-s3-multipart: disable pause/resume for remote uploads in the UI (#4500)
  @uppy/tus: retry on 423 HTTP error code (#4512)
@Murderlon Murderlon changed the title @uppy/status-bar: make ThrottledProgressDetails local instead of global @uppy/status-bar: remove throttled component Jul 5, 2023
@Murderlon Murderlon requested a review from mifi July 5, 2023 11:53
@arturi
Copy link
Contributor Author

arturi commented Jul 5, 2023

something failing on e2e?

@Murderlon
Copy link
Member

Unrelated and caused by d1697b0

@Murderlon Murderlon merged commit 7fcc7a6 into main Jul 5, 2023
18 of 19 checks passed
@Murderlon Murderlon deleted the fix-throttle-global-state branch July 5, 2023 13:31
@aduh95
Copy link
Member

aduh95 commented Jul 5, 2023

Unrelated and caused by d1697b0

We should have waited for the fix to land first, otherwise we can get back to the state where the CI is failing and we don't know why.

@github-actions github-actions bot mentioned this pull request Jul 6, 2023
github-actions bot added a commit that referenced this pull request Jul 6, 2023
| Package                | Version | Package                | Version |
| ---------------------- | ------- | ---------------------- | ------- |
| @uppy/aws-s3           |   3.2.1 | @uppy/golden-retriever |   3.1.0 |
| @uppy/aws-s3-multipart |   3.4.1 | @uppy/status-bar       |   3.2.1 |
| @uppy/companion        |   4.6.0 | @uppy/tus              |   3.1.2 |
| @uppy/companion-client |   3.2.0 | @uppy/xhr-upload       |   3.3.1 |
| @uppy/core             |   3.3.0 | uppy                   |  3.11.0 |

- @uppy/companion: fix infinite recursion in uploader test (Mikael Finstad / #4536)
- @uppy/xhr-upload: export `Headers` type (Masum ULU / #4549)
- @uppy/aws-s3-multipart: increase priority of abort and complete (Stefan Schonert / #4542)
- @uppy/aws-s3: fix remote uploads (Antoine du Hamel / #4546)
- meta: use `corepack yarn` instead of `npm` to launch E2E (Antoine du Hamel / #4545)
- @uppy/aws-s3-multipart: fix upload retry using an outdated ID (Antoine du Hamel / #4544)
- @uppy/status-bar: remove throttled component (Artur Paikin / #4396)
- @uppy/aws-s3-multipart: fix Golden Retriever integration (Antoine du Hamel / #4526)
- examples/aws-nodejs: merge multipart and non-multipart examples (Antoine du Hamel / #4521)
- @uppy/companion: bump semver from 7.3.7 to 7.5.3 (dependabot[bot] / #4529)
- @uppy/aws-s3-multipart: add types to internal fields (Antoine du Hamel / #4535)
- examples/aws-nodejs: update README (Antoine du Hamel / #4534)
- examples/aws-nodejs: showcase an example without preflight requests (Antoine du Hamel / #4516)
- @uppy/aws-s3-multipart: fix pause/resume (Antoine du Hamel / #4523)
- @uppy/status-bar: fix ETA when Uppy recovers its state (Antoine du Hamel / #4525)
- @uppy/aws-s3-multipart: fix resume single-chunk multipart uploads (Antoine du Hamel / #4528)
- @uppy/companion: fix part listing in s3 (Antoine du Hamel / #4524)
- example/aws-php: make it forward-compatible with the next Uppy major (Antoine du Hamel / #4522)
- @uppy/golden-retriever: refactor to modernize the codebase (Antoine du Hamel / #4520)
- examples/aws-nodejs: upgrade to AWS-SDK v3 (Antoine du Hamel / #4515)
- @uppy/companion: implement refresh for authentication tokens (Mikael Finstad / #4448)
- @uppy/aws-s3-multipart: disable pause/resume for remote uploads in the UI (Artur Paikin / #4500)
- @uppy/tus: retry on 423 HTTP error code (Antoine du Hamel / #4512)
Murderlon added a commit that referenced this pull request Jul 10, 2023
* main: (24 commits)
  Add missing pt-BR locales for ImageEditor plugin (#4558)
  Release: uppy@3.11.0 (#4550)
  @uppy/companion: fix infinite recursion in uploader test (#4536)
  @uppy/xhr-upload: export `Headers` type (#4549)
  @uppy/aws-s3-multipart: increase priority of abort and complete (#4542)
  @uppy/aws-s3: fix remote uploads (#4546)
  meta: use `corepack yarn` instead of `npm` to launch E2E (#4545)
  @uppy/aws-s3-multipart: fix upload retry using an outdated ID (#4544)
  @uppy/status-bar: remove throttled component (#4396)
  @uppy/aws-s3-multipart: fix Golden Retriever integration (#4526)
  examples/aws-nodejs: merge multipart and non-multipart examples (#4521)
  @uppy/companion: bump semver from 7.3.7 to 7.5.3 (#4529)
  @uppy/aws-s3-multipart: add types to internal fields (#4535)
  examples/aws-nodejs: update README (#4534)
  examples/aws-nodejs: showcase an example without preflight requests (#4516)
  @uppy/aws-s3-multipart: fix pause/resume (#4523)
  @uppy/status-bar: fix ETA when Uppy recovers its state (#4525)
  @uppy/aws-s3-multipart: fix resume single-chunk multipart uploads (#4528)
  @uppy/companion: fix part listing in s3 (#4524)
  example/aws-php: make it forward-compatible with the next Uppy major (#4522)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants