Vooruitladen dynamische pagina's met prefetch of prerender

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Gijs007
  • Registratie: Februari 2008
  • Laatst online: 08:36
Ik wil een van de dynamische bestel pagina's van een webshop voorruitladen als de bezoeker nog op de pagina van het product zit.

Hiervoor wil ik gebruik maken van een van de volgende functies:
https://caniuse.com/#feat=link-rel-prerender
https://caniuse.com/#feat=link-rel-prefetch

Nu blijkt (bij het gebruik van ofwel de prerender/prefetch funtie) dat de pagina die vooraf in wordt geladen gewoon doodleuk opnieuw wordt ingeladen als ik op de link klik om naar deze pagina te gaan.
Ik vermoed dat dit komt omdat de bestel pagina een dynamische HTML pagina is en daardoor standaard niet wordt gecached door de browser.

Ik vroeg me af of het mogelijk is om deze dynamische pagina toch vooruit te laden, bijvoorbeeld door gebruik te maken van een prerender of prefetch functie.
De pagina kan immers prima in de achtergrond worden geladen, en hoeft dus niet opnieuw te worden geladen..

[ Voor 3% gewijzigd door Gijs007 op 31-03-2018 17:31 ]

AMD Ryzen 7 9800X3D | Corsair H150i Elite LCD | GIGABYTE X670E AORUS XTREME | G.Skill Trident Z F5-7800J3646H16GX2-TZ5RK | Inno3D GeForce RTX 4090 iCHILL X3 | Corsair HX1000i | Crucial T700 4TB | Intel Optane 905P 1.5TB | MP600 NH 8TB | Corsair iCUE 5000T

Alle reacties


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
werk met "modified" headers.

Voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
        header('Last-Modified: '.gmdate('D, d M Y H:i:s \G\M\T', $time)); # DATE_RFC1123
        if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $time <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
        {
            header($_SERVER['SERVER_PROTOCOL'].' 304 Not Modified', true, 304);
            exit;
        }
        if (!empty($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && $time > strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']))
        {
            header($_SERVER['SERVER_PROTOCOL'].' 412 Precondition Failed', true, 412);
            exit;
        }

Bron: mijn code https://bitbucket.org/djm...e/poodle/http/headers.php

[ Voor 12% gewijzigd door DJMaze op 31-03-2018 17:51 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Gijs007
  • Registratie: Februari 2008
  • Laatst online: 08:36
Ik heb helaas geen toegang tot de source code van de webshop, dus die kan ik helaas niet aanpassen.

AMD Ryzen 7 9800X3D | Corsair H150i Elite LCD | GIGABYTE X670E AORUS XTREME | G.Skill Trident Z F5-7800J3646H16GX2-TZ5RK | Inno3D GeForce RTX 4090 iCHILL X3 | Corsair HX1000i | Crucial T700 4TB | Intel Optane 905P 1.5TB | MP600 NH 8TB | Corsair iCUE 5000T


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Dan moet je zorgen dat je wel toegang krijgt.
Zonder toegang kan je toch niks.

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • Ramon
  • Registratie: Juli 2000
  • Nu online
Pagina's in het bestelproces van een webshop lijken me bij uitstek bedoeld om niet te prefetchen eigenlijk. Er gebeuren vaak transacties, updates, inserts in de database en die wil je alleen doen als dat echt de bedoeling is. Ik zou voor performance-optimalisatie naar andere dingen kijken: database indexes, query optimalisatie, cdn's, sharding, etc etc. (Natuurlijk eerst even benchmarken waar het probleem hem in zit voordat je iets gaat doen)

Hier nog meer info over prefetching: https://developer.mozilla...HTTP/Link_prefetching_FAQ misschien heb je er iets aan.

[ Voor 13% gewijzigd door Ramon op 31-03-2018 18:08 ]

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Ramon klopt wat je zegt, daarom handel je dat eventueel af met die $time uit mijn code.

1522513286 doet de browser een pre-fetch.
1522513300 wordt iets aangepast in de webshop
1522513302 ga ik naar de pagina: $time = 1522513300 => pagina wordt opnieuw geladen, pre-fetch was zinloos.

1522513286 doet de browser een pre-fetch.
... er is tussentijds niks aangepast
1522513302 ga ik naar de pagina: $time = 1522513286 => pagina niet aangepast, pref-fetch werkt!

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Gijs007
  • Registratie: Februari 2008
  • Laatst online: 08:36
@DJMaze
Het gaat om commercial of the shelf software, dus toegang tot de source code zal niet gebeuren.

@Ramon
In principe heb je gelijk, echter gaat het hier om de eerste pagina in het bestel proces. Hier bij is er dus nog geen sprake van transacties e.d.

De backend is reeds geoptimaliseerd, hier valt op dit moment helaas niet veel te halen.

AMD Ryzen 7 9800X3D | Corsair H150i Elite LCD | GIGABYTE X670E AORUS XTREME | G.Skill Trident Z F5-7800J3646H16GX2-TZ5RK | Inno3D GeForce RTX 4090 iCHILL X3 | Corsair HX1000i | Crucial T700 4TB | Intel Optane 905P 1.5TB | MP600 NH 8TB | Corsair iCUE 5000T


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Gijs007 schreef op zaterdag 31 maart 2018 @ 18:25:
Het gaat om commercial of the shelf software, dus toegang tot de source code zal niet gebeuren.
Dan moet je dit bij hun aankaarten of software aanschaffen die het wel kan.

Ik verkoop CS Cart en die commerciële software pas ik aan en stuur patch bestanden naar hun terug zodat zij het kunnen implementeren.
Je kan dus wel commerciële software krijgen die je dus kan aanpassen.

[ Voor 27% gewijzigd door DJMaze op 31-03-2018 18:27 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Gijs007
  • Registratie: Februari 2008
  • Laatst online: 08:36
DJMaze schreef op zaterdag 31 maart 2018 @ 18:26:
[...]

Dan moet je dit bij hun aankaarten of software aanschaffen die het wel kan
Aankaarten is eventueel een optie.

Ik was echter onder de impressie dat prerender als een soort background tabblad werkt, waarbij deze naar de voorgrond wordt verplaatst als de pagina wordt geopend. Maar blijkbaar worden er ook controles op de cachebaarheid van de pagina uitgevoerd..

AMD Ryzen 7 9800X3D | Corsair H150i Elite LCD | GIGABYTE X670E AORUS XTREME | G.Skill Trident Z F5-7800J3646H16GX2-TZ5RK | Inno3D GeForce RTX 4090 iCHILL X3 | Corsair HX1000i | Crucial T700 4TB | Intel Optane 905P 1.5TB | MP600 NH 8TB | Corsair iCUE 5000T


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Gijs007 aankaarten is één. Of ze er wat mee doen is een ander verhaal. Het is niet makkelijk, zoals Ramon ook zegt.

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

Verwijderd

Prerender kun je het beste uit je hoofd zetten. Vrijwel alleen Chrome ondersteund het, en deze gaat deze feature binnenkort weer verwijderen:

https://groups.google.com.../0nSxuuv9bBw/EMfaclV-AwAJ

Prefetch kun je wel blijven gebruiken, bijvoorbeeld om de losse JS en CSS van de volgende pagina alvast voor te laden. Uiteraard dienen die resources een cache header te hebben, anders loop je tegen hetzelfde probleem aan dat het 2 keer geladen wordt.

Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Voor assets heeft het vooral zin. Eigenlijk de statische content. Je brengt er ook een hoop heisa mee op je hals. Als je geen controle hebt over de source code of andere internals zou het lastig kunnen worden. Beetje prematuur natuurlijk om in beperkingen te denken. Je kan beginnen met bijvoorbeeld pre-fetch van DNS records als het van andere CDN komt. Persoonlijk lijken mij er genoeg andere optimalisaties die je beter kunt doen dan prefetch/prerenders.

Ontwikkelaar van NPM library Gleamy

Pagina: 1