mailru / fest

javascript templates
Other
128 stars 28 forks source link

added set/get optimizations #22

Closed eprev closed 12 years ago

eprev commented 12 years ago

В выходном шаблоне должны присутствовать только использующиеся set блоки. В случае если хотя бы один get блок был объявлен с select, тогда оптимизация не будет выполнена.

Пример:

<?xml version="1.0"?>
<fest:template xmlns:fest="http://fest.mail.ru" context_name="json">
    <fest:get name="foo" />
    <fest:set name="foo">
        foo
    </fest:set>
    <fest:set name="bar">
        bar
    </fest:set>
</fest:template>

В данном случае, в коде шаблона будет присутствовать блок set с именем bar. Теперь представим шаблон utils.xml, который напичкан сотней set блоков, и это файл включается в каждый шаблон, отправляемый клиенту. Клиент, получает огромное количество ненужного никому кода.

Для решения данной проблемы было сделано следующее. Код генерируется секционно. Блок set закрывает текущую безымянную секцию и открывает новую именованную (по значению атрибута name). По выходу из именованной секции создается новая безымянная. При сборке шаблона остаются только безымянные секции и именные секции, которые были упомянуты в блоках get.