Как вы делаете пагинацию в GUN?
Как вы делаете что-то вроде gun.get({startkey, endkey})?
2 ответа
@qwe123wsx @sebastianmacias извиняется за задержку! Первоначально опубликовано по адресу: https://github.com/amark/gun/issues/479
У спецификации провода есть протокол для этого, но он еще не реализован. Это выглядит примерно так:
gun.on('out', {get: {'#': {'>': 'a', '<': 'b'}}});
Однако это еще не работает. Я бы порекомендовал вместо этого:
(1) Поведение нумерации страниц сильно отличается от одного приложения к другому, и нам будет сложно создать решение "один размер подходит всем", поэтому было бы очень полезно, если бы вы могли реализовать свою собственную * нумерацию страниц и сделать ее Доступный в качестве пользовательского модуля, мы можем извлечь уроки из вашего опыта (что сработало, а что нет) и сделать лучшее решение частью ядра.
(2) Тем временем ваше приложение, вероятно, будет нормально работать без разбивки на страницы, хотя оно может быть построено (оно предназначено для версии после 1.0), а затем, когда ваше приложение станет более популярным, его будет довольно легко добавить без особого рефакторинга, как только вам это нужно, и это доступно.
... * Как построить свой?
Множество хороших статей на эту тему, лучшая из всех, что я видел, написана на Neo4j о том, как это сделать в графической базе данных (которая также применима к оружию) https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html.
Другая грубая идея заключается в том, что вы моделируете свои данные на основе нумерации страниц или времени. Таким образом, вместо того, чтобы ВСЕ твиты попадали в таблицу твитов пользователя, вместо этого, таблица твитов пользователя - это таблица ДНЕЙ (или недель), а затем вы помещаете твит в недельную таблицу. Теперь, когда вы загружаете данные, вы можете очень легко сканировать / пропускать без выходных, в то время как это обеспечивает высокую пропускную способность.
Грубый код PSEUDO:
function onTweetSend(tweet){
gun.get('user').get('alice').get('tweets').get(Date.uniqueYear() + Date.uniqueWeek()).set(tweet)
}
function paginateUserTweet(howMany, cb){
var range = convertToArrayOfUniqueWeekNamesFromToday(howMany);
var all = [];
range.forEach(function(week){
gun.get('user').get('alice').get('tweets').get(week).load(function(tweets){
all.push(tweets);
if(all.length < range.length){ return }
all = flattenArray(all);
cb(all);
});
});
}
Теперь мы можем использовать https://gun.eco/docs/RAD#lex
gun.get(...).get({'.': {'>': startkey, '<': endkey}, '%': 50000}).map().once(...)