Wenn Sie „den Server anweisen wollen, dass eine Sammlung statisch ist“, ich bin mir dessen bewusst zwei mögliche Optimierungen:
- Sie die Datenbank mit einer Live-Abfrage nicht beobachten, weil die Daten niemals
ändern
- Sie die Ergebnisse dieser Abfrage im merge box nicht speichern, weil sie verfolgt und mit anderen Daten (speichern Speicher und CPU)
(1) ist etwas verglichen werden nicht müssen Sie ziemlich leicht tun können indem Sie Ihren eigenen Veröffentlichungscursor erstellen. Wenn jedoch ein Client dieselbe Abfrage beobachtet, glaube ich, dass Meteor (zumindest in Zukunft) dafür optimiert wird, so dass es immer noch nur eine Live-Abfrage für eine beliebige Anzahl von Clients gibt. Was (2) angeht, ist mir keine direkte Möglichkeit bekannt, dies zu tun, da dies möglicherweise die Daten verschmelzen könnte, die über multiple publications and subscriptions zusammengeführt werden.
Um eine Live-Abfrage zu vermeiden, können Sie der Veröffentlichungsfunktion manuell Daten hinzufügen, anstatt einen Cursor zurückzugeben. Dadurch wird die .observe()
-Funktion aufgerufen, um Daten mit dem Abonnement zu verbinden. Hier ist ein einfaches Beispiel:
Meteor.publish(function() {
var sub = this;
var args = {}; // what you're find()ing
Foo.find(args).forEach(function(document) {
sub.added("client_collection_name", document._id, document);
});
sub.ready();
});
Dies bewirkt, dass die Daten an client_collection_name
auf der Client-Seite hinzugefügt werden, die die gleichen Namen wie die Sammlung von Foo
, oder etwas anderes verwiesen haben könnte. Beachten Sie, dass Sie many other things with publications tun können
UPDATE (auch, siehe Link oben.): zu beheben Probleme aus (2), die potentiell sehr problematisch sein kann, abhängig von der Größe der Sammlung, ist es notwendig, in dem Bypass Meteor insgesamt. Eine Möglichkeit dazu finden Sie unter https://stackoverflow.com/a/21835534/586086. Eine andere Möglichkeit besteht darin, einfach die Sammlung fetch()
ed als Methodenaufruf zurückzugeben, obwohl dies nicht die Vorteile der Komprimierung bietet.
Diese bis # 2 die akzeptierte Antwort sein sollte aufgelöst werden kann. Dank Andrew –
@WesJohnson sehen http://stackoverflow.com/a/21835534/586086 für wie 2 # lösen. Ich werde diese Antwort auch irgendwann aktualisieren. –