0
ПРИВЕТ
ТЫ НЕ УМЕЕШЬ
ПИСАТЬ НА ПИТОНЕ
правда правда
Я ТОЖЕ
но стараюсь
ХВАЛЮ ЖИНЖУ
• простая в использовании
• умеет больше
• быстрая
• без интерпретатора
КАК ОНА РАБОТАЕТ
• парсит шаблон
• генерирует код
• компилирует
РЕЗУЛЬТАТ -
КОД НА ПИТОНЕ
РУГАЮ ЖИНЖУ
• не знает про 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
HAMLY
github.com/barbuza/hamly
НАСКОЛЬКО БЫСТРО
37
32
7
mako jinja2 hamly
msec
ДУМАТЬ - ПОЛЕЗНО
КАК НАУЧИТЬСЯ?
• elixir
• lisp (!)
• haskell (!!)
ВОТ И ВСЕ
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014
Upcoming SlideShare
Loading in...5
×

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

375

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
375
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Выжимаем максимум из шаблонизатора - Виктор Коцеруба, PyCon RU 2014"

  1. 1. ПРИВЕТ
  2. 2. ТЫ НЕ УМЕЕШЬ ПИСАТЬ НА ПИТОНЕ правда правда
  3. 3. Я ТОЖЕ но стараюсь
  4. 4. ХВАЛЮ ЖИНЖУ • простая в использовании • умеет больше • быстрая • без интерпретатора
  5. 5. КАК ОНА РАБОТАЕТ • парсит шаблон • генерирует код • компилирует
  6. 6. РЕЗУЛЬТАТ - КОД НА ПИТОНЕ
  7. 7. РУГАЮ ЖИНЖУ • не знает про html • выводит через yield • лишние name resolution (environment) • context ??
  8. 8. ЗАВИДУЮ HAML • понимает html • лаконичный • ruby, javascript
  9. 9. А КАК ЖЕ Я? 1. HamlPy = haml → django 2. mint - честный 3. PyHAML = haml → mako
  10. 10. НАДО ЧТО-ТО ДЕЛАТЬ! • тормоза - бесят • конвертировать - скучно • синтаксис минта - не нравится
  11. 11. ПИШУ САМ
  12. 12. ПИШУ САМ • привычный синтаксис • высокая скорость • минимальные усилия
  13. 13. ПИШУ САМ • использую ast.parse • генерирую код • оптимизирую
  14. 14. ДУМАЮ
  15. 15. ОПТИМИЗИРУЮ ast.NodeTransformer
  16. 16. ОПТИМИЗИРУЮ close_tag("table") print("</table>")
  17. 17. ОПТИМИЗИРУЮ open_tag("table", {"class": "foo"}) print('<table class="foo">')
  18. 18. ОПТИМИЗИРУЮ open_tag("td", {"name": name}) print('<td name="', quoteattr(name), '">')
  19. 19. ОПТИМИЗИРУЮ print('<tr>') print('<td>') print('<tr><td>')
  20. 20. ОПТИМИЗИРУЮ for i in [0, 1, 2]: print(i) print(0, 1, 2)
  21. 21. ЧИСТЫЕ ФУНКЦИИ привет, хаскель
  22. 22. ОПТИМИЗИРУЮ print(escape("<foo")) print("&lt;foo")
  23. 23. ОПТИМИЗИРУЮ for i in range(3): print(i) print(0, 1, 2)
  24. 24. ИНЛАЙНИНГ привет, си
  25. 25. ОПТИМИЗИРУЮ def foo(i): print(i) foo(1) print(1)
  26. 26. ОПТИМИЗИРУЮ • считаю заранее • инлайню функции • разворачиваю циклы • склеиваю строки • list.append / list.extend
  27. 27. HAMLY github.com/barbuza/hamly
  28. 28. НАСКОЛЬКО БЫСТРО 37 32 7 mako jinja2 hamly msec
  29. 29. ДУМАТЬ - ПОЛЕЗНО
  30. 30. КАК НАУЧИТЬСЯ? • elixir • lisp (!) • haskell (!!)
  31. 31. ВОТ И ВСЕ
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×