neu-fi / regen-bingo

Monorepo for both backend and contract developments of Regen Bingo!
https://regen.bingo
2 stars 1 forks source link

Improve the performance of my-cards page #45

Closed hantuzun closed 1 year ago

hantuzun commented 1 year ago

When I've 11 cards, https://regen.bingo/my-cards takes a couple of seconds to load. It should load immidiately.

oytuncoban commented 1 year ago

When I've 11 cards, https://regen.bingo/my-cards takes a couple of seconds to load. It should load immidiately.

So, was it a rendering issue or took a while to fetch from the contract?

hantuzun commented 1 year ago

It must be about how we fetch the contract; rendering cannot take this long. I'm profiling it now.

hantuzun commented 1 year ago
Screen Shot 2023-01-17 at 11 56 32

There are infinite number of fetches for the tokenURI; there is a bug on that.

oytuncoban commented 1 year ago

If we use limit&offset while getting multiple tokens from the contract we are going to need a count function too. And this makes us have to sort the tokens in decreasing order by match count "on the contract". I don't think this is suitable for gas price.

Screen Shot 2023-01-17 at 11 56 32

There are infinite number of fetches for the tokenURI; there is a bug on that.

I know the fix, done in my local. Will be pushed with pagination feature.

hantuzun commented 1 year ago

Please make different fixes in different commits and branches.

hantuzun commented 1 year ago

The first tokenURI calls are finalized in t1.8s but the first render begins at t8.2s.

Screen Shot 2023-01-17 at 12 00 55 Screen Shot 2023-01-17 at 11 58 04
oytuncoban commented 1 year ago

The first tokenURI calls are finalized in t1.8s but the first render begins at t8.2s.

Screen Shot 2023-01-17 at 12 00 55 Screen Shot 2023-01-17 at 11 58 04

This leads us to decoding the response and creating Card object is taking long. I'm going to optimize it then?

oytuncoban commented 1 year ago

Please make different fixes in different commits and branches.

Done in #47

hantuzun commented 1 year ago

Thanks!

hantuzun commented 1 year ago

This issue is not fixed yet. I tried /my-cards again on the deployment of https://github.com/neu-fi/regen-bingo/commit/ac8f4f5aea47fd6f09ded2a5d3b96a2b7ebb97ab. It took 9 seconds. Below is the performance display of Brave:

Screen Shot 2023-01-17 at 15 09 12

There are 4 visible requests to the smart contract; and the render happens only after the last one.

oytuncoban commented 1 year ago

This issue is not fixed yet. I tried /my-cards again on the deployment of ac8f4f5. It took 9 seconds. Below is the performance display of Brave:

Screen Shot 2023-01-17 at 15 09 12

There are 4 visible requests to the smart contract; and the render happens only after the last one.

Is that mean fetching cards within a for loop from the contract takes too long when deployed to Göerli? I couldn't reproduce on deployed product since I have no minted cards and minting period has ended, unfortunately.

hantuzun commented 1 year ago

Perhaps, needs to be investigated. One way to do would be logging timestamps on relevant requests and seeing them in action with local and Goerli deployments.

oytuncoban commented 1 year ago

Perhaps, needs to be investigated. One way to do would be logging timestamps on relevant requests and seeing them in action with local and Goerli deployments.

Previous approach was;

This makes the contract calls last even longer. So, I've decided to update the card's state as a new card have constructed and render it immediately.

I've created another branch and tested a new approach on Göerli. I think it does fine, but this approach is to render the cards immediately after we fetch them so, cards will be loaded one by one. If you agree with me on this approach, we can display a loading spinner until all the cards are fetched at the end of the list @hantuzun.