2015-05-21 2 views
1

Можно ли указать firebase для кэширования пути без подписки 'on'?Доступ к кешу без 'on'

В настоящее время я делаю следующее, которая является неэффективной, космические отходы и некрасиво:

const ref = new Firebase(someUrl) 

app.get('slow/:id', (req, res) => { 
    ref.child(id).on('value', snapshot => res.send(snapshot.val())) 
}) 

const cache = {} 

ref.on('child_added', snapshot => cache[snapshot.key()] = snapshot.val()) 
ref.on('child_changed', snapshot => cache[snapshot.key()] = snapshot.val()) 
ref.on('child_removed', snapshot => delete cache[snapshot.key()]) 

app.get('fast_wasteful_ugly/:id', (req, res) => { 
    const val = cache[req.params.id] 

    if (val !== undefined) 
    res.send(val) 
    else 
    ref.child(req.params.id).once('value', snapshot => res.send(snapshot.val())) 
}) 

ответ

2

Короткий ответ не нет - нет в настоящее время ни в коем случае рассказывания Firebase кэшировать данные с путь без добавления прослушивателя событий.

Это, пожалуйста, подумайте над тем, какие проблемы вы пытаетесь решить. Если вы хотите получить синхронный доступ к данным, хранящимся в Firebase, то подход, о котором вы упомянули выше, в настоящее время является лучшим способом сделать это.

Однако, если вы просто хотите избежать кругооборота сети для извлечения данных, то при подключении одного прослушивателя событий Firebase, где вы хотите сохранить кеширование, вы можете решить вашу проблему. В этом случае вы должны передать блок no-op при подключении слушателя и использовать ref.once('value', ...) на протяжении всего кода. Присоединив начальный прослушиватель с блоком no-op, все ваши вызовы подпоследовательности ref.once(...) будут использовать локальный кеш и не должны попадать в сеть.

+0

Хорошо. Нет-op-обработчик. Было бы неплохо иметь немного более прагматичный способ сделать это. – ronag

Смежные вопросы