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
690
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Рвем жинжу на китайский флаг
Виктор Коцеруба
Некоторые темы оптимизации кода на примере самописного шаблонизатора
Moscow Python Meetup
PRO
February 20, 2014
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №111. Как мы изобретали Temporal, пытаясь просто создать приложение
moscowdjango
PRO
0
75
Moscow Python Meetup №110. Артём Тарасов (Альфа-Банк, Senior Engineer). Менторство как допинг: Как прокачать свои хард-скиллы, обучая других
moscowdjango
PRO
0
58
Moscow Python Meetup №110. Алёна Тямейкина (Островок.ру, Python Developer). Автоматизации процессов разработки
moscowdjango
PRO
0
67
Moscow Python Meetup №110. Адриан Макриденко (ГК Астра Линукс, разработчик серверной части). Токены авторизации: почему JWT легко использовать неправильно и как это исправляет PASETO?
moscowdjango
PRO
0
78
Moscow Python Meetup №109. Георгий Дьячков (Альфа банк, Главный разработчик). Векторные базы в агентной архитектуре и как изменятся вопросы на собеседованиях в 2026
moscowdjango
PRO
0
90
Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python
moscowdjango
PRO
0
84
Moscow Python Meetup №108. Воркшоп "Построение AI-агента: Говори с данными на языке бизнеса"
moscowdjango
PRO
0
120
Moscow Python Meetup №108. Gather. Inspire. Deliver.
moscowdjango
PRO
0
110
Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API
moscowdjango
PRO
0
100
Other Decks in Programming
See All in Programming
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.4k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
540
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
250
FDEが実現するAI駆動経営の現在地
gonta
2
220
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
370
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
120
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
240
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
410
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
360
霧の中の代数的エフェクト
funnyycat
1
430
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
190
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
170
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
390
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
570
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
380
The Limits of Empathy - UXLibs8
cassininazir
1
550
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
600
Raft: Consensus for Rubyists
vanstee
141
7.6k
Color Theory Basics | Prateek | Gurzu
gurzu
0
400
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
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 (!!)
ВОТ И ВСЕ