Как я могу кэшировать данные в Meteor?

Спасибо всем! в последнее время я хочу построить небольшой cms на метеоре, но есть вопрос

1, кеш, кеш страниц, кеш данных и т.д.

Например, когда люди ищут статью

на стороне сервера:

 Meteor.publist('articles',function(keyword){
   return Articles.find({keyword:keyword});
});

в клиенте:

Meteor.subscribe('articles',keyword);

что хорошо, но...... вопрос в том, что каждый раз, когда люди делают это, он вызывает запрос о манго и снижает производительность, в других рамках используют общие http или https, люди могут зависеть от чего-то вроде кальмара или лака, чтобы кэшировать страницу или данные, поэтому каждый раз, когда вы направляетесь на URL-адрес, вы читаете данные с кеш-сервера, но Meteor построен на socket.js или websocket, и я не знаю, как кэшировать через сокет....... Я trid лак, но не видел никакого эффекта. так что, может быть, он игнорирует websocket? Есть ли какой-то метод кэширования данных, в mongodb, на сервере, могу ли я добавить кэш-сервер?

2, чат

Я вижу пример чата в https://github.com/zquestz/simplechat Но в отличие от implyment, использующего socket.js, этот пример сохраняет сообщение чата в mongodb, поэтому поток данных - это сообщение → mongo- > query- > people, это вызывает также запрос mongo! и в socket.js, просто сохраните сокет в контексте (или кеше на стороне сервера), чтобы данные не проходили через db. Мой вопрос в том, есть ли интерфейс сокета в Meteor, поэтому я могу сообщить message- > socket- > людям? и если не может, то как производительность в производственной среде является примером для чата (я вижу, что он работает медленно...)

Ответ 1

В Meteor вам не нужно беспокоиться о кэшировании запросов Mongodb. Метеор делает это за вас. Per документы по данным и безопасности:

Каждый клиент Meteor включает в себя кеш базы данных в памяти. Для управления кешем клиента сервер публикует наборы JSON-документов, и клиент подписывается на эти наборы. По мере изменения документов в наборе сервер исправляет каждый кеш клиента.

[...]

После подписки клиент использует свой кеш в качестве быстрой локальной базы данных, что значительно упрощает клиентский код. Читы никогда не требуют дорогостоящей поездки на сервер. И они ограничены содержимым кеша: запрос для каждого документа в коллекции на клиенте будет только возвращать документы, которые сервер публикует для этого клиента.

Так как Meteor делает опрос на сервере так часто, чтобы проверить, требуется ли исправление кэша клиента, вы, вероятно, видите, что эти опросы происходят время от времени. Но они, вероятно, не очень большие запросы. Кроме того, благодаря функции Meteor, называемой компенсацией задержки, при обновлении источника данных клиент немедленно отображает изменение без предварительного ожидания на сервере. Это уменьшает видимость снижения производительности для пользователя.

Если у вас много документов в монго, вы также можете увидеть, как все они получаются, если у вас все еще включен пакет автоматической публикации. Вы можете исправить это, удалив его с помощью meteor remove autopublish и напишите код, чтобы публиковать только соответствующие данные, а не всю базу данных.

Если вам действительно нужно управлять кэшированием вручную, документы также учитывают следующее:

Сложные клиенты могут включать и выключать подписки, чтобы контролировать, сколько данных хранится в кеше и управлять сетевым трафиком. Когда подписка отключена, все ее документы удаляются из кеша, если тот же документ не предоставляется другой активной подпиской.

В настоящее время разрабатываются дополнительные улучшения производительности для Meteor, в том числе прокси-сервер уровня DDP для поддержки "очень большого числа клиентов". Вы можете увидеть более подробную информацию об этом в дорожной карте Метеор.

Ответ 2

Если вы наткнетесь на этот вопрос не из-за недостатка понимания meteor minimongo и вместо этого заинтересованы в том, как кэшировать подписки после того, как они больше не нужны на данный момент (но они, возможно, в будущем и не хотят сохраняйте свои дополнительные расходы на DDP на клиентском сервере) есть два варианта пакета:

https://github.com/ccorcos/meteor-subs-cache

https://github.com/kadirahq/subs-manager

Ответ 3

Я создавал мобильное приложение, и кэш базы данных не работал, поэтому я использовал пакет метеоритов GroundDB https://github.com/raix/Meteor-GroundDB теперь база данных всегда в локальном режиме, когда я перезапускаю приложение, Также вам нужно посмотреть в пакете appecache метеор для кэширования всего приложения локально.