Тема: Snakeskin
Показать сообщение отдельно
  #146 (permalink)  
Старый 11.07.2014, 15:23
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Добавил поддержку генераторов.

{template *foo(data)}
    <div class="bar">
        {forEach data => el}
            {apply row(el)}
            {yield}
        {/}
    </div>
{/}


Директива yield будет отрендерена как

yeild __RESULT__;
__RESULT__ = '';


т.е. каждый "тик" (вызов next) будет возвращать кусок отрендеренного шаблона.

Зачем я это добавил: у меня в проекте есть места, где данные из БД возвращаются асинхронными чанками из разных сегментов и сейчас мне приходится ждать пока появятся все данные, затем выполнить шаблон (который вернёт огромную строку, и также может надолго залочить поток, т.к. внутри большой цикл) и уже потом отправлять клиенту.

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

Также генераторы позволят легко "дробить" тяжёлый шаблон на куски с помощью setImmediate, чтобы не лочить поток.

ЗЫ: напоминаю, что пока, чтобы юзать генераторы в ноде, то нужно запускать её с флагом --harmony.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 11.07.2014 в 15:26.
Ответить с цитированием