Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Рвем жинжу на китайский флаг
Search
Moscow Python Meetup
PRO
February 20, 2014
Programming
0
630
Рвем жинжу на китайский флаг
Виктор Коцеруба
Некоторые темы оптимизации кода на примере самописного шаблонизатора
Moscow Python Meetup
PRO
February 20, 2014
Tweet
Share
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №89 Алексей Жиряков (онлайн-кинотеатр KION, TechLead Backend команды витрины). Доверяй, но проверяй: как KION обрабатывает свыше 400М продуктовых событий в сутки.
moscowdjango
PRO
0
10
Moscow Python Meetup №88. Евгений Блинов (VK, Руководитель команды). Токены отмены как паттерн и как библиотека cantok
moscowdjango
PRO
0
52
Moscow Python Meetup №89 Павел Мамаев (Сбер, Ведущий инженер по разработке). Классификация запросов клиентов. Дёшево и сердито
moscowdjango
PRO
0
25
Moscow Python Meetup №88. Александр Винокуров (Группа компаний "Самолет", руководитель группы разработки). Практическая сторона тестов
moscowdjango
PRO
0
51
Moscow Python Meetup №88. Иван Елфимов (Ostrovok.ru, тимлид). Переход от Statsd к Prometheus в большом Django-проекте
moscowdjango
PRO
0
47
Moscow Python Meetup №88. Александр Гончаров (Reef Technologies, старший разработчик). Рекрутинг на максималках: что бывает, если наймом занимаются сами программисты
moscowdjango
PRO
0
36
Moscow Python Meetup №87 Евгений Блинов (VK, руководитель команды). INSTLD: зависимости на автомате.
moscowdjango
PRO
0
70
Moscow Python Meetup №87. Сурен Хоренян (MTS AI). Hatch для сборки и распространения Python пакетов.
moscowdjango
PRO
0
72
Николай Хитров (Точка, Техлид). Мама, мы все тяжело больны!
moscowdjango
PRO
0
100
Other Decks in Programming
See All in Programming
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
920
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
240
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
4.1k
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
690
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
490
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
760
ONE WEDGE_company_guide
1wedge_one
0
470
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
540
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
130
使ってみよう Azure AI Document Intelligence
kosmosebi
2
300
見た目から始める生産性向上
ikumatadokoro
7
830
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
Designing Experiences People Love
moore
136
23k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
17
1.4k
Web Components: a chance to create the future
zenorocha
305
41k
How GitHub (no longer) Works
holman
304
140k
Making Projects Easy
brettharned
108
5.5k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
Building an army of robots
kneath
300
41k
Raft: Consensus for Rubyists
vanstee
132
6.3k
A Modern Web Designer's Workflow
chriscoyier
689
190k
RailsConf 2023
tenderlove
4
540
Visualization
eitanlees
136
14k
Transcript
ПРИВЕТ
ТЫ НЕ УМЕЕШЬ ПИСАТЬ НА ПИТОНЕ правда правда
Я ТОЖЕ но стараюсь
ХВАЛЮ АРМИНА • pygments • sphinx • werkzeug • flask
• jinja • ast
ХВАЛЮ ЖИНЖУ • простая в использовании • умеет больше •
быстрая • без интерпретатора
КАК ОНА РАБОТАЕТ • парсит шаблон • генерирует код •
компилирует
РЕЗУЛЬТАТ - КОД НА ПИТОНЕ
None
None
РУГАЮ ЖИНЖУ • не знает про html • выводит через
yield • лишние name resolution (environment) • context ??
None
ЗАВИДУЮ HAML • понимает html • лаконичный • ruby, javascript
А КАК ЖЕ Я? 1. HamlPy = haml → django
2. mint - честный 3. PyHAML = haml → mako
НАДО ЧТО-ТО ДЕЛАТЬ! • тормоза - бесят • конвертировать -
скучно • синтаксис минта - не нравится
ПИШУ САМ
ПИШУ САМ • привычный синтаксис • высокая скорость • минимальные
усилия
ПИШУ САМ • использую ast.parse • генерирую код • оптимизирую
None
None
ДУМАЮ
ОПТИМИЗИРУЮ 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("<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
None
None
HAMLY github.com/barbuza/hamly
НАСКОЛЬКО БЫСТРО msec mako jinja2 hamly 6,5 31,9 36,6
ДУМАТЬ - ПОЛЕЗНО
КАК НАУЧИТЬСЯ? • elixir • lisp (!) • haskell (!!)
ВОТ И ВСЕ