Jens Klein: Performance, Profiling, Power-Consumption
Talk at Plone Conference 2020
I want to focus on Python performance, so not caching or database performance.
Tools:
- py-spy: Overall mix of the whole live application, top-like.
- repoze.profile: WSGI middleware, slows down application. Profile single request and analyse its call stack by count, call time, etc.
- dis: disassembler for Python at the bytecode level.
Improvements Plone 5.2.0-5.2.3:
- Avoided early providedBy calls
- __getattr__ early exit on common attributes
- zope.interface: some functions are called hundreds of thousands of times when you reindex an index, so a tiny improvement helps a lot. I found various places that could use improvements, and that landed in the package, together with memory improvements by Jason Madden.
Live demo. I call py-spy with sudo because I need to connect to an existing process id.
Future Todo's:
- plone.restapi has optimization potential, all navigation related, but currently it still supports even Plone 4.3. This will likely wait for a 5.2-only or Python3-only branch.
- plone.registry is called too often
- Use python: expressions in all page templates. They are way faster than standard Tales expressions.
- More introspection.
- Move more logic from page templates to Python code
Advice: start introspecting the performance of your application.