Giter VIP home page Giter VIP logo

derby-faq's People

Contributors

cray0000 avatar icaliman avatar ovvn avatar plasticut avatar skarm avatar vmakhaev avatar yska avatar zag2art avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

derby-faq's Issues

Subscribe on projections

Can I use projection for subscribe and reactively update data in it's collection? Or projections are for read-only?

Как работают подписки?

В документации дерби есть пример, когда подписка на несколько запросов задается с помощью одной функции

model.subscribe(user, todosQuery, function(err)...

Сокращает ли такая форма записи количество запросов которые получит сервер?

Как остановить бесконтрольный рост БД (mongodb)?

На сколько я понимаю все изменения в моделях записываются в БД с соответствующим номером версии. При частом обновлении БД начинает дико рости в объеме. Есть ли какой-то способ это предотвратить?

setTimeout() in Derbyjs

Расскажите пожалуйста как работают таймеры в Derbyjs и как правильно с ними работать. Как запустить таймер на сервере и на клиенте одновременно, как по отдельности, или там или там. Как правильно запустить таймер из реактивной функции на сервере. Буду благодарен за ответ.

Производительность дерби

Привет.
Хочу поинтересоваться какие есть практики насчет производительности дерби в реальной жизни? Как много клиентов/запросов он у вас обслуживает?

Мы столкнулись с ситуацией когда нода съедает весть процесс при всего лишь 32 RPS. Приложение работает таким образом, что создает много подписок на один запрос. Используем browser channel а не сокеты, возможно на сокетах увидим другую картину.

А как у вас обстоят дела с нагрузкой?

Как через хук разделить данные и отправить их в разные коллекции?

Привет.
Как лучше реализовать следующий сценарий:

  1. Форма отправляет на сервер учетную запись пользователя, которая помимо текстовых даных содержит также и его пароль
  2. Сервер должен отделить пароль от данных пользователя и сохранить его в отдельной коллекции
  3. Паред сохранением пароля его нужно замариновать со специями

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

Как подписаться на несколько запросов одновременно?

Я видел в группе совет про использование звездочки

app.get "*", (page, model, params, next)-> ... next()

Но он рабоатет только в пределах одного приложения. Если же в проекте несколько приложений, то происходят нерелевантные подписки.

Есть ли другие способы создать подписку на несколько запросов и раздать ее всем роутам в пределах приложения?

Как лучше хранить счетчики.

Привет.
Я задумал перевести приложение с экспресса на дерби и хочу посоветоваться. У меня есть список постов, у каждого поста есть счетчик просмотров. Лог просмотров мне не требуется, поэтому для меня OK хранить счетчик как item.cnt.views, соответсвенно при каждом просмотре сервер увеличивает (model.increment) значение счетчика. Кроме того я не хочу выносить счетчик в лог, потому что для вывода счетчика потребуется создавать лишнюю подписку.

Вроде бы все просто, но во-первых из доков не ясно как будет происходить синхронизация. При изменении поля, дерби перешлет подписчикам только новое значение поля или же весь item. Ожидаемо, что нужно передавать только значение поля, но уверенности нет.

Вторая проблема это индексция поисковиком. Мне бы хотелось использовать эластик ривер, но при более-менее приличной нагрузке эластик окажется загружен бессмысленной индексацией записей у которых обновился только счетчик, возможно кто-то уже сталкивался чем-то подобным и есть наработки? Кстати как у монго сейчас обстоят дела с поиском, он уже пригоден к использованию (стеммминг, производительность)?

Проблема мертвого клиента

Привет.
Есть еще такая проблема. Вечером оставляю открытую вкладку с дерби-приложением, а утром нахожу труп запись в консоли: Failed to load resource: net::ERR_CACHE_MISS

А если покликать по ссылкам, то меняется только адресная строка, а рендер не происходит.

В консоли после такого клика появилось: WebSocket: connection is broken CloseEvent {reason: "", code: 1006, wasClean: false, clipboardData: undefined, path: NodeList[0]…}

Это проблема самого дерби или проблема его конфигурации? Хочется сделать, так, чтобы он по возможности сам восстанавливал соединение.

Should I remove dom event listeners on component destroy event or not?

Hello.
It's not clear to me from the docs would derby care of dom event listeners or not.

Here is my case:

module.exports = class View
    view: __filename.replace /\.[^\.]+$/, ""
    create: (model, dom) ->
        model.setNull "ripples", []
        dom.on "mousedown", @container.parentNode, (ev) =>
            @push ev.layerX, ev.layerY
            delay 100, => @shift() if ev.button
            dom.once "mouseup", (ev) =>
                return unless model.get "current"
                @shift()
                ev.stopPropagation()

I suspect that I have to remove the listener manually, but the thing is that derby doesn't pass dom object to destroymethod.

How can I use app.model.channel with new [email protected] and [email protected]?

On the client/server before (during the derby.js v6.*) could use the channel as set forth in this document derby-faq

Now, is not possible to do it.

You always will get an error on the client: TypeError: app.model.channel is undefined
code app.model.channel.send

And on the server - TypeError: Cannot call method 'on' of undefined
code client.channel.on

Please, help me to resolve the problem - communication between client-server or server-client with channels.

If this problem is not relevant today, could you show a new solution?

Подписка на изменение значения атрибута компонента

Привет всем. Сразу к делу!
Суть в том, что хочется создать что-то типа значение selected у option (вложенного в select), но у span с input(type='text').
То есть создать компонент типа "изменяемый текст" - надпись, которая, если нажать, заменяется на поле ввода, пользователь редактирует значение, нажимает Enter и значение обновляется (у других пользователей в том числе).
Есть уже готовая реализация данного компонента, но был обнаружен баг в самом фреймворке (или у меня руки из Ж, подскажите).

В общем тестовый проект

В пустом проекте в index.jade

each _page.items
  button.btn.btn-default(on-click='deleteItem(this.id)') {{this.title}}
  test-comp(value='{{this.title}}')

и в index.js

app.component(require('../../components/test-comp'));
app.proto.deleteItem = function(id) {
    this.model.del('items.' + id);
}
app.get('/', function(page, model) {
    model.subscribe('items', function() {
        if (!model.get('items')) {
            model.add('items', { title: 'item 1'});
            model.add('items', { title: 'item 2'});
            model.add('items', { title: 'item 3'});
            model.add('items', { title: 'item 4'});
            model.add('items', { title: 'item 5'});
        }
        model.filter('items', true).ref('_page.items');
        page.render('home');
    });
});

(стандартная часть пропущена)

Создаём в папке component папку test-comp
В самом компоненте index.jade

index(element='test-comp'):
  p {{@value}}
  p
    b {{value}}

index.js компонента

module.exports = TestComp;
function TestComp() {}
TestComp.prototype.view = __dirname;
TestComp.prototype.init = function(model) {
    model.subscribe('value', function() {
        console.log('value: ' + model.get('value'));
        model.on('change', 'value', function(n, o) {
            console.log('value changed from ' + o + ' to ' + n);
        })
    });
}

Всё хорошо работает и правильно отображается до тех пор, пока не начать кликать на кнопки. Значение простого текста меняется правильно, а значение полужирного ведёт себя странно. Как раз в index.js компонента строка model.subscribe('value', ...) подписывается как раз на выделенное жирным значение, что видно в консоли.

Вывод консоли при удалении третьего элемента:

value changed from item 3 to undefined
value changed from item 4 to item 5
value changed from item 5 to undefined

Скрин:
trouble

Подписка на @value не работает. Как можно корректно обрабатывать изменение значения аттрибута?
Рассчитываю на вашу помощь
Спасибо

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

translation

hi zag2art

We should concentrate our forces to bring that to english. Then I would be more than happy to translate this to french.

cheers

Количество подключенных пользователей к приложению

Добрый день, в faq en есть такие строки

for (var id in app.clients) {
  app.clients[id].channel.send('myEvent', data);
}

в app.clients хранится объект подключенных к приложению пользователей, но если app не является глобальной переменной, допустим в production, то app.clients будет пустой.
Вопрос: где взять подключенных клиентов к серверу когда app не глобальна.

Обработка ParentWrapper

Всем привет, подскажите как обрабатывать в компонентах атрибут который передается как ParentWrapper ? Пример, задана функция в родительском компоненте:

...
test: ()-> if false then "kabuuu" else "kuiaaa"
...

и создание дочернего:

<view name="olala" testattribute="{{ test() }}" />

в классе дочернего компонента:

init:(model)->
   console.log model.get "testattribute"

выводит что то типа:

ParentWrapper {template: DynamicText, expression: FnExpression, content: undefined, type: "ParentWrapper", serialize: function…}
expression: FnExpression
template: DynamicText
__proto__: Template

Как с этим работать?

Работа с датами в Дерби

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

Проблема в том, что в обоих случаях происходит потеря информации, например часовой пояс теряется. Что если сайтом пользуются люди из разных часовых поясов? Ну или кто-то умышленно отвел часы назад?

Получается, создавать дату на клиенте — моветон — можно только на сервере.

Допустим, я создаю фейсбук и мне нужно вывести меню архива: https://www.dropbox.com/s/peawsgvw07o8z08/Screenshot%202014-07-26%2014.39.47.png

Из таймштампа не получить группировку по году. Остается хранить год (и месяц) отдельно (избыточность), допустим мы сделали это. Как тогда сделать запрос с группировкой (исходим из того что на клиенте мы не хотим грузить и фильтровать большие массивы данных)?

Подписка на данные в компоненте

Прочитал замечание про то, что все подписки лучше делать в контроллере, однако никак не соображу как же в таком случае делать в компоненте реактивные привязки.

Привязываюсь в контроллере к докумену

    model.subscribe('messages.hello', function() {
        model.ref('_page.message','messages.hello');
        page.render();
    });

В основном шаблоне привязка работает корректно

  <h1>{{_page.message.message}}</h1>
<input value="{{_page.message.message}}"/><br/>

меняя текст, меняется и заголовок.
В этом же шаблоне передаю данные в компонент

<panel data={{_page.message}} />

В шаблоне компонента связываю данные с полем ввода - пробовал оба варианта - локально и глобально.

<input type="text"  value="{{#root._page.message.message}}">
<input type="text"  value="{{data.message}}">

Значения передаются корректно - тут вопросов нет. Но ни в первом ни во втором случае не происходит реактивного связывания - изменения поля в компоненте не приводит к изменению модели и наоборот.

Что нужно сделать для установки в компоненте реактивной привязки к данным, которые были получены как параметры?

Пример чата

https://github.com/derbyjs/derby-examples - вот тут есть пример чата, который (возможно только у меня), странно работает. Суть в том, что для просмотра новый сообщений в этом чате, приходиться "рефрешить" окно браузера.

А есть пример чата как реалтайм приложения?

В частности, меня интересует, как подписаться на изменения в коллекции(или среза(фильтра) коллекции), чтобы все подписчики видели их изменения.

Можно ли получить в компоненте документ по remote пути?

Разъясните мне, пожалуйста, такой нюанс. Можно ли в компоненте таким образом обращаться по remote пути, чтобы получить синхронизированный с db документ?

app.get('home', '/');

app.component('new', New)

function New() {};

New.prototype.create = function(model) {
  var item = model.root.at('items.1');
  model.subscribe(item, function (err) {
    item.set({text: "Hello world"});
  });
}

Typo

Загрузка компонентов в библиотеку

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

Здесь видно, как Натан вручную прописел каждый компонент. Мне бы хотелось сделать что-то типа:

icons.forEach(function(icon) {
    app.component(require( "./icons/" + icon));
});

На сервере это работает, а на клиенте дает ошибку Error: Cannot find module './icons/air'.

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

Как задать лимит с помощью share-access?

Привет.
Я посмотрел урок и заметил, следующее упущение в том как используется share-access.

Допустим у нас есть огромная коллекция, которую мы открыли для чтения. Приложение использует подписки с лимитами, но остается дыра через которую некто может выполнить запрос на подписку ко всей коллекции что может уронить канал или сервер.

Вопрос, как нам разрешить подписки, но при этом через политику ограничить количество передаваемых в одной подписке объектов?

Компоненты: связка документа с локальным путем.

В faq описано как в компоненте связать результат запроса с локальным путем.
Такая конструкция работает корректно

    var q = model.root.query('project',{});
    model.subscribe(q,function(){
        model.ref('formdata',q);
    });

Как сделать связь не с запросом, а с конкретным документом?
Аналогичная конструкция со scoped моделью отказывается работать

    var scoped = model.root.at('project.986690fa-37f6-4e03-b97b-99ef04875d2b');
    model.subscribe(scoped,function(){
        model.ref('formdata',scoped);
    });

Global scope

When I need to pass to my app an expressapp or store, I'm calling it require("./app")(expressapp, store) and wrapping it into a function:

module.exports = function (expressapp, store) {
    var derby = require("derby"),
        app = derby.createApp("my-app-name", __filename);

    global.app = app;// for development only

    // some code here, using expressapp and store...

    return app;
};

Works fine, except global.app = app;. In this way (with module.exports = function (...) I can't access my app from browser console. Why??

Серверное время в _session.time

Добрый день.
Мне нужно чтобы в локальной переменной находилось актуальное серверное время, чтобы в дальнейшем с ним работать. Как мне поместить серверное время Date().getTime() в _session.time ?. так же нужно обновление на стороне сервера по setInterval

Page rendering

Хочется реализовать страницу, половина которой будет отрисовываться с помощью derby, а вторая часть будет полностью сохранять свое состояние во время переходов между страницами. Могу ли я с этой целью перекрыть метод render класса Page, чтобы заменять html не всего элеметна body? Или лучше использовать какой-нибудь другой способ?

Igor ошибка при отсутствии Redis

Пункт. А что делать, если у меня уже есть готовая mongodb-база данных, ее можно использовать с derby?

Если следовать инструкции выдает ошибку если редис не запущен. Стоит как-то отразить этот факт.

Ошибка обновления рендера на клиенте

У нас недавно появилась ошибка при рендере на клиенте такого характера:

p.localUpdate   @   eventmodel.js:333
p.update    @   eventmodel.js:349
p._set  @   eventmodel.js:416
(anonymous function)    @   eventmodel.js:537
p._each @   eventmodel.js:303
p._each @   eventmodel.js:314
p._each @   eventmodel.js:314
p._each @   eventmodel.js:314
p.mutate    @   eventmodel.js:519
p.set   @   eventmodel.js:536
(anonymous function)    @   Page.js:151
i   @   events.js:232
i.emit  @   events.js:99
u.emit  @   events.js:77
i   @   mutators.js:41
s._mutate   @   mutators.js:15
s._set  @   mutators.js:44
s.set   @   mutators.js:31
t.exports.t.setState    @   lenta-item-post.coffee:2
t.exports.t.bootstrap   @   lenta-item-post.coffee:2
(anonymous function)    @   lenta-item-post.coffee:20
u.wrapCallback  @   events.js:44
s.add   @   util.js:54
(anonymous function)    @   browser.js:24

Возникает непонятно по какому принципу, уже переделал код одного компонента что бы избавиться от нее, но как только избавился в одном компоненте она появилась из другого компонента.
Подскажите в чем может быть проблема? Где искать решение ? Заранее спасибо.

Racer and react

Hello.
I’d like to raise react.js question. What are the reasons to support derby these days? Wouldn’t it better to create racer + react + express setup instead of derby? As a result you would cut down the development costs (another year passed and derby still is .6 alpha) and get an access to tons of react components.

Conditional tag name

Hello.
I'm working on md-button component. It has a condition — normally it should be rendered as a button element, but if href attribute is provided it should be rendered as an anchor.

How can I optimise the below template and either get rid of conditional statement or avoid atrributes copy/pasting?

View:

<index: element="md-button">
    {{ if @href }}
        <a 
            class="md-button {{ @class }} {{ disabledClass }}"
            href="{{ @href }}"
            role="{{ @role }}"
            tabindex="{{ @tabindex }}"
            target="{{ @target }}"
            title="{{ @title }}"

            on-click="handleClick($ev, $el)"
            on-dblclick="handleDblclick($ev, $el)"

            on-mousedown="handleMousedown($ev, $el)"
            on-mouseup="handleMouseup($ev, $el)"
            on-mouseover="handleMouseover($ev, $el)"
            on-mouseout="handleMouseout($ev, $el)"

            on-focus="handleFocus($ev, $el)"
            on-blur="handleBlur($ev, $el)"
        >
            <span class="md-button__label">{{ @content }}</span>
            <md-ripple />
        </a>
    {{ else }}
        <button 
            class="md-button {{ @class }} {{ disabledClass }}"
            disabled="{{ @disabled }}"
            role="{{ @role }}"
            tabindex="{{ @tabindex }}"
            title="{{ @title }}"
            type="{{ @type }}"

            on-click="handleClick($ev, $el)"
            on-dblclick="handleDblclick($ev, $el)"

            on-mousedown="handleMousedown($ev, $el)"
            on-mouseup="handleMouseup($ev, $el)"
            on-mouseover="handleMouseover($ev, $el)"
            on-mouseout="handleMouseout($ev, $el)"

            on-focus="handleFocus($ev, $el)"
            on-blur="handleBlur($ev, $el)"
        >
            <span class="md-button__label">{{ @content }}</span>
            <md-ripple />
        </button>
    {{ / }}

How to pass element reference as an argument?

Hello!
I need to pass a reference to a component as an event handler argument.

Template:

<index:>
   <md-button class="md-button--raised" as="a">disabled</md-button>
   <md-button class="md-button--raised md-button--warn" on-click="btnDisable(a)">warn</md-button>

Controller:

app.proto.btnDisable = (btn) ->
    console.log btn # get undefined here

What am I doing wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.