Profiling Django Application
My work required me to profile one of our Django applications, to help identify the point in the application which we can improve to reach our North Star. So, I thought it will be great to share my learning and tools, that I have used to get the job done.
What is Profiling?
Profiling is a measure of the time or memory consumption of the running program. This data further can be used for program optimization.
They are many tools/libraries out there which can be used to do the job. I have found these helpful.
Apache JMeter
It is open-source software, which is great to load and performance test web applications. It's easy to set up and can be configured for what we want in the result report.
Pyinstrument
Pyinstrument is a Python profiler that offers a Django middleware to record the profiling. The profiler generates profile data for every request. The PYINSTRUMENTPROFILEDIR contains a directory that stores the profile data, which is in HTML format. You can check how it works over here
Django Query Count
Django Query Count is a middleware that prints the number of database queries made during the request processing. There are two possible settings for this, which can be found here
Django Silk
Django Silk is middleware for intercepting Requests/Responses. We can profile a block of code or functions, either manually or dynamically. It also has a user interface for inspection and visualization
So, here are some of the tools which can be of great help in profiling your code and putting your effort in the right direction of optimization applications.
Cheers!