Eines der Dinge, die mich bei OneBox etwas stören, ist, dass der Inhalt von OneBox im Beitrag zwischengespeichert wird und sich nicht ändert, wenn die Felder geändert werden, solange der Beitrag nicht bearbeitet wird.
Zum Beispiel erstellen wir eine OneBox für ein Konto, und eine Woche später ändert der Benutzer seine Biografie…
Das erneute Herunterladen der Onebox bei jedem Seitenaufruf würde die Leistung erheblich verlangsamen. Es wäre unsinnig, eine Onebox erneut herunterzuladen, die sich nie geändert hat. Da es keine Möglichkeit gibt, zu erkennen, ob sie sich geändert hat, ist ein erzwungenes Neuaufbauen des Beitrags (mit dem Schraubenschlüssel oder durch Bearbeiten) der richtige Weg. Wenn Sie wüssten, dass eine bestimmte Kategorie wahrscheinlich Oneboxes enthält, die Sie regelmäßig aktualisieren möchten, könnten Sie ein Plugin erstellen, das beispielsweise alle Themen in dieser Kategorie täglich neu erstellt.
Allgemein werden Oneboxes zwischengespeichert, da Sie das Scraping externer Seiten lokal drosseln möchten, um eine Sperrung zu vermeiden! (Aber natürlich hat die Zwischenspeicherung auch einen Leistungsvorteil!) Um das Cache-Verhalten in den seltenen Fällen zu umgehen, in denen Sie dies benötigen, fügen Sie einfach einen gefälschten Query-String wie:
Onebox-Caching ist für externe Inhalte absolut notwendig, und es wird nicht erwartet, dass diese Inhalte aktualisiert werden. Ich meinte interne Oneboxes. Wie ich im obigen Beispiel erwähnt habe, wird erwartet, dass die von einem Benutzer erstellte Onebox auf allen Seiten aktualisiert wird, indem die Biografie der Person geändert wird.
Außerdem sollten Oneboxes für interne Inhalte gecacht werden, was notwendig ist, um die Last zu reduzieren. Es wäre jedoch möglicherweise nicht schlecht, interne Oneboxes irgendwo zu indizieren, und falls sich der Quelldatensatz ändert, wird eine Aktualisierungsaufgabe für sie geplant.
In der aktuellen Situation wird, falls Discourse das Format der Onebox ändert (für interne Fälle), diese in alten Beiträgen weiterhin mit demselben Muster angezeigt. Dieses Problem wäre gelöst, wenn wir den Inhalt der Onebox als JSON im Beitrag cachen und vom Client formatieren lassen.
Ich baue Onebox-Unterstützung in meine Website ein, und das Bearbeiten eines Beitrags aktualisiert den Onebox-Cache nicht. Außerdem sehe ich unter meinem Schraubenschlüssel-Menü keine Option für „Beitrag neu aufbauen".
Das Hinzufügen eines gefälschten Query-Strings funktioniert jedoch, obwohl beim Zurückgehen zur ursprünglichen URL wieder die zwischengespeicherte Version angezeigt wird.
Gibt es eine Einstellung oder einen Trick, den ich übersehen habe?
Seien Sie vorsichtig: Die Verwendung eines CDN als Proxy vor der Website und die Aktivierung der Cache-Schicht im Proxy können manchmal Probleme verursachen. Wenn Sie ein CDN als Proxy verwenden (wie Cloudflare), schalten Sie es einmal aus und prüfen Sie das Problem erneut.
Ich bin mit CDNs nicht vertraut und verwende auch keinen Cloudflare. Ich füge lediglich og:-Metadaten zu meiner Website hinzu, um OpenGraph und damit Onebox zu implementieren.
Dadurch nehme ich viele Änderungen an meiner eigenen Website vor und möchte sehen, wie sie erscheinen, wenn sie von Discourse referenziert werden.
Ich habe bemerkt, dass das Bearbeiten eines Beitrags dazu nicht führt, dass der Onebox-Link aktualisiert wird. Das Hinzufügen von ?x=1 zur URL bewirkt dies jedoch.
Sollte der Onebox die Ziel-URL bei jeder Bearbeitung eines Beitrags erneut scannen?
Ich sehe hier nicht viel Interesse… das scheint mir ein Fehler zu sein. Gibt es vielleicht eine Checkbox, mit der man die Onebox-Aktualisierung ein- und ausschalten kann?
Als Beispiel für einen alternativen Ansatz: Diese Seite ermöglicht es dir, deine Metadaten zu testen, um zu sehen, was angezeigt wird, und fungiert gleichzeitig als Frontend für den Facebook-Cache.
Komisch, dass ihr OpenGraph-Tag anscheinend defekt ist!
Wenn du in diesem Tool eine URL eingibst, werden die Cache-Ergebnisse abgerufen, und du erhältst eine Schaltfläche, mit der du die Seite neu scrapen kannst, um ihren Cache zu aktualisieren.
Das könnte eine schöne Option für dieses Tool sein… vielleicht eine Schaltfläche, die erscheint, wenn du mit der Maus über eine im Cache gespeicherte URL fährst?
So wie es ist, werden meine ersten Tests bei der Implementierung dieser Funktion immer das zeigen, was bei bestimmten Links angezeigt wird.
Wir suchen auch nach einer Möglichkeit, Oneboxes zu aktualisieren, in unserem Fall Oneboxes anderer Themen in unserem Forum.
Unser Anwendungsfall ist der Aufbau einer Dokumentation über das Forum hinweg, die andere Wiki-Beiträge neu kombinieren kann. Da es sich jedoch um Wiki-Beiträge handelt, ist es offensichtlich nicht ideal, wenn die Onebox nicht mit den zahlreichen Änderungen Schritt hält, die im Laufe der Zeit wahrscheinlich vorgenommen werden.
Es wäre großartig, wenn wir eine Einstellung hätten, um Oneboxes automatisch zu aktualisieren, wenn sie der Domain unseres Forums entsprechen und/oder zur Kategorie gehören, in der dieser Anwendungsfall auftritt (Wiki/Dokumentation).
Da ich die Opengraph-Unterstützung auf meiner Hauptwebsite ausbaue (die über SSO mit Discourse verbunden ist), stoße ich zunehmend auf dieses Problem.
Ein Trick, der wirklich hilft, ist, dass ich die eigentliche URL nicht mehr sofort, wenn überhaupt, einfüge. Stattdessen verwende ich den von @merefield oben vorgeschlagenen Trick:
Ich füge beim ersten Verweis auf jede URL ein ?n=1 am Ende hinzu. Wenn die Onebox schlecht aussieht, kann ich die Seite aktualisieren, meine N-Variable inkrementieren und iterieren, bis sie gut aussieht.
Sobald ich fertig bin, erhält jeder, der einfach nur die URL einfügt, den letzten Abgriff der Seite und nicht den ersten.