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
680
Рвем жинжу на китайский флаг
Виктор Коцеруба
Некоторые темы оптимизации кода на примере самописного шаблонизатора
Moscow Python Meetup
PRO
February 20, 2014
Tweet
Share
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №108. Воркшоп "Построение AI-агента: Говори с данными на языке бизнеса"
moscowdjango
PRO
0
49
Moscow Python Meetup №108. Gather. Inspire. Deliver.
moscowdjango
PRO
0
36
Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API
moscowdjango
PRO
0
45
Moscow Python Meetup №107. Django Blue-Green Migrations
moscowdjango
PRO
0
33
Moscow Python Meetup №107. Суперсжатые полнотекстовые индексы
moscowdjango
PRO
0
53
Moscow Python Meetup №106. Евгений Блинов (The Mutating Company, Founder). Суперфункции
moscowdjango
PRO
0
110
Moscow Python Meetup №106. Валерий Карпузов (SmartFX, Team Lead). Пиши, сокращай — Code Golf на Python
moscowdjango
PRO
0
120
Moscow Python Meetup №106. Николай Казак (Технический лидер роботизации бизнес-процессов, МТС Финтех). RPA по-взрослому
moscowdjango
PRO
0
63
Moscow Python Meetup №105. Кирилл Гладких (ООО Штаб, Python разработчик). Как вайбкодить по-сениорски
moscowdjango
PRO
0
160
Other Decks in Programming
See All in Programming
へんな働き方
yusukebe
6
2.8k
存在論的プログラミング: 時間と存在を記述する
koriym
5
510
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
310
ファインチューニングせずメインコンペを解く方法
pokutuna
0
190
S3ストレージクラスの「見える」「ある」「使える」は全部違う ─ 体験から見た、仕様の深淵を覗く
ya_ma23
0
1.1k
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
230
Claude Code Skill入門
mayahoney
0
440
モダンOBSプラグイン開発
umireon
0
180
安いハードウェアでVulkan
fadis
1
810
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
190
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
420
テレメトリーシグナルが導くパフォーマンス最適化 / Performance Optimization Driven by Telemetry Signals
seike460
PRO
2
170
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
330
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
Measuring & Analyzing Core Web Vitals
bluesmoon
9
790
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
240
Git: the NoSQL Database
bkeepers
PRO
432
67k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
420
GitHub's CSS Performance
jonrohan
1032
470k
Automating Front-end Workflow
addyosmani
1370
200k
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 (!!)
ВОТ И ВСЕ