Wer sich bereits länger mit SharePoint Online beschäftigt, hat bestimmt schon bemerkt, dass auf Modern Pages der Inhalt beim Wechseln der Seite nicht komplett neu geladen wird.
Anfangs gab es dieses Verhalten nur innerhalb einer Site Collection. Vor ein paar Monaten hat Microsoft das Verhalten auch auf Seitenwechsel von Site Collection zu Site Collection ausgeweitet.
Dadurch reduzieren sich sowohl die Zugriffe auf SharePoint als auch die Menge der übertragenen Daten, wodurch die Seiten wesentlich schneller geladen werden.
Die Funktion kommt ihnen bekannt vor? Für Classic Seiten kann dieses Feature „Minimal Download Strategie“ extra aktiviert werden. Auf Modern Pages ist es immer aktiv.
Ja und Nein.
Ja,
… wie schon bei der Minimal Download Strategy auf Classic Pages funktioniert die Navigation zwischen den Site Collections und die damit verbundene Anzeige neuer Daten schneller, die zu übertragende Datenmenge sinkt.
Nein,
… die „Partial Page Render Strategy“ bereitet Probleme beim Einsatz von SPFx Extensions wenn man nicht schon beim Erstellen der Extension darauf Rücksicht nimmt.
Warum?
Ziel der „Partial Page Render Strategy“ ist es die Navigation zwischen den Seiten schneller zu machen. Um das zu erreichen werden Komponenten nur einmal geladen und danach so lange wie möglich „am Leben“ erhalten.
Die OnInit Methode einer Extension wird aufgerufen, wenn diese geladen wird (onDispose wenn sie endgültig entfernt wird). Wenn man nun dieselbe Extension auf mehreren Seiten hat, wird die onInit Methode nicht aufgerufen, wenn ein Seitenwechsel stattfindet, da SharePoint versucht die vorhandene Extension weiter zu verwenden.
Dadurch bleiben Extensions theoretisch schnell.
Die
Probleme treten nun auf, wenn man diesen Umstand nicht beachtet hat und
eventuell Daten in der onInit Methode lädt oder wenn man sich darauf verlässt,
dass der Status der Extension bei einem neu laden der Seite zurückgesetzt wird.
Microsoft empfiehlt sich an das onChange Event zu hängen um auf Seitenänderungen zu reagieren. Jedoch hat sich gezeigt, dass diese Empfehlung nicht immer zum Ziel führt.
OnChange ist mit dem PlaceholderProvider verbunden und reagiert daher auf Veränderungen der Platzhalter. Welche auf der Seite existieren, sind sie sichtbar oder nicht usw. Wenn die Platzhalter auf den Seiten sich jedoch nicht verändern, dann gibt es auch kein onChange Event.
Die sichere Methode, um bei jedem Seitenwechsel sicherstellen zu können, dass alle Daten die benötigt werden, geladen werden und aktuell sind, besteht darin, sich auf das onNavigated Event zu hängen. Dieses Event wird immer dann aufgerufen, wenn ein Seitenwechsel stattfindet und gibt uns die Möglichkeit zu entscheiden, ob wir unsere Extension updaten wollen oder nicht.