Выжимаем максимум из шаблонизатора - Виктор Коцеруба,...

Preview:

DESCRIPTION

 

Citation preview

ПРИВЕТ

ТЫ НЕ УМЕЕШЬ ПИСАТЬ НА ПИТОНЕ

правда правда

Я ТОЖЕно стараюсь

ХВАЛЮ ЖИНЖУ• простая в использовании

• умеет больше

• быстрая

• без интерпретатора

КАК ОНА РАБОТАЕТ

• парсит шаблон

• генерирует код

• компилирует

РЕЗУЛЬТАТ - КОД НА ПИТОНЕ

РУГАЮ ЖИНЖУ• не знает про html

• выводит через yield

• лишние name resolution (environment)

• context ??

ЗАВИДУЮ HAML

• понимает html

• лаконичный

• ruby, javascript

А КАК ЖЕ Я?1. HamlPy = haml → django

2. mint - честный

3. PyHAML = haml → mako

НАДО ЧТО-ТО ДЕЛАТЬ!

• тормоза - бесят

• конвертировать - скучно

• синтаксис минта - не нравится

ПИШУ САМ

ПИШУ САМ• привычный синтаксис

• высокая скорость

• минимальные усилия

ПИШУ САМ• использую ast.parse

• генерирую код

• оптимизирую

ДУМАЮ

ОПТИМИЗИРУЮ

ast.NodeTransformer

ОПТИМИЗИРУЮ

close_tag("table")

print("</table>")

ОПТИМИЗИРУЮ

open_tag("table", {"class": "foo"})

print('<table class="foo">')

ОПТИМИЗИРУЮopen_tag("td", {"name": name})

print('<td name="',

quoteattr(name),

'">')

ОПТИМИЗИРУЮ

print('<tr>')

print('<td>')

print('<tr><td>')

ОПТИМИЗИРУЮ

for i in [0, 1, 2]:

print(i)

print(0, 1, 2)

ЧИСТЫЕ ФУНКЦИИпривет, хаскель

ОПТИМИЗИРУЮ

print(escape("<foo"))

print("&lt;foo")

ОПТИМИЗИРУЮ

for i in range(3):

print(i)

print(0, 1, 2)

ИНЛАЙНИНГпривет, си

ОПТИМИЗИРУЮdef foo(i):

print(i)

foo(1)

print(1)

ОПТИМИЗИРУЮ• считаю заранее

• инлайню функции

• разворачиваю циклы

• склеиваю строки

• list.append / list.extend

НАСКОЛЬКО БЫСТРО

mako jinja2 hamly

3732

7

mse

c

ДУМАТЬ - ПОЛЕЗНО

КАК НАУЧИТЬСЯ?

• elixir

• lisp (!)

• haskell (!!)

ВОТ И ВСЕ