pharo-users@lists.pharo.org

Any question about pharo is welcome

View all threads

Re: is there a better way

RW
Roelof Wobben
Wed, Jan 6, 2021 5:11 PM

I did it on the root document and see this :

So as far as I see it , The most time it taken by getting all the data from all the 10 images.

I hope someone can look at me if im on the right track and will help me to figure out faster ways to achieve the same

Roelof

Op 5-1-2021 om 05:16 schreef Richard O'Keefe:

Before you take another step, explore the root document.

Profiling is easy.

Open a Playground.

Type an expression such as

3 tinyBenchmarks

Right click and select 'Profile it'.

More generally, in a browser, look at the "Tool - Profilers"

class category. The classic approach was

MessageTally spyOn: [3 tinyBenchmarks]

If I understand correctly, 'Profile it' uses TimeProfiler,

which has a nicer interface. (This is in Pharo 8.)

On Sun, 3 Jan 2021 at 23:03, Roelof Wobben <r.wobben@home.nl> wrote:

I want that the code fetches a url and some data from the Rijksmuseaum api.
And as far as I see it the second it not pointless because it getting more detailed info about the painting as in the first get.

I did not profiled it because I never learned how to do that in Pharo.

Roelof

Op 3-1-2021 om 01:09 schreef Richard O'Keefe:

What do you want the code to do?

Have you profiled the code to see where the time is going?

A quick look at the code shows

  • Paintings does one web get

  • each Painting does two more web gets

! and the first of those seems to be pretty pointless,

as it refetches an object that Paintings already fetched

and just looked at.

On Sun, 3 Jan 2021 at 01:16, Roelof Wobben via Pharo-users <pharo-users@lists.pharo.org> wrote:

Hello,

I have now this code : https://github.com/RoelofWobben/Rijksmuseam

but it seems to be slow.

Can anyone help me with a way I can use a sort of cache so the page
looks first at the cache if a image is there .
If so, take the image from there , if not , ask the api for the url of
the image.

Roelof

SV
Sven Van Caekenberghe
Wed, Jan 6, 2021 6:19 PM

Roelof,

Working with multiple high resolution images, as I believe you are doing, is always going to be a real challenge, performance wise. It just takes time to transfer lots of data.

First you have to make sure that you are not doing too much work (double downloads, using too high resolutions for previews or browsing). Also, make sure your ultimate client (the browser) can cache as well if applicable (set modification dates on the response).

Next you could cache images locally (on your app server) so that next time you need the same image, you do not need to download it again. Of course, this only helps if your hit rate is higher than zero (if you actually ask for the same image multiple times).

It is also possible to do multiple download requests concurrently: if the other end is fast enough, that can certainly help.

HTH,

Sven

On 6 Jan 2021, at 18:11, Roelof Wobben via Pharo-users pharo-users@lists.pharo.org wrote:

I did it on the root document and see this :

<nkdkdknfekaflcfc.png>

So as far as I see it , The most time it taken by getting all the data from all the 10 images.

I hope someone can look at me if im on the right track and will help me to figure out faster ways to achieve the same

Roelof

Op 5-1-2021 om 05:16 schreef Richard O'Keefe:

Before you take another step, explore the root document.

Profiling is easy.
Open a Playground.
Type an expression such as
3 tinyBenchmarks
Right click and select 'Profile it'.

More generally, in a browser, look at the "Tool - Profilers"
class category.  The classic approach was
MessageTally spyOn: [3 tinyBenchmarks]
If I understand correctly, 'Profile it' uses TimeProfiler,
which has a nicer interface.  (This is in Pharo 8.)

On Sun, 3 Jan 2021 at 23:03, Roelof Wobben r.wobben@home.nl wrote:
I want that the code fetches a url and some data from the Rijksmuseaum api.
And as far as I see it the second it not pointless because it getting more detailed info about the painting as in the first get.

I did not profiled it because I never learned how to do that in Pharo.

Roelof

Op 3-1-2021 om 01:09 schreef Richard O'Keefe:

What do you want the code to do?
Have you profiled the code to see where the time is going?

A quick look at the code shows

  • Paintings does one web get
  • each Painting does two more web gets
    ! and the first of those seems to be pretty pointless,
    as it refetches an object that Paintings already fetched
    and just looked at.

On Sun, 3 Jan 2021 at 01:16, Roelof Wobben via Pharo-users pharo-users@lists.pharo.org wrote:
Hello,

I have now this code : https://github.com/RoelofWobben/Rijksmuseam

but it seems to be slow.

Can anyone help me with a way I can use a sort of cache so the page
looks first at the cache if a image is there .
If so, take the image from there , if not , ask the api for the url of
the image.

Roelof

Roelof, Working with multiple high resolution images, as I believe you are doing, is always going to be a real challenge, performance wise. It just takes time to transfer lots of data. First you have to make sure that you are not doing too much work (double downloads, using too high resolutions for previews or browsing). Also, make sure your ultimate client (the browser) can cache as well if applicable (set modification dates on the response). Next you could cache images locally (on your app server) so that next time you need the same image, you do not need to download it again. Of course, this only helps if your hit rate is higher than zero (if you actually ask for the same image multiple times). It is also possible to do multiple download requests concurrently: if the other end is fast enough, that can certainly help. HTH, Sven > On 6 Jan 2021, at 18:11, Roelof Wobben via Pharo-users <pharo-users@lists.pharo.org> wrote: > > > I did it on the root document and see this : > > <nkdkdknfekaflcfc.png> > > So as far as I see it , The most time it taken by getting all the data from all the 10 images. > > I hope someone can look at me if im on the right track and will help me to figure out faster ways to achieve the same > > Roelof > > > > Op 5-1-2021 om 05:16 schreef Richard O'Keefe: >> Before you take another step, explore the root document. >> >> Profiling is easy. >> Open a Playground. >> Type an expression such as >> 3 tinyBenchmarks >> Right click and select 'Profile it'. >> >> More generally, in a browser, look at the "Tool - Profilers" >> class category. The classic approach was >> MessageTally spyOn: [3 tinyBenchmarks] >> If I understand correctly, 'Profile it' uses TimeProfiler, >> which has a nicer interface. (This is in Pharo 8.) >> >> >> On Sun, 3 Jan 2021 at 23:03, Roelof Wobben <r.wobben@home.nl> wrote: >> I want that the code fetches a url and some data from the Rijksmuseaum api. >> And as far as I see it the second it not pointless because it getting more detailed info about the painting as in the first get. >> >> I did not profiled it because I never learned how to do that in Pharo. >> >> Roelof >> >> >> >> Op 3-1-2021 om 01:09 schreef Richard O'Keefe: >>> What do you want the code to do? >>> Have you profiled the code to see where the time is going? >>> >>> A quick look at the code shows >>> - Paintings does one web get >>> - each Painting does two more web gets >>> ! and the first of those seems to be pretty pointless, >>> as it refetches an object that Paintings already fetched >>> and just looked at. >>> >>> >>> >>> On Sun, 3 Jan 2021 at 01:16, Roelof Wobben via Pharo-users <pharo-users@lists.pharo.org> wrote: >>> Hello, >>> >>> I have now this code : https://github.com/RoelofWobben/Rijksmuseam >>> >>> but it seems to be slow. >>> >>> Can anyone help me with a way I can use a sort of cache so the page >>> looks first at the cache if a image is there . >>> If so, take the image from there , if not , ask the api for the url of >>> the image. >>> >>> Roelof >> >