[{"data":1,"prerenderedAt":18384},["ShallowReactive",2],{"navigation":3,"/performance-and-optimization/profiling-django-apps":1016,"/performance-and-optimization/profiling-django-apps-surround":18379},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"id":1017,"title":797,"body":1018,"description":1028,"extension":18374,"links":18375,"meta":18376,"navigation":1187,"path":798,"seo":18377,"stem":799,"__hash__":18378},"docs/21.performance-and-optimization/06.profiling-django-apps.md",{"type":1019,"value":1020,"toc":18337},"minimark",[1021,1025,1029,1034,1037,1042,1048,1061,1066,1077,1082,1093,1098,1109,1113,1116,1120,1569,1573,2569,2573,2576,2580,2881,2885,4513,4517,4521,5406,5410,6384,6388,6392,8355,8359,10216,10219,10223,11382,11386,12798,12802,12806,13502,13506,15319,15323,15327,16585,16589,18197,18201,18205,18275,18278,18328,18331,18334],[1022,1023,797],"h1",{"id":1024},"profiling-django-apps",[1026,1027,1028],"p",{},"Profiling is essential for identifying performance bottlenecks in Django applications. Without proper profiling, optimization efforts often target the wrong areas, wasting time and resources. This comprehensive guide covers profiling tools, techniques, and methodologies that help you understand where your application spends time and how to make it faster.",[1030,1031,1033],"h2",{"id":1032},"understanding-performance-profiling","Understanding Performance Profiling",[1026,1035,1036],{},"Profiling reveals where your application spends time and resources. Django applications have multiple performance layers that require different profiling approaches: database queries, Python code execution, template rendering, and external service calls.",[1038,1039,1041],"h3",{"id":1040},"types-of-performance-analysis","Types of Performance Analysis",[1026,1043,1044],{},[1045,1046,1047],"strong",{},"Response Time Profiling",[1049,1050,1051,1055,1058],"ul",{},[1052,1053,1054],"li",{},"Measures total request processing time",[1052,1056,1057],{},"Identifies slow endpoints and operations",[1052,1059,1060],{},"Tracks performance trends over time",[1026,1062,1063],{},[1045,1064,1065],{},"Database Query Profiling",[1049,1067,1068,1071,1074],{},[1052,1069,1070],{},"Analyzes query execution time and frequency",[1052,1072,1073],{},"Identifies N+1 queries and missing indexes",[1052,1075,1076],{},"Monitors database connection usage",[1026,1078,1079],{},[1045,1080,1081],{},"Memory Profiling",[1049,1083,1084,1087,1090],{},[1052,1085,1086],{},"Tracks memory allocation and usage patterns",[1052,1088,1089],{},"Identifies memory leaks and excessive consumption",[1052,1091,1092],{},"Monitors garbage collection performance",[1026,1094,1095],{},[1045,1096,1097],{},"CPU Profiling",[1049,1099,1100,1103,1106],{},[1052,1101,1102],{},"Analyzes code execution paths and hot spots",[1052,1104,1105],{},"Identifies inefficient algorithms and loops",[1052,1107,1108],{},"Measures function call overhead",[1030,1110,1112],{"id":1111},"django-debug-toolbar","Django Debug Toolbar",[1026,1114,1115],{},"Django Debug Toolbar is the essential first tool for development profiling. It provides real-time insights into request processing without code changes.",[1038,1117,1119],{"id":1118},"installation-and-configuration","Installation and Configuration",[1121,1122,1127],"pre",{"className":1123,"code":1124,"language":1125,"meta":1126,"style":1126},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# settings.py\nINSTALLED_APPS = [\n    # ... other apps\n    'debug_toolbar',\n]\n\nMIDDLEWARE = [\n    'debug_toolbar.middleware.DebugToolbarMiddleware',\n    # ... other middleware\n]\n\n# Show toolbar for these IPs\nINTERNAL_IPS = [\n    '127.0.0.1',\n    '::1',  # IPv6 localhost\n]\n\n# Debug toolbar configuration\nDEBUG_TOOLBAR_CONFIG = {\n    'SHOW_TOOLBAR_CALLBACK': lambda request: DEBUG and request.user.is_superuser,\n    'SHOW_COLLAPSED': True,\n    'PROFILER_MAX_DEPTH': 10,\n}\n\n# Enable SQL query logging\nDEBUG_TOOLBAR_PANELS = [\n    'debug_toolbar.panels.versions.VersionsPanel',\n    'debug_toolbar.panels.timer.TimerPanel',\n    'debug_toolbar.panels.settings.SettingsPanel',\n    'debug_toolbar.panels.headers.HeadersPanel',\n    'debug_toolbar.panels.request.RequestPanel',\n    'debug_toolbar.panels.sql.SQLPanel',\n    'debug_toolbar.panels.staticfiles.StaticFilesPanel',\n    'debug_toolbar.panels.templates.TemplatesPanel',\n    'debug_toolbar.panels.cache.CachePanel',\n    'debug_toolbar.panels.signals.SignalsPanel',\n    'debug_toolbar.panels.logging.LoggingPanel',\n    'debug_toolbar.panels.redirects.RedirectsPanel',\n    'debug_toolbar.panels.profiling.ProfilingPanel',\n]\n","python","",[1128,1129,1130,1139,1153,1159,1176,1182,1189,1199,1211,1217,1222,1227,1233,1243,1255,1271,1276,1281,1287,1298,1345,1363,1381,1387,1392,1398,1408,1420,1432,1444,1456,1468,1480,1492,1504,1516,1528,1540,1552,1564],"code",{"__ignoreMap":1126},[1131,1132,1135],"span",{"class":1133,"line":1134},"line",1,[1131,1136,1138],{"class":1137},"s9Tkl","# settings.py\n",[1131,1140,1142,1146,1150],{"class":1133,"line":1141},2,[1131,1143,1145],{"class":1144},"se3Ec","INSTALLED_APPS",[1131,1147,1149],{"class":1148},"soVBu"," =",[1131,1151,1152],{"class":1148}," [\n",[1131,1154,1156],{"class":1133,"line":1155},3,[1131,1157,1158],{"class":1137},"    # ... other apps\n",[1131,1160,1162,1166,1170,1173],{"class":1133,"line":1161},4,[1131,1163,1165],{"class":1164},"sbYkP","    '",[1131,1167,1169],{"class":1168},"sTbE_","debug_toolbar",[1131,1171,1172],{"class":1164},"'",[1131,1174,1175],{"class":1148},",\n",[1131,1177,1179],{"class":1133,"line":1178},5,[1131,1180,1181],{"class":1148},"]\n",[1131,1183,1185],{"class":1133,"line":1184},6,[1131,1186,1188],{"emptyLinePlaceholder":1187},true,"\n",[1131,1190,1192,1195,1197],{"class":1133,"line":1191},7,[1131,1193,1194],{"class":1144},"MIDDLEWARE",[1131,1196,1149],{"class":1148},[1131,1198,1152],{"class":1148},[1131,1200,1202,1204,1207,1209],{"class":1133,"line":1201},8,[1131,1203,1165],{"class":1164},[1131,1205,1206],{"class":1168},"debug_toolbar.middleware.DebugToolbarMiddleware",[1131,1208,1172],{"class":1164},[1131,1210,1175],{"class":1148},[1131,1212,1214],{"class":1133,"line":1213},9,[1131,1215,1216],{"class":1137},"    # ... other middleware\n",[1131,1218,1220],{"class":1133,"line":1219},10,[1131,1221,1181],{"class":1148},[1131,1223,1225],{"class":1133,"line":1224},11,[1131,1226,1188],{"emptyLinePlaceholder":1187},[1131,1228,1230],{"class":1133,"line":1229},12,[1131,1231,1232],{"class":1137},"# Show toolbar for these IPs\n",[1131,1234,1236,1239,1241],{"class":1133,"line":1235},13,[1131,1237,1238],{"class":1144},"INTERNAL_IPS",[1131,1240,1149],{"class":1148},[1131,1242,1152],{"class":1148},[1131,1244,1246,1248,1251,1253],{"class":1133,"line":1245},14,[1131,1247,1165],{"class":1164},[1131,1249,1250],{"class":1168},"127.0.0.1",[1131,1252,1172],{"class":1164},[1131,1254,1175],{"class":1148},[1131,1256,1258,1260,1263,1265,1268],{"class":1133,"line":1257},15,[1131,1259,1165],{"class":1164},[1131,1261,1262],{"class":1168},"::1",[1131,1264,1172],{"class":1164},[1131,1266,1267],{"class":1148},",",[1131,1269,1270],{"class":1137},"  # IPv6 localhost\n",[1131,1272,1274],{"class":1133,"line":1273},16,[1131,1275,1181],{"class":1148},[1131,1277,1279],{"class":1133,"line":1278},17,[1131,1280,1188],{"emptyLinePlaceholder":1187},[1131,1282,1284],{"class":1133,"line":1283},18,[1131,1285,1286],{"class":1137},"# Debug toolbar configuration\n",[1131,1288,1290,1293,1295],{"class":1133,"line":1289},19,[1131,1291,1292],{"class":1144},"DEBUG_TOOLBAR_CONFIG",[1131,1294,1149],{"class":1148},[1131,1296,1297],{"class":1148}," {\n",[1131,1299,1301,1303,1306,1308,1311,1315,1319,1321,1324,1328,1331,1334,1338,1340,1343],{"class":1133,"line":1300},20,[1131,1302,1165],{"class":1164},[1131,1304,1305],{"class":1168},"SHOW_TOOLBAR_CALLBACK",[1131,1307,1172],{"class":1164},[1131,1309,1310],{"class":1148},":",[1131,1312,1314],{"class":1313},"s5Kfy"," lambda",[1131,1316,1318],{"class":1317},"sCyAa"," request",[1131,1320,1310],{"class":1148},[1131,1322,1323],{"class":1144}," DEBUG",[1131,1325,1327],{"class":1326},"sVsLi"," and",[1131,1329,1318],{"class":1330},"sftqT",[1131,1332,1333],{"class":1148},".",[1131,1335,1337],{"class":1336},"sBPpx","user",[1131,1339,1333],{"class":1148},[1131,1341,1342],{"class":1336},"is_superuser",[1131,1344,1175],{"class":1148},[1131,1346,1348,1350,1353,1355,1357,1361],{"class":1133,"line":1347},21,[1131,1349,1165],{"class":1164},[1131,1351,1352],{"class":1168},"SHOW_COLLAPSED",[1131,1354,1172],{"class":1164},[1131,1356,1310],{"class":1148},[1131,1358,1360],{"class":1359},"s8XtY"," True",[1131,1362,1175],{"class":1148},[1131,1364,1366,1368,1371,1373,1375,1379],{"class":1133,"line":1365},22,[1131,1367,1165],{"class":1164},[1131,1369,1370],{"class":1168},"PROFILER_MAX_DEPTH",[1131,1372,1172],{"class":1164},[1131,1374,1310],{"class":1148},[1131,1376,1378],{"class":1377},"s7CZa"," 10",[1131,1380,1175],{"class":1148},[1131,1382,1384],{"class":1133,"line":1383},23,[1131,1385,1386],{"class":1148},"}\n",[1131,1388,1390],{"class":1133,"line":1389},24,[1131,1391,1188],{"emptyLinePlaceholder":1187},[1131,1393,1395],{"class":1133,"line":1394},25,[1131,1396,1397],{"class":1137},"# Enable SQL query logging\n",[1131,1399,1401,1404,1406],{"class":1133,"line":1400},26,[1131,1402,1403],{"class":1144},"DEBUG_TOOLBAR_PANELS",[1131,1405,1149],{"class":1148},[1131,1407,1152],{"class":1148},[1131,1409,1411,1413,1416,1418],{"class":1133,"line":1410},27,[1131,1412,1165],{"class":1164},[1131,1414,1415],{"class":1168},"debug_toolbar.panels.versions.VersionsPanel",[1131,1417,1172],{"class":1164},[1131,1419,1175],{"class":1148},[1131,1421,1423,1425,1428,1430],{"class":1133,"line":1422},28,[1131,1424,1165],{"class":1164},[1131,1426,1427],{"class":1168},"debug_toolbar.panels.timer.TimerPanel",[1131,1429,1172],{"class":1164},[1131,1431,1175],{"class":1148},[1131,1433,1435,1437,1440,1442],{"class":1133,"line":1434},29,[1131,1436,1165],{"class":1164},[1131,1438,1439],{"class":1168},"debug_toolbar.panels.settings.SettingsPanel",[1131,1441,1172],{"class":1164},[1131,1443,1175],{"class":1148},[1131,1445,1447,1449,1452,1454],{"class":1133,"line":1446},30,[1131,1448,1165],{"class":1164},[1131,1450,1451],{"class":1168},"debug_toolbar.panels.headers.HeadersPanel",[1131,1453,1172],{"class":1164},[1131,1455,1175],{"class":1148},[1131,1457,1459,1461,1464,1466],{"class":1133,"line":1458},31,[1131,1460,1165],{"class":1164},[1131,1462,1463],{"class":1168},"debug_toolbar.panels.request.RequestPanel",[1131,1465,1172],{"class":1164},[1131,1467,1175],{"class":1148},[1131,1469,1471,1473,1476,1478],{"class":1133,"line":1470},32,[1131,1472,1165],{"class":1164},[1131,1474,1475],{"class":1168},"debug_toolbar.panels.sql.SQLPanel",[1131,1477,1172],{"class":1164},[1131,1479,1175],{"class":1148},[1131,1481,1483,1485,1488,1490],{"class":1133,"line":1482},33,[1131,1484,1165],{"class":1164},[1131,1486,1487],{"class":1168},"debug_toolbar.panels.staticfiles.StaticFilesPanel",[1131,1489,1172],{"class":1164},[1131,1491,1175],{"class":1148},[1131,1493,1495,1497,1500,1502],{"class":1133,"line":1494},34,[1131,1496,1165],{"class":1164},[1131,1498,1499],{"class":1168},"debug_toolbar.panels.templates.TemplatesPanel",[1131,1501,1172],{"class":1164},[1131,1503,1175],{"class":1148},[1131,1505,1507,1509,1512,1514],{"class":1133,"line":1506},35,[1131,1508,1165],{"class":1164},[1131,1510,1511],{"class":1168},"debug_toolbar.panels.cache.CachePanel",[1131,1513,1172],{"class":1164},[1131,1515,1175],{"class":1148},[1131,1517,1519,1521,1524,1526],{"class":1133,"line":1518},36,[1131,1520,1165],{"class":1164},[1131,1522,1523],{"class":1168},"debug_toolbar.panels.signals.SignalsPanel",[1131,1525,1172],{"class":1164},[1131,1527,1175],{"class":1148},[1131,1529,1531,1533,1536,1538],{"class":1133,"line":1530},37,[1131,1532,1165],{"class":1164},[1131,1534,1535],{"class":1168},"debug_toolbar.panels.logging.LoggingPanel",[1131,1537,1172],{"class":1164},[1131,1539,1175],{"class":1148},[1131,1541,1543,1545,1548,1550],{"class":1133,"line":1542},38,[1131,1544,1165],{"class":1164},[1131,1546,1547],{"class":1168},"debug_toolbar.panels.redirects.RedirectsPanel",[1131,1549,1172],{"class":1164},[1131,1551,1175],{"class":1148},[1131,1553,1555,1557,1560,1562],{"class":1133,"line":1554},39,[1131,1556,1165],{"class":1164},[1131,1558,1559],{"class":1168},"debug_toolbar.panels.profiling.ProfilingPanel",[1131,1561,1172],{"class":1164},[1131,1563,1175],{"class":1148},[1131,1565,1567],{"class":1133,"line":1566},40,[1131,1568,1181],{"class":1148},[1038,1570,1572],{"id":1571},"analyzing-debug-toolbar-data","Analyzing Debug Toolbar Data",[1121,1574,1576],{"className":1123,"code":1575,"language":1125,"meta":1126,"style":1126},"# Example view with performance issues\ndef slow_product_list(request):\n    \"\"\"Intentionally slow view for demonstration\"\"\"\n    # Issue 1: N+1 queries\n    products = Product.objects.all()[:50]\n    \n    # Issue 2: Inefficient loop with database queries\n    product_data = []\n    for product in products:\n        # Each iteration hits the database\n        review_count = product.reviews.count()  # Query per product\n        avg_rating = product.reviews.aggregate(\n            avg=Avg('rating')\n        )['avg']  # Another query per product\n        \n        # Issue 3: Expensive computation in loop\n        related_products = Product.objects.filter(\n            category=product.category\n        ).exclude(id=product.id)[:5]  # Query per product\n        \n        product_data.append({\n            'product': product,\n            'review_count': review_count,\n            'avg_rating': avg_rating,\n            'related_products': list(related_products),\n        })\n    \n    # Debug Toolbar will show:\n    # - 151+ SQL queries (1 + 50*3)\n    # - High response time (2-3 seconds)\n    # - Template rendering time\n    # - Memory usage spikes\n    \n    return render(request, 'products/list.html', {\n        'product_data': product_data\n    })\n\n# Optimized version\ndef fast_product_list(request):\n    \"\"\"Optimized view using profiling insights\"\"\"\n    # Fix 1: Use select_related and prefetch_related\n    products = Product.objects.select_related('category').prefetch_related(\n        'reviews'\n    ).all()[:50]\n    \n    # Fix 2: Use annotations for aggregations\n    products = products.annotate(\n        review_count=Count('reviews'),\n        avg_rating=Avg('reviews__rating')\n    )\n    \n    # Fix 3: Batch related product queries\n    category_ids = [p.category_id for p in products]\n    related_products_map = {}\n    \n    for category_id in set(category_ids):\n        related_products_map[category_id] = list(\n            Product.objects.filter(category_id=category_id)\n            .exclude(id__in=[p.id for p in products])[:5]\n        )\n    \n    # Build product data without additional queries\n    product_data = []\n    for product in products:\n        product_data.append({\n            'product': product,\n            'review_count': product.review_count,\n            'avg_rating': product.avg_rating,\n            'related_products': related_products_map.get(product.category_id, []),\n        })\n    \n    # Debug Toolbar now shows:\n    # - 3-4 SQL queries total\n    # - Response time under 200ms\n    # - Reduced memory usage\n    \n    return render(request, 'products/list.html', {\n        'product_data': product_data\n    })\n",[1128,1577,1578,1583,1601,1614,1619,1649,1654,1659,1669,1687,1692,1718,1739,1762,1780,1785,1790,1810,1825,1856,1860,1873,1888,1904,1920,1942,1947,1951,1956,1961,1966,1971,1976,1980,2006,2021,2026,2030,2035,2048,2057,2063,2098,2108,2122,2127,2133,2149,2170,2191,2197,2202,2208,2238,2249,2254,2274,2293,2317,2354,2360,2365,2371,2380,2393,2404,2419,2438,2457,2489,2494,2499,2505,2511,2517,2523,2528,2551,2564],{"__ignoreMap":1126},[1131,1579,1580],{"class":1133,"line":1134},[1131,1581,1582],{"class":1137},"# Example view with performance issues\n",[1131,1584,1585,1588,1592,1595,1598],{"class":1133,"line":1141},[1131,1586,1587],{"class":1313},"def",[1131,1589,1591],{"class":1590},"sljsM"," slow_product_list",[1131,1593,1594],{"class":1148},"(",[1131,1596,1597],{"class":1317},"request",[1131,1599,1600],{"class":1148},"):\n",[1131,1602,1603,1607,1611],{"class":1133,"line":1155},[1131,1604,1606],{"class":1605},"sm7ve","    \"\"\"",[1131,1608,1610],{"class":1609},"sVyVU","Intentionally slow view for demonstration",[1131,1612,1613],{"class":1605},"\"\"\"\n",[1131,1615,1616],{"class":1133,"line":1161},[1131,1617,1618],{"class":1137},"    # Issue 1: N+1 queries\n",[1131,1620,1621,1624,1627,1630,1632,1635,1637,1641,1644,1647],{"class":1133,"line":1178},[1131,1622,1623],{"class":1330},"    products ",[1131,1625,1626],{"class":1148},"=",[1131,1628,1629],{"class":1330}," Product",[1131,1631,1333],{"class":1148},[1131,1633,1634],{"class":1336},"objects",[1131,1636,1333],{"class":1148},[1131,1638,1640],{"class":1639},"siWMO","all",[1131,1642,1643],{"class":1148},"()[:",[1131,1645,1646],{"class":1377},"50",[1131,1648,1181],{"class":1148},[1131,1650,1651],{"class":1133,"line":1184},[1131,1652,1653],{"class":1330},"    \n",[1131,1655,1656],{"class":1133,"line":1191},[1131,1657,1658],{"class":1137},"    # Issue 2: Inefficient loop with database queries\n",[1131,1660,1661,1664,1666],{"class":1133,"line":1201},[1131,1662,1663],{"class":1330},"    product_data ",[1131,1665,1626],{"class":1148},[1131,1667,1668],{"class":1148}," []\n",[1131,1670,1671,1675,1678,1681,1684],{"class":1133,"line":1213},[1131,1672,1674],{"class":1673},"siDh9","    for",[1131,1676,1677],{"class":1330}," product ",[1131,1679,1680],{"class":1673},"in",[1131,1682,1683],{"class":1330}," products",[1131,1685,1686],{"class":1148},":\n",[1131,1688,1689],{"class":1133,"line":1219},[1131,1690,1691],{"class":1137},"        # Each iteration hits the database\n",[1131,1693,1694,1697,1699,1702,1704,1707,1709,1712,1715],{"class":1133,"line":1224},[1131,1695,1696],{"class":1330},"        review_count ",[1131,1698,1626],{"class":1148},[1131,1700,1701],{"class":1330}," product",[1131,1703,1333],{"class":1148},[1131,1705,1706],{"class":1336},"reviews",[1131,1708,1333],{"class":1148},[1131,1710,1711],{"class":1639},"count",[1131,1713,1714],{"class":1148},"()",[1131,1716,1717],{"class":1137},"  # Query per product\n",[1131,1719,1720,1723,1725,1727,1729,1731,1733,1736],{"class":1133,"line":1229},[1131,1721,1722],{"class":1330},"        avg_rating ",[1131,1724,1626],{"class":1148},[1131,1726,1701],{"class":1330},[1131,1728,1333],{"class":1148},[1131,1730,1706],{"class":1336},[1131,1732,1333],{"class":1148},[1131,1734,1735],{"class":1639},"aggregate",[1131,1737,1738],{"class":1148},"(\n",[1131,1740,1741,1745,1747,1750,1752,1754,1757,1759],{"class":1133,"line":1235},[1131,1742,1744],{"class":1743},"sqOPj","            avg",[1131,1746,1626],{"class":1148},[1131,1748,1749],{"class":1639},"Avg",[1131,1751,1594],{"class":1148},[1131,1753,1172],{"class":1164},[1131,1755,1756],{"class":1168},"rating",[1131,1758,1172],{"class":1164},[1131,1760,1761],{"class":1148},")\n",[1131,1763,1764,1767,1769,1772,1774,1777],{"class":1133,"line":1245},[1131,1765,1766],{"class":1148},"        )[",[1131,1768,1172],{"class":1164},[1131,1770,1771],{"class":1168},"avg",[1131,1773,1172],{"class":1164},[1131,1775,1776],{"class":1148},"]",[1131,1778,1779],{"class":1137},"  # Another query per product\n",[1131,1781,1782],{"class":1133,"line":1257},[1131,1783,1784],{"class":1330},"        \n",[1131,1786,1787],{"class":1133,"line":1273},[1131,1788,1789],{"class":1137},"        # Issue 3: Expensive computation in loop\n",[1131,1791,1792,1795,1797,1799,1801,1803,1805,1808],{"class":1133,"line":1278},[1131,1793,1794],{"class":1330},"        related_products ",[1131,1796,1626],{"class":1148},[1131,1798,1629],{"class":1330},[1131,1800,1333],{"class":1148},[1131,1802,1634],{"class":1336},[1131,1804,1333],{"class":1148},[1131,1806,1807],{"class":1639},"filter",[1131,1809,1738],{"class":1148},[1131,1811,1812,1815,1817,1820,1822],{"class":1133,"line":1283},[1131,1813,1814],{"class":1743},"            category",[1131,1816,1626],{"class":1148},[1131,1818,1819],{"class":1639},"product",[1131,1821,1333],{"class":1148},[1131,1823,1824],{"class":1336},"category\n",[1131,1826,1827,1830,1833,1835,1838,1840,1842,1844,1846,1849,1852,1854],{"class":1133,"line":1289},[1131,1828,1829],{"class":1148},"        ).",[1131,1831,1832],{"class":1639},"exclude",[1131,1834,1594],{"class":1148},[1131,1836,1837],{"class":1743},"id",[1131,1839,1626],{"class":1148},[1131,1841,1819],{"class":1639},[1131,1843,1333],{"class":1148},[1131,1845,1837],{"class":1336},[1131,1847,1848],{"class":1148},")[:",[1131,1850,1851],{"class":1377},"5",[1131,1853,1776],{"class":1148},[1131,1855,1717],{"class":1137},[1131,1857,1858],{"class":1133,"line":1300},[1131,1859,1784],{"class":1330},[1131,1861,1862,1865,1867,1870],{"class":1133,"line":1347},[1131,1863,1864],{"class":1330},"        product_data",[1131,1866,1333],{"class":1148},[1131,1868,1869],{"class":1639},"append",[1131,1871,1872],{"class":1148},"({\n",[1131,1874,1875,1878,1880,1882,1884,1886],{"class":1133,"line":1365},[1131,1876,1877],{"class":1164},"            '",[1131,1879,1819],{"class":1168},[1131,1881,1172],{"class":1164},[1131,1883,1310],{"class":1148},[1131,1885,1701],{"class":1639},[1131,1887,1175],{"class":1148},[1131,1889,1890,1892,1895,1897,1899,1902],{"class":1133,"line":1383},[1131,1891,1877],{"class":1164},[1131,1893,1894],{"class":1168},"review_count",[1131,1896,1172],{"class":1164},[1131,1898,1310],{"class":1148},[1131,1900,1901],{"class":1639}," review_count",[1131,1903,1175],{"class":1148},[1131,1905,1906,1908,1911,1913,1915,1918],{"class":1133,"line":1389},[1131,1907,1877],{"class":1164},[1131,1909,1910],{"class":1168},"avg_rating",[1131,1912,1172],{"class":1164},[1131,1914,1310],{"class":1148},[1131,1916,1917],{"class":1639}," avg_rating",[1131,1919,1175],{"class":1148},[1131,1921,1922,1924,1927,1929,1931,1935,1937,1939],{"class":1133,"line":1394},[1131,1923,1877],{"class":1164},[1131,1925,1926],{"class":1168},"related_products",[1131,1928,1172],{"class":1164},[1131,1930,1310],{"class":1148},[1131,1932,1934],{"class":1933},"sa2tF"," list",[1131,1936,1594],{"class":1148},[1131,1938,1926],{"class":1639},[1131,1940,1941],{"class":1148},"),\n",[1131,1943,1944],{"class":1133,"line":1400},[1131,1945,1946],{"class":1148},"        })\n",[1131,1948,1949],{"class":1133,"line":1410},[1131,1950,1653],{"class":1330},[1131,1952,1953],{"class":1133,"line":1422},[1131,1954,1955],{"class":1137},"    # Debug Toolbar will show:\n",[1131,1957,1958],{"class":1133,"line":1434},[1131,1959,1960],{"class":1137},"    # - 151+ SQL queries (1 + 50*3)\n",[1131,1962,1963],{"class":1133,"line":1446},[1131,1964,1965],{"class":1137},"    # - High response time (2-3 seconds)\n",[1131,1967,1968],{"class":1133,"line":1458},[1131,1969,1970],{"class":1137},"    # - Template rendering time\n",[1131,1972,1973],{"class":1133,"line":1470},[1131,1974,1975],{"class":1137},"    # - Memory usage spikes\n",[1131,1977,1978],{"class":1133,"line":1482},[1131,1979,1653],{"class":1330},[1131,1981,1982,1985,1988,1990,1992,1994,1997,2000,2002,2004],{"class":1133,"line":1494},[1131,1983,1984],{"class":1673},"    return",[1131,1986,1987],{"class":1639}," render",[1131,1989,1594],{"class":1148},[1131,1991,1597],{"class":1639},[1131,1993,1267],{"class":1148},[1131,1995,1996],{"class":1164}," '",[1131,1998,1999],{"class":1168},"products/list.html",[1131,2001,1172],{"class":1164},[1131,2003,1267],{"class":1148},[1131,2005,1297],{"class":1148},[1131,2007,2008,2011,2014,2016,2018],{"class":1133,"line":1506},[1131,2009,2010],{"class":1164},"        '",[1131,2012,2013],{"class":1168},"product_data",[1131,2015,1172],{"class":1164},[1131,2017,1310],{"class":1148},[1131,2019,2020],{"class":1639}," product_data\n",[1131,2022,2023],{"class":1133,"line":1518},[1131,2024,2025],{"class":1148},"    })\n",[1131,2027,2028],{"class":1133,"line":1530},[1131,2029,1188],{"emptyLinePlaceholder":1187},[1131,2031,2032],{"class":1133,"line":1542},[1131,2033,2034],{"class":1137},"# Optimized version\n",[1131,2036,2037,2039,2042,2044,2046],{"class":1133,"line":1554},[1131,2038,1587],{"class":1313},[1131,2040,2041],{"class":1590}," fast_product_list",[1131,2043,1594],{"class":1148},[1131,2045,1597],{"class":1317},[1131,2047,1600],{"class":1148},[1131,2049,2050,2052,2055],{"class":1133,"line":1566},[1131,2051,1606],{"class":1605},[1131,2053,2054],{"class":1609},"Optimized view using profiling insights",[1131,2056,1613],{"class":1605},[1131,2058,2060],{"class":1133,"line":2059},41,[1131,2061,2062],{"class":1137},"    # Fix 1: Use select_related and prefetch_related\n",[1131,2064,2066,2068,2070,2072,2074,2076,2078,2081,2083,2085,2088,2090,2093,2096],{"class":1133,"line":2065},42,[1131,2067,1623],{"class":1330},[1131,2069,1626],{"class":1148},[1131,2071,1629],{"class":1330},[1131,2073,1333],{"class":1148},[1131,2075,1634],{"class":1336},[1131,2077,1333],{"class":1148},[1131,2079,2080],{"class":1639},"select_related",[1131,2082,1594],{"class":1148},[1131,2084,1172],{"class":1164},[1131,2086,2087],{"class":1168},"category",[1131,2089,1172],{"class":1164},[1131,2091,2092],{"class":1148},").",[1131,2094,2095],{"class":1639},"prefetch_related",[1131,2097,1738],{"class":1148},[1131,2099,2101,2103,2105],{"class":1133,"line":2100},43,[1131,2102,2010],{"class":1164},[1131,2104,1706],{"class":1168},[1131,2106,2107],{"class":1164},"'\n",[1131,2109,2111,2114,2116,2118,2120],{"class":1133,"line":2110},44,[1131,2112,2113],{"class":1148},"    ).",[1131,2115,1640],{"class":1639},[1131,2117,1643],{"class":1148},[1131,2119,1646],{"class":1377},[1131,2121,1181],{"class":1148},[1131,2123,2125],{"class":1133,"line":2124},45,[1131,2126,1653],{"class":1330},[1131,2128,2130],{"class":1133,"line":2129},46,[1131,2131,2132],{"class":1137},"    # Fix 2: Use annotations for aggregations\n",[1131,2134,2136,2138,2140,2142,2144,2147],{"class":1133,"line":2135},47,[1131,2137,1623],{"class":1330},[1131,2139,1626],{"class":1148},[1131,2141,1683],{"class":1330},[1131,2143,1333],{"class":1148},[1131,2145,2146],{"class":1639},"annotate",[1131,2148,1738],{"class":1148},[1131,2150,2152,2155,2157,2160,2162,2164,2166,2168],{"class":1133,"line":2151},48,[1131,2153,2154],{"class":1743},"        review_count",[1131,2156,1626],{"class":1148},[1131,2158,2159],{"class":1639},"Count",[1131,2161,1594],{"class":1148},[1131,2163,1172],{"class":1164},[1131,2165,1706],{"class":1168},[1131,2167,1172],{"class":1164},[1131,2169,1941],{"class":1148},[1131,2171,2173,2176,2178,2180,2182,2184,2187,2189],{"class":1133,"line":2172},49,[1131,2174,2175],{"class":1743},"        avg_rating",[1131,2177,1626],{"class":1148},[1131,2179,1749],{"class":1639},[1131,2181,1594],{"class":1148},[1131,2183,1172],{"class":1164},[1131,2185,2186],{"class":1168},"reviews__rating",[1131,2188,1172],{"class":1164},[1131,2190,1761],{"class":1148},[1131,2192,2194],{"class":1133,"line":2193},50,[1131,2195,2196],{"class":1148},"    )\n",[1131,2198,2200],{"class":1133,"line":2199},51,[1131,2201,1653],{"class":1330},[1131,2203,2205],{"class":1133,"line":2204},52,[1131,2206,2207],{"class":1137},"    # Fix 3: Batch related product queries\n",[1131,2209,2211,2214,2216,2219,2221,2223,2226,2229,2232,2234,2236],{"class":1133,"line":2210},53,[1131,2212,2213],{"class":1330},"    category_ids ",[1131,2215,1626],{"class":1148},[1131,2217,2218],{"class":1148}," [",[1131,2220,1026],{"class":1330},[1131,2222,1333],{"class":1148},[1131,2224,2225],{"class":1336},"category_id",[1131,2227,2228],{"class":1673}," for",[1131,2230,2231],{"class":1330}," p ",[1131,2233,1680],{"class":1673},[1131,2235,1683],{"class":1330},[1131,2237,1181],{"class":1148},[1131,2239,2241,2244,2246],{"class":1133,"line":2240},54,[1131,2242,2243],{"class":1330},"    related_products_map ",[1131,2245,1626],{"class":1148},[1131,2247,2248],{"class":1148}," {}\n",[1131,2250,2252],{"class":1133,"line":2251},55,[1131,2253,1653],{"class":1330},[1131,2255,2257,2259,2262,2264,2267,2269,2272],{"class":1133,"line":2256},56,[1131,2258,1674],{"class":1673},[1131,2260,2261],{"class":1330}," category_id ",[1131,2263,1680],{"class":1673},[1131,2265,2266],{"class":1933}," set",[1131,2268,1594],{"class":1148},[1131,2270,2271],{"class":1639},"category_ids",[1131,2273,1600],{"class":1148},[1131,2275,2277,2280,2283,2285,2287,2289,2291],{"class":1133,"line":2276},57,[1131,2278,2279],{"class":1330},"        related_products_map",[1131,2281,2282],{"class":1148},"[",[1131,2284,2225],{"class":1330},[1131,2286,1776],{"class":1148},[1131,2288,1149],{"class":1148},[1131,2290,1934],{"class":1933},[1131,2292,1738],{"class":1148},[1131,2294,2296,2299,2301,2303,2305,2307,2309,2311,2313,2315],{"class":1133,"line":2295},58,[1131,2297,2298],{"class":1639},"            Product",[1131,2300,1333],{"class":1148},[1131,2302,1634],{"class":1336},[1131,2304,1333],{"class":1148},[1131,2306,1807],{"class":1639},[1131,2308,1594],{"class":1148},[1131,2310,2225],{"class":1743},[1131,2312,1626],{"class":1148},[1131,2314,2225],{"class":1639},[1131,2316,1761],{"class":1148},[1131,2318,2320,2323,2325,2327,2330,2333,2335,2337,2339,2341,2343,2345,2347,2350,2352],{"class":1133,"line":2319},59,[1131,2321,2322],{"class":1148},"            .",[1131,2324,1832],{"class":1639},[1131,2326,1594],{"class":1148},[1131,2328,2329],{"class":1743},"id__in",[1131,2331,2332],{"class":1148},"=[",[1131,2334,1026],{"class":1639},[1131,2336,1333],{"class":1148},[1131,2338,1837],{"class":1336},[1131,2340,2228],{"class":1673},[1131,2342,2231],{"class":1639},[1131,2344,1680],{"class":1673},[1131,2346,1683],{"class":1639},[1131,2348,2349],{"class":1148},"])[:",[1131,2351,1851],{"class":1377},[1131,2353,1181],{"class":1148},[1131,2355,2357],{"class":1133,"line":2356},60,[1131,2358,2359],{"class":1148},"        )\n",[1131,2361,2363],{"class":1133,"line":2362},61,[1131,2364,1653],{"class":1330},[1131,2366,2368],{"class":1133,"line":2367},62,[1131,2369,2370],{"class":1137},"    # Build product data without additional queries\n",[1131,2372,2374,2376,2378],{"class":1133,"line":2373},63,[1131,2375,1663],{"class":1330},[1131,2377,1626],{"class":1148},[1131,2379,1668],{"class":1148},[1131,2381,2383,2385,2387,2389,2391],{"class":1133,"line":2382},64,[1131,2384,1674],{"class":1673},[1131,2386,1677],{"class":1330},[1131,2388,1680],{"class":1673},[1131,2390,1683],{"class":1330},[1131,2392,1686],{"class":1148},[1131,2394,2396,2398,2400,2402],{"class":1133,"line":2395},65,[1131,2397,1864],{"class":1330},[1131,2399,1333],{"class":1148},[1131,2401,1869],{"class":1639},[1131,2403,1872],{"class":1148},[1131,2405,2407,2409,2411,2413,2415,2417],{"class":1133,"line":2406},66,[1131,2408,1877],{"class":1164},[1131,2410,1819],{"class":1168},[1131,2412,1172],{"class":1164},[1131,2414,1310],{"class":1148},[1131,2416,1701],{"class":1639},[1131,2418,1175],{"class":1148},[1131,2420,2422,2424,2426,2428,2430,2432,2434,2436],{"class":1133,"line":2421},67,[1131,2423,1877],{"class":1164},[1131,2425,1894],{"class":1168},[1131,2427,1172],{"class":1164},[1131,2429,1310],{"class":1148},[1131,2431,1701],{"class":1639},[1131,2433,1333],{"class":1148},[1131,2435,1894],{"class":1336},[1131,2437,1175],{"class":1148},[1131,2439,2441,2443,2445,2447,2449,2451,2453,2455],{"class":1133,"line":2440},68,[1131,2442,1877],{"class":1164},[1131,2444,1910],{"class":1168},[1131,2446,1172],{"class":1164},[1131,2448,1310],{"class":1148},[1131,2450,1701],{"class":1639},[1131,2452,1333],{"class":1148},[1131,2454,1910],{"class":1336},[1131,2456,1175],{"class":1148},[1131,2458,2460,2462,2464,2466,2468,2471,2473,2476,2478,2480,2482,2484,2486],{"class":1133,"line":2459},69,[1131,2461,1877],{"class":1164},[1131,2463,1926],{"class":1168},[1131,2465,1172],{"class":1164},[1131,2467,1310],{"class":1148},[1131,2469,2470],{"class":1639}," related_products_map",[1131,2472,1333],{"class":1148},[1131,2474,2475],{"class":1639},"get",[1131,2477,1594],{"class":1148},[1131,2479,1819],{"class":1639},[1131,2481,1333],{"class":1148},[1131,2483,2225],{"class":1336},[1131,2485,1267],{"class":1148},[1131,2487,2488],{"class":1148}," []),\n",[1131,2490,2492],{"class":1133,"line":2491},70,[1131,2493,1946],{"class":1148},[1131,2495,2497],{"class":1133,"line":2496},71,[1131,2498,1653],{"class":1330},[1131,2500,2502],{"class":1133,"line":2501},72,[1131,2503,2504],{"class":1137},"    # Debug Toolbar now shows:\n",[1131,2506,2508],{"class":1133,"line":2507},73,[1131,2509,2510],{"class":1137},"    # - 3-4 SQL queries total\n",[1131,2512,2514],{"class":1133,"line":2513},74,[1131,2515,2516],{"class":1137},"    # - Response time under 200ms\n",[1131,2518,2520],{"class":1133,"line":2519},75,[1131,2521,2522],{"class":1137},"    # - Reduced memory usage\n",[1131,2524,2526],{"class":1133,"line":2525},76,[1131,2527,1653],{"class":1330},[1131,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549],{"class":1133,"line":2530},77,[1131,2532,1984],{"class":1673},[1131,2534,1987],{"class":1639},[1131,2536,1594],{"class":1148},[1131,2538,1597],{"class":1639},[1131,2540,1267],{"class":1148},[1131,2542,1996],{"class":1164},[1131,2544,1999],{"class":1168},[1131,2546,1172],{"class":1164},[1131,2548,1267],{"class":1148},[1131,2550,1297],{"class":1148},[1131,2552,2554,2556,2558,2560,2562],{"class":1133,"line":2553},78,[1131,2555,2010],{"class":1164},[1131,2557,2013],{"class":1168},[1131,2559,1172],{"class":1164},[1131,2561,1310],{"class":1148},[1131,2563,2020],{"class":1639},[1131,2565,2567],{"class":1133,"line":2566},79,[1131,2568,2025],{"class":1148},[1030,2570,2572],{"id":2571},"django-silk-production-profiling","Django Silk - Production Profiling",[1026,2574,2575],{},"Django Silk provides production-ready profiling with detailed request analysis, SQL query profiling, and performance monitoring.",[1038,2577,2579],{"id":2578},"installation-and-setup","Installation and Setup",[1121,2581,2583],{"className":1123,"code":2582,"language":1125,"meta":1126,"style":1126},"# Install: pip install django-silk\n\n# settings.py\nINSTALLED_APPS = [\n    # ... other apps\n    'silk',\n]\n\nMIDDLEWARE = [\n    'silk.middleware.SilkyMiddleware',\n    # ... other middleware\n]\n\n# Silk configuration\nSILKY_PYTHON_PROFILER = True\nSILKY_PYTHON_PROFILER_BINARY = True\nSILKY_PYTHON_PROFILER_RESULT_PATH = '/tmp/silk_profiles/'\n\n# Authentication for Silk interface\nSILKY_AUTHENTICATION = True\nSILKY_AUTHORISATION = True\n\n# Custom authorization\ndef silk_permission_check(user):\n    return user.is_superuser\n\nSILKY_PERMISSIONS = silk_permission_check\n\n# Performance thresholds\nSILKY_MAX_REQUEST_BODY_SIZE = 1024 * 1024  # 1MB\nSILKY_MAX_RESPONSE_BODY_SIZE = 1024 * 1024  # 1MB\nSILKY_INTERCEPT_PERCENT = 100  # Profile 100% of requests in development\n\n# Production settings\nif not DEBUG:\n    SILKY_INTERCEPT_PERCENT = 10  # Profile 10% of requests in production\n    SILKY_MAX_RECORDED_REQUESTS = 10000\n    SILKY_MAX_RECORDED_REQUESTS_CHECK_PERCENT = 10\n",[1128,2584,2585,2590,2594,2598,2606,2610,2621,2625,2629,2637,2648,2652,2656,2660,2665,2675,2684,2698,2702,2707,2716,2725,2729,2734,2747,2759,2763,2773,2777,2782,2800,2815,2828,2832,2837,2849,2861,2871],{"__ignoreMap":1126},[1131,2586,2587],{"class":1133,"line":1134},[1131,2588,2589],{"class":1137},"# Install: pip install django-silk\n",[1131,2591,2592],{"class":1133,"line":1141},[1131,2593,1188],{"emptyLinePlaceholder":1187},[1131,2595,2596],{"class":1133,"line":1155},[1131,2597,1138],{"class":1137},[1131,2599,2600,2602,2604],{"class":1133,"line":1161},[1131,2601,1145],{"class":1144},[1131,2603,1149],{"class":1148},[1131,2605,1152],{"class":1148},[1131,2607,2608],{"class":1133,"line":1178},[1131,2609,1158],{"class":1137},[1131,2611,2612,2614,2617,2619],{"class":1133,"line":1184},[1131,2613,1165],{"class":1164},[1131,2615,2616],{"class":1168},"silk",[1131,2618,1172],{"class":1164},[1131,2620,1175],{"class":1148},[1131,2622,2623],{"class":1133,"line":1191},[1131,2624,1181],{"class":1148},[1131,2626,2627],{"class":1133,"line":1201},[1131,2628,1188],{"emptyLinePlaceholder":1187},[1131,2630,2631,2633,2635],{"class":1133,"line":1213},[1131,2632,1194],{"class":1144},[1131,2634,1149],{"class":1148},[1131,2636,1152],{"class":1148},[1131,2638,2639,2641,2644,2646],{"class":1133,"line":1219},[1131,2640,1165],{"class":1164},[1131,2642,2643],{"class":1168},"silk.middleware.SilkyMiddleware",[1131,2645,1172],{"class":1164},[1131,2647,1175],{"class":1148},[1131,2649,2650],{"class":1133,"line":1224},[1131,2651,1216],{"class":1137},[1131,2653,2654],{"class":1133,"line":1229},[1131,2655,1181],{"class":1148},[1131,2657,2658],{"class":1133,"line":1235},[1131,2659,1188],{"emptyLinePlaceholder":1187},[1131,2661,2662],{"class":1133,"line":1245},[1131,2663,2664],{"class":1137},"# Silk configuration\n",[1131,2666,2667,2670,2672],{"class":1133,"line":1257},[1131,2668,2669],{"class":1144},"SILKY_PYTHON_PROFILER",[1131,2671,1149],{"class":1148},[1131,2673,2674],{"class":1359}," True\n",[1131,2676,2677,2680,2682],{"class":1133,"line":1273},[1131,2678,2679],{"class":1144},"SILKY_PYTHON_PROFILER_BINARY",[1131,2681,1149],{"class":1148},[1131,2683,2674],{"class":1359},[1131,2685,2686,2689,2691,2693,2696],{"class":1133,"line":1278},[1131,2687,2688],{"class":1144},"SILKY_PYTHON_PROFILER_RESULT_PATH",[1131,2690,1149],{"class":1148},[1131,2692,1996],{"class":1164},[1131,2694,2695],{"class":1168},"/tmp/silk_profiles/",[1131,2697,2107],{"class":1164},[1131,2699,2700],{"class":1133,"line":1283},[1131,2701,1188],{"emptyLinePlaceholder":1187},[1131,2703,2704],{"class":1133,"line":1289},[1131,2705,2706],{"class":1137},"# Authentication for Silk interface\n",[1131,2708,2709,2712,2714],{"class":1133,"line":1300},[1131,2710,2711],{"class":1144},"SILKY_AUTHENTICATION",[1131,2713,1149],{"class":1148},[1131,2715,2674],{"class":1359},[1131,2717,2718,2721,2723],{"class":1133,"line":1347},[1131,2719,2720],{"class":1144},"SILKY_AUTHORISATION",[1131,2722,1149],{"class":1148},[1131,2724,2674],{"class":1359},[1131,2726,2727],{"class":1133,"line":1365},[1131,2728,1188],{"emptyLinePlaceholder":1187},[1131,2730,2731],{"class":1133,"line":1383},[1131,2732,2733],{"class":1137},"# Custom authorization\n",[1131,2735,2736,2738,2741,2743,2745],{"class":1133,"line":1389},[1131,2737,1587],{"class":1313},[1131,2739,2740],{"class":1590}," silk_permission_check",[1131,2742,1594],{"class":1148},[1131,2744,1337],{"class":1317},[1131,2746,1600],{"class":1148},[1131,2748,2749,2751,2754,2756],{"class":1133,"line":1394},[1131,2750,1984],{"class":1673},[1131,2752,2753],{"class":1330}," user",[1131,2755,1333],{"class":1148},[1131,2757,2758],{"class":1336},"is_superuser\n",[1131,2760,2761],{"class":1133,"line":1400},[1131,2762,1188],{"emptyLinePlaceholder":1187},[1131,2764,2765,2768,2770],{"class":1133,"line":1410},[1131,2766,2767],{"class":1144},"SILKY_PERMISSIONS",[1131,2769,1149],{"class":1148},[1131,2771,2772],{"class":1330}," silk_permission_check\n",[1131,2774,2775],{"class":1133,"line":1422},[1131,2776,1188],{"emptyLinePlaceholder":1187},[1131,2778,2779],{"class":1133,"line":1434},[1131,2780,2781],{"class":1137},"# Performance thresholds\n",[1131,2783,2784,2787,2789,2792,2795,2797],{"class":1133,"line":1446},[1131,2785,2786],{"class":1144},"SILKY_MAX_REQUEST_BODY_SIZE",[1131,2788,1149],{"class":1148},[1131,2790,2791],{"class":1377}," 1024",[1131,2793,2794],{"class":1326}," *",[1131,2796,2791],{"class":1377},[1131,2798,2799],{"class":1137},"  # 1MB\n",[1131,2801,2802,2805,2807,2809,2811,2813],{"class":1133,"line":1458},[1131,2803,2804],{"class":1144},"SILKY_MAX_RESPONSE_BODY_SIZE",[1131,2806,1149],{"class":1148},[1131,2808,2791],{"class":1377},[1131,2810,2794],{"class":1326},[1131,2812,2791],{"class":1377},[1131,2814,2799],{"class":1137},[1131,2816,2817,2820,2822,2825],{"class":1133,"line":1470},[1131,2818,2819],{"class":1144},"SILKY_INTERCEPT_PERCENT",[1131,2821,1149],{"class":1148},[1131,2823,2824],{"class":1377}," 100",[1131,2826,2827],{"class":1137},"  # Profile 100% of requests in development\n",[1131,2829,2830],{"class":1133,"line":1482},[1131,2831,1188],{"emptyLinePlaceholder":1187},[1131,2833,2834],{"class":1133,"line":1494},[1131,2835,2836],{"class":1137},"# Production settings\n",[1131,2838,2839,2842,2845,2847],{"class":1133,"line":1506},[1131,2840,2841],{"class":1673},"if",[1131,2843,2844],{"class":1326}," not",[1131,2846,1323],{"class":1144},[1131,2848,1686],{"class":1148},[1131,2850,2851,2854,2856,2858],{"class":1133,"line":1518},[1131,2852,2853],{"class":1144},"    SILKY_INTERCEPT_PERCENT",[1131,2855,1149],{"class":1148},[1131,2857,1378],{"class":1377},[1131,2859,2860],{"class":1137},"  # Profile 10% of requests in production\n",[1131,2862,2863,2866,2868],{"class":1133,"line":1530},[1131,2864,2865],{"class":1144},"    SILKY_MAX_RECORDED_REQUESTS",[1131,2867,1149],{"class":1148},[1131,2869,2870],{"class":1377}," 10000\n",[1131,2872,2873,2876,2878],{"class":1133,"line":1542},[1131,2874,2875],{"class":1144},"    SILKY_MAX_RECORDED_REQUESTS_CHECK_PERCENT",[1131,2877,1149],{"class":1148},[1131,2879,2880],{"class":1377}," 10\n",[1038,2882,2884],{"id":2883},"advanced-silk-profiling","Advanced Silk Profiling",[1121,2886,2888],{"className":1123,"code":2887,"language":1125,"meta":1126,"style":1126},"from silk.profiling.profiler import silk_profile\n\n# Profile specific functions\n@silk_profile(name='Calculate User Statistics')\ndef calculate_user_stats(user_id):\n    \"\"\"Calculate comprehensive user statistics\"\"\"\n    user = User.objects.select_related('profile').get(id=user_id)\n    \n    # This will be profiled by Silk\n    stats = {\n        'total_orders': user.orders.count(),\n        'total_spent': user.orders.aggregate(\n            total=Sum('total_amount')\n        )['total'] or 0,\n        'avg_order_value': user.orders.aggregate(\n            avg=Avg('total_amount')\n        )['avg'] or 0,\n        'favorite_categories': list(\n            user.orders.values('items__product__category__name')\n            .annotate(count=Count('id'))\n            .order_by('-count')[:5]\n        ),\n    }\n    \n    return stats\n\n# Profile view methods\nclass ProductListView(ListView):\n    model = Product\n    template_name = 'products/list.html'\n    paginate_by = 20\n    \n    @silk_profile(name='Get Product Queryset')\n    def get_queryset(self):\n        \"\"\"Profiled queryset method\"\"\"\n        return Product.objects.select_related('category').prefetch_related(\n            'reviews'\n        ).filter(is_active=True).annotate(\n            avg_rating=Avg('reviews__rating'),\n            review_count=Count('reviews')\n        )\n    \n    @silk_profile(name='Get Context Data')\n    def get_context_data(self, **kwargs):\n        \"\"\"Profiled context method\"\"\"\n        context = super().get_context_data(**kwargs)\n        \n        # Add expensive context data\n        context['categories'] = Category.objects.filter(\n            is_active=True\n        ).annotate(\n            product_count=Count('products')\n        )\n        \n        context['featured_products'] = Product.objects.filter(\n            is_featured=True,\n            is_active=True\n        )[:6]\n        \n        return context\n\n# Custom profiling decorator\ndef profile_database_queries(func):\n    \"\"\"Decorator to profile database query performance\"\"\"\n    def wrapper(*args, **kwargs):\n        from django.db import connection, reset_queries\n        from django.conf import settings\n        \n        # Enable query logging\n        old_debug = settings.DEBUG\n        settings.DEBUG = True\n        reset_queries()\n        \n        start_time = time.time()\n        result = func(*args, **kwargs)\n        end_time = time.time()\n        \n        # Analyze queries\n        queries = connection.queries\n        total_time = sum(float(q['time']) for q in queries)\n        \n        print(f\"\\n=== Database Query Profile for {func.__name__} ===\")\n        print(f\"Execution time: {end_time - start_time:.4f}s\")\n        print(f\"Database time: {total_time:.4f}s\")\n        print(f\"Query count: {len(queries)}\")\n        print(f\"DB time percentage: {(total_time / (end_time - start_time)) * 100:.1f}%\")\n        \n        # Show slow queries\n        slow_queries = [q for q in queries if float(q['time']) > 0.01]\n        if slow_queries:\n            print(f\"\\nSlow queries (>10ms): {len(slow_queries)}\")\n            for i, query in enumerate(slow_queries[:5]):\n                print(f\"{i+1}. Time: {query['time']}s\")\n                print(f\"   SQL: {query['sql'][:100]}...\")\n        \n        # Restore debug setting\n        settings.DEBUG = old_debug\n        \n        return result\n    \n    return wrapper\n\n# Usage\n@profile_database_queries\ndef expensive_report_generation():\n    \"\"\"Generate expensive report with query profiling\"\"\"\n    # Your expensive operations here\n    pass\n",[1128,2889,2890,2914,2918,2923,2947,2961,2970,3011,3015,3020,3029,3054,3077,3098,3119,3142,3160,3178,3193,3218,3243,3265,3270,3275,3279,3286,3290,3295,3312,3322,3335,3345,3349,3371,3387,3397,3426,3434,3456,3475,3494,3498,3502,3523,3544,3553,3578,3582,3587,3618,3628,3636,3656,3660,3664,3693,3704,3712,3722,3726,3733,3737,3742,3756,3765,3788,3811,3827,3831,3836,3852,3866,3874,3878,3895,3919,3934,3938,3943,3957,4002,4007,4047,4080,4105,4136,4184,4189,4195,4245,4256,4290,4321,4370,4410,4415,4421,4435,4440,4448,4453,4461,4466,4472,4480,4491,4501,4507],{"__ignoreMap":1126},[1131,2891,2892,2895,2898,2900,2903,2905,2908,2911],{"class":1133,"line":1134},[1131,2893,2894],{"class":1673},"from",[1131,2896,2897],{"class":1330}," silk",[1131,2899,1333],{"class":1148},[1131,2901,2902],{"class":1330},"profiling",[1131,2904,1333],{"class":1148},[1131,2906,2907],{"class":1330},"profiler ",[1131,2909,2910],{"class":1673},"import",[1131,2912,2913],{"class":1330}," silk_profile\n",[1131,2915,2916],{"class":1133,"line":1141},[1131,2917,1188],{"emptyLinePlaceholder":1187},[1131,2919,2920],{"class":1133,"line":1155},[1131,2921,2922],{"class":1137},"# Profile specific functions\n",[1131,2924,2925,2928,2931,2933,2936,2938,2940,2943,2945],{"class":1133,"line":1161},[1131,2926,2927],{"class":1148},"@",[1131,2929,2930],{"class":1590},"silk_profile",[1131,2932,1594],{"class":1148},[1131,2934,2935],{"class":1743},"name",[1131,2937,1626],{"class":1148},[1131,2939,1172],{"class":1164},[1131,2941,2942],{"class":1168},"Calculate User Statistics",[1131,2944,1172],{"class":1164},[1131,2946,1761],{"class":1148},[1131,2948,2949,2951,2954,2956,2959],{"class":1133,"line":1178},[1131,2950,1587],{"class":1313},[1131,2952,2953],{"class":1590}," calculate_user_stats",[1131,2955,1594],{"class":1148},[1131,2957,2958],{"class":1317},"user_id",[1131,2960,1600],{"class":1148},[1131,2962,2963,2965,2968],{"class":1133,"line":1184},[1131,2964,1606],{"class":1605},[1131,2966,2967],{"class":1609},"Calculate comprehensive user statistics",[1131,2969,1613],{"class":1605},[1131,2971,2972,2975,2977,2980,2982,2984,2986,2988,2990,2992,2995,2997,2999,3001,3003,3005,3007,3009],{"class":1133,"line":1191},[1131,2973,2974],{"class":1330},"    user ",[1131,2976,1626],{"class":1148},[1131,2978,2979],{"class":1330}," User",[1131,2981,1333],{"class":1148},[1131,2983,1634],{"class":1336},[1131,2985,1333],{"class":1148},[1131,2987,2080],{"class":1639},[1131,2989,1594],{"class":1148},[1131,2991,1172],{"class":1164},[1131,2993,2994],{"class":1168},"profile",[1131,2996,1172],{"class":1164},[1131,2998,2092],{"class":1148},[1131,3000,2475],{"class":1639},[1131,3002,1594],{"class":1148},[1131,3004,1837],{"class":1743},[1131,3006,1626],{"class":1148},[1131,3008,2958],{"class":1639},[1131,3010,1761],{"class":1148},[1131,3012,3013],{"class":1133,"line":1201},[1131,3014,1653],{"class":1330},[1131,3016,3017],{"class":1133,"line":1213},[1131,3018,3019],{"class":1137},"    # This will be profiled by Silk\n",[1131,3021,3022,3025,3027],{"class":1133,"line":1219},[1131,3023,3024],{"class":1330},"    stats ",[1131,3026,1626],{"class":1148},[1131,3028,1297],{"class":1148},[1131,3030,3031,3033,3036,3038,3040,3042,3044,3047,3049,3051],{"class":1133,"line":1224},[1131,3032,2010],{"class":1164},[1131,3034,3035],{"class":1168},"total_orders",[1131,3037,1172],{"class":1164},[1131,3039,1310],{"class":1148},[1131,3041,2753],{"class":1330},[1131,3043,1333],{"class":1148},[1131,3045,3046],{"class":1336},"orders",[1131,3048,1333],{"class":1148},[1131,3050,1711],{"class":1639},[1131,3052,3053],{"class":1148},"(),\n",[1131,3055,3056,3058,3061,3063,3065,3067,3069,3071,3073,3075],{"class":1133,"line":1229},[1131,3057,2010],{"class":1164},[1131,3059,3060],{"class":1168},"total_spent",[1131,3062,1172],{"class":1164},[1131,3064,1310],{"class":1148},[1131,3066,2753],{"class":1330},[1131,3068,1333],{"class":1148},[1131,3070,3046],{"class":1336},[1131,3072,1333],{"class":1148},[1131,3074,1735],{"class":1639},[1131,3076,1738],{"class":1148},[1131,3078,3079,3082,3084,3087,3089,3091,3094,3096],{"class":1133,"line":1235},[1131,3080,3081],{"class":1743},"            total",[1131,3083,1626],{"class":1148},[1131,3085,3086],{"class":1639},"Sum",[1131,3088,1594],{"class":1148},[1131,3090,1172],{"class":1164},[1131,3092,3093],{"class":1168},"total_amount",[1131,3095,1172],{"class":1164},[1131,3097,1761],{"class":1148},[1131,3099,3100,3102,3104,3107,3109,3111,3114,3117],{"class":1133,"line":1245},[1131,3101,1766],{"class":1148},[1131,3103,1172],{"class":1164},[1131,3105,3106],{"class":1168},"total",[1131,3108,1172],{"class":1164},[1131,3110,1776],{"class":1148},[1131,3112,3113],{"class":1326}," or",[1131,3115,3116],{"class":1377}," 0",[1131,3118,1175],{"class":1148},[1131,3120,3121,3123,3126,3128,3130,3132,3134,3136,3138,3140],{"class":1133,"line":1257},[1131,3122,2010],{"class":1164},[1131,3124,3125],{"class":1168},"avg_order_value",[1131,3127,1172],{"class":1164},[1131,3129,1310],{"class":1148},[1131,3131,2753],{"class":1330},[1131,3133,1333],{"class":1148},[1131,3135,3046],{"class":1336},[1131,3137,1333],{"class":1148},[1131,3139,1735],{"class":1639},[1131,3141,1738],{"class":1148},[1131,3143,3144,3146,3148,3150,3152,3154,3156,3158],{"class":1133,"line":1273},[1131,3145,1744],{"class":1743},[1131,3147,1626],{"class":1148},[1131,3149,1749],{"class":1639},[1131,3151,1594],{"class":1148},[1131,3153,1172],{"class":1164},[1131,3155,3093],{"class":1168},[1131,3157,1172],{"class":1164},[1131,3159,1761],{"class":1148},[1131,3161,3162,3164,3166,3168,3170,3172,3174,3176],{"class":1133,"line":1278},[1131,3163,1766],{"class":1148},[1131,3165,1172],{"class":1164},[1131,3167,1771],{"class":1168},[1131,3169,1172],{"class":1164},[1131,3171,1776],{"class":1148},[1131,3173,3113],{"class":1326},[1131,3175,3116],{"class":1377},[1131,3177,1175],{"class":1148},[1131,3179,3180,3182,3185,3187,3189,3191],{"class":1133,"line":1283},[1131,3181,2010],{"class":1164},[1131,3183,3184],{"class":1168},"favorite_categories",[1131,3186,1172],{"class":1164},[1131,3188,1310],{"class":1148},[1131,3190,1934],{"class":1933},[1131,3192,1738],{"class":1148},[1131,3194,3195,3198,3200,3202,3204,3207,3209,3211,3214,3216],{"class":1133,"line":1289},[1131,3196,3197],{"class":1639},"            user",[1131,3199,1333],{"class":1148},[1131,3201,3046],{"class":1336},[1131,3203,1333],{"class":1148},[1131,3205,3206],{"class":1639},"values",[1131,3208,1594],{"class":1148},[1131,3210,1172],{"class":1164},[1131,3212,3213],{"class":1168},"items__product__category__name",[1131,3215,1172],{"class":1164},[1131,3217,1761],{"class":1148},[1131,3219,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240],{"class":1133,"line":1300},[1131,3221,2322],{"class":1148},[1131,3223,2146],{"class":1639},[1131,3225,1594],{"class":1148},[1131,3227,1711],{"class":1743},[1131,3229,1626],{"class":1148},[1131,3231,2159],{"class":1639},[1131,3233,1594],{"class":1148},[1131,3235,1172],{"class":1164},[1131,3237,1837],{"class":1168},[1131,3239,1172],{"class":1164},[1131,3241,3242],{"class":1148},"))\n",[1131,3244,3245,3247,3250,3252,3254,3257,3259,3261,3263],{"class":1133,"line":1347},[1131,3246,2322],{"class":1148},[1131,3248,3249],{"class":1639},"order_by",[1131,3251,1594],{"class":1148},[1131,3253,1172],{"class":1164},[1131,3255,3256],{"class":1168},"-count",[1131,3258,1172],{"class":1164},[1131,3260,1848],{"class":1148},[1131,3262,1851],{"class":1377},[1131,3264,1181],{"class":1148},[1131,3266,3267],{"class":1133,"line":1365},[1131,3268,3269],{"class":1148},"        ),\n",[1131,3271,3272],{"class":1133,"line":1383},[1131,3273,3274],{"class":1148},"    }\n",[1131,3276,3277],{"class":1133,"line":1389},[1131,3278,1653],{"class":1330},[1131,3280,3281,3283],{"class":1133,"line":1394},[1131,3282,1984],{"class":1673},[1131,3284,3285],{"class":1330}," stats\n",[1131,3287,3288],{"class":1133,"line":1400},[1131,3289,1188],{"emptyLinePlaceholder":1187},[1131,3291,3292],{"class":1133,"line":1410},[1131,3293,3294],{"class":1137},"# Profile view methods\n",[1131,3296,3297,3300,3304,3306,3310],{"class":1133,"line":1422},[1131,3298,3299],{"class":1313},"class",[1131,3301,3303],{"class":3302},"sD-vU"," ProductListView",[1131,3305,1594],{"class":1148},[1131,3307,3309],{"class":3308},"sYn-s","ListView",[1131,3311,1600],{"class":1148},[1131,3313,3314,3317,3319],{"class":1133,"line":1434},[1131,3315,3316],{"class":1330},"    model ",[1131,3318,1626],{"class":1148},[1131,3320,3321],{"class":1330}," Product\n",[1131,3323,3324,3327,3329,3331,3333],{"class":1133,"line":1446},[1131,3325,3326],{"class":1330},"    template_name ",[1131,3328,1626],{"class":1148},[1131,3330,1996],{"class":1164},[1131,3332,1999],{"class":1168},[1131,3334,2107],{"class":1164},[1131,3336,3337,3340,3342],{"class":1133,"line":1458},[1131,3338,3339],{"class":1330},"    paginate_by ",[1131,3341,1626],{"class":1148},[1131,3343,3344],{"class":1377}," 20\n",[1131,3346,3347],{"class":1133,"line":1470},[1131,3348,1653],{"class":1330},[1131,3350,3351,3354,3356,3358,3360,3362,3364,3367,3369],{"class":1133,"line":1482},[1131,3352,3353],{"class":1148},"    @",[1131,3355,2930],{"class":1590},[1131,3357,1594],{"class":1148},[1131,3359,2935],{"class":1743},[1131,3361,1626],{"class":1148},[1131,3363,1172],{"class":1164},[1131,3365,3366],{"class":1168},"Get Product Queryset",[1131,3368,1172],{"class":1164},[1131,3370,1761],{"class":1148},[1131,3372,3373,3376,3379,3381,3385],{"class":1133,"line":1494},[1131,3374,3375],{"class":1313},"    def",[1131,3377,3378],{"class":1590}," get_queryset",[1131,3380,1594],{"class":1148},[1131,3382,3384],{"class":3383},"sRjD_","self",[1131,3386,1600],{"class":1148},[1131,3388,3389,3392,3395],{"class":1133,"line":1506},[1131,3390,3391],{"class":1605},"        \"\"\"",[1131,3393,3394],{"class":1609},"Profiled queryset method",[1131,3396,1613],{"class":1605},[1131,3398,3399,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424],{"class":1133,"line":1518},[1131,3400,3401],{"class":1673},"        return",[1131,3403,1629],{"class":1330},[1131,3405,1333],{"class":1148},[1131,3407,1634],{"class":1336},[1131,3409,1333],{"class":1148},[1131,3411,2080],{"class":1639},[1131,3413,1594],{"class":1148},[1131,3415,1172],{"class":1164},[1131,3417,2087],{"class":1168},[1131,3419,1172],{"class":1164},[1131,3421,2092],{"class":1148},[1131,3423,2095],{"class":1639},[1131,3425,1738],{"class":1148},[1131,3427,3428,3430,3432],{"class":1133,"line":1530},[1131,3429,1877],{"class":1164},[1131,3431,1706],{"class":1168},[1131,3433,2107],{"class":1164},[1131,3435,3436,3438,3440,3442,3445,3447,3450,3452,3454],{"class":1133,"line":1542},[1131,3437,1829],{"class":1148},[1131,3439,1807],{"class":1639},[1131,3441,1594],{"class":1148},[1131,3443,3444],{"class":1743},"is_active",[1131,3446,1626],{"class":1148},[1131,3448,3449],{"class":1359},"True",[1131,3451,2092],{"class":1148},[1131,3453,2146],{"class":1639},[1131,3455,1738],{"class":1148},[1131,3457,3458,3461,3463,3465,3467,3469,3471,3473],{"class":1133,"line":1554},[1131,3459,3460],{"class":1743},"            avg_rating",[1131,3462,1626],{"class":1148},[1131,3464,1749],{"class":1639},[1131,3466,1594],{"class":1148},[1131,3468,1172],{"class":1164},[1131,3470,2186],{"class":1168},[1131,3472,1172],{"class":1164},[1131,3474,1941],{"class":1148},[1131,3476,3477,3480,3482,3484,3486,3488,3490,3492],{"class":1133,"line":1566},[1131,3478,3479],{"class":1743},"            review_count",[1131,3481,1626],{"class":1148},[1131,3483,2159],{"class":1639},[1131,3485,1594],{"class":1148},[1131,3487,1172],{"class":1164},[1131,3489,1706],{"class":1168},[1131,3491,1172],{"class":1164},[1131,3493,1761],{"class":1148},[1131,3495,3496],{"class":1133,"line":2059},[1131,3497,2359],{"class":1148},[1131,3499,3500],{"class":1133,"line":2065},[1131,3501,1653],{"class":1330},[1131,3503,3504,3506,3508,3510,3512,3514,3516,3519,3521],{"class":1133,"line":2100},[1131,3505,3353],{"class":1148},[1131,3507,2930],{"class":1590},[1131,3509,1594],{"class":1148},[1131,3511,2935],{"class":1743},[1131,3513,1626],{"class":1148},[1131,3515,1172],{"class":1164},[1131,3517,3518],{"class":1168},"Get Context Data",[1131,3520,1172],{"class":1164},[1131,3522,1761],{"class":1148},[1131,3524,3525,3527,3530,3532,3534,3536,3539,3542],{"class":1133,"line":2110},[1131,3526,3375],{"class":1313},[1131,3528,3529],{"class":1590}," get_context_data",[1131,3531,1594],{"class":1148},[1131,3533,3384],{"class":3383},[1131,3535,1267],{"class":1148},[1131,3537,3538],{"class":1326}," **",[1131,3540,3541],{"class":1317},"kwargs",[1131,3543,1600],{"class":1148},[1131,3545,3546,3548,3551],{"class":1133,"line":2124},[1131,3547,3391],{"class":1605},[1131,3549,3550],{"class":1609},"Profiled context method",[1131,3552,1613],{"class":1605},[1131,3554,3555,3558,3560,3563,3566,3569,3571,3574,3576],{"class":1133,"line":2129},[1131,3556,3557],{"class":1330},"        context ",[1131,3559,1626],{"class":1148},[1131,3561,3562],{"class":1933}," super",[1131,3564,3565],{"class":1148},"().",[1131,3567,3568],{"class":1639},"get_context_data",[1131,3570,1594],{"class":1148},[1131,3572,3573],{"class":1326},"**",[1131,3575,3541],{"class":1639},[1131,3577,1761],{"class":1148},[1131,3579,3580],{"class":1133,"line":2135},[1131,3581,1784],{"class":1330},[1131,3583,3584],{"class":1133,"line":2151},[1131,3585,3586],{"class":1137},"        # Add expensive context data\n",[1131,3588,3589,3592,3594,3596,3599,3601,3603,3605,3608,3610,3612,3614,3616],{"class":1133,"line":2172},[1131,3590,3591],{"class":1330},"        context",[1131,3593,2282],{"class":1148},[1131,3595,1172],{"class":1164},[1131,3597,3598],{"class":1168},"categories",[1131,3600,1172],{"class":1164},[1131,3602,1776],{"class":1148},[1131,3604,1149],{"class":1148},[1131,3606,3607],{"class":1330}," Category",[1131,3609,1333],{"class":1148},[1131,3611,1634],{"class":1336},[1131,3613,1333],{"class":1148},[1131,3615,1807],{"class":1639},[1131,3617,1738],{"class":1148},[1131,3619,3620,3623,3625],{"class":1133,"line":2193},[1131,3621,3622],{"class":1743},"            is_active",[1131,3624,1626],{"class":1148},[1131,3626,3627],{"class":1359},"True\n",[1131,3629,3630,3632,3634],{"class":1133,"line":2199},[1131,3631,1829],{"class":1148},[1131,3633,2146],{"class":1639},[1131,3635,1738],{"class":1148},[1131,3637,3638,3641,3643,3645,3647,3649,3652,3654],{"class":1133,"line":2204},[1131,3639,3640],{"class":1743},"            product_count",[1131,3642,1626],{"class":1148},[1131,3644,2159],{"class":1639},[1131,3646,1594],{"class":1148},[1131,3648,1172],{"class":1164},[1131,3650,3651],{"class":1168},"products",[1131,3653,1172],{"class":1164},[1131,3655,1761],{"class":1148},[1131,3657,3658],{"class":1133,"line":2210},[1131,3659,2359],{"class":1148},[1131,3661,3662],{"class":1133,"line":2240},[1131,3663,1784],{"class":1330},[1131,3665,3666,3668,3670,3672,3675,3677,3679,3681,3683,3685,3687,3689,3691],{"class":1133,"line":2251},[1131,3667,3591],{"class":1330},[1131,3669,2282],{"class":1148},[1131,3671,1172],{"class":1164},[1131,3673,3674],{"class":1168},"featured_products",[1131,3676,1172],{"class":1164},[1131,3678,1776],{"class":1148},[1131,3680,1149],{"class":1148},[1131,3682,1629],{"class":1330},[1131,3684,1333],{"class":1148},[1131,3686,1634],{"class":1336},[1131,3688,1333],{"class":1148},[1131,3690,1807],{"class":1639},[1131,3692,1738],{"class":1148},[1131,3694,3695,3698,3700,3702],{"class":1133,"line":2256},[1131,3696,3697],{"class":1743},"            is_featured",[1131,3699,1626],{"class":1148},[1131,3701,3449],{"class":1359},[1131,3703,1175],{"class":1148},[1131,3705,3706,3708,3710],{"class":1133,"line":2276},[1131,3707,3622],{"class":1743},[1131,3709,1626],{"class":1148},[1131,3711,3627],{"class":1359},[1131,3713,3714,3717,3720],{"class":1133,"line":2295},[1131,3715,3716],{"class":1148},"        )[:",[1131,3718,3719],{"class":1377},"6",[1131,3721,1181],{"class":1148},[1131,3723,3724],{"class":1133,"line":2319},[1131,3725,1784],{"class":1330},[1131,3727,3728,3730],{"class":1133,"line":2356},[1131,3729,3401],{"class":1673},[1131,3731,3732],{"class":1330}," context\n",[1131,3734,3735],{"class":1133,"line":2362},[1131,3736,1188],{"emptyLinePlaceholder":1187},[1131,3738,3739],{"class":1133,"line":2367},[1131,3740,3741],{"class":1137},"# Custom profiling decorator\n",[1131,3743,3744,3746,3749,3751,3754],{"class":1133,"line":2373},[1131,3745,1587],{"class":1313},[1131,3747,3748],{"class":1590}," profile_database_queries",[1131,3750,1594],{"class":1148},[1131,3752,3753],{"class":1317},"func",[1131,3755,1600],{"class":1148},[1131,3757,3758,3760,3763],{"class":1133,"line":2382},[1131,3759,1606],{"class":1605},[1131,3761,3762],{"class":1609},"Decorator to profile database query performance",[1131,3764,1613],{"class":1605},[1131,3766,3767,3769,3772,3774,3777,3780,3782,3784,3786],{"class":1133,"line":2395},[1131,3768,3375],{"class":1313},[1131,3770,3771],{"class":1590}," wrapper",[1131,3773,1594],{"class":1148},[1131,3775,3776],{"class":1326},"*",[1131,3778,3779],{"class":1317},"args",[1131,3781,1267],{"class":1148},[1131,3783,3538],{"class":1326},[1131,3785,3541],{"class":1317},[1131,3787,1600],{"class":1148},[1131,3789,3790,3793,3796,3798,3801,3803,3806,3808],{"class":1133,"line":2406},[1131,3791,3792],{"class":1673},"        from",[1131,3794,3795],{"class":1330}," django",[1131,3797,1333],{"class":1148},[1131,3799,3800],{"class":1330},"db ",[1131,3802,2910],{"class":1673},[1131,3804,3805],{"class":1330}," connection",[1131,3807,1267],{"class":1148},[1131,3809,3810],{"class":1330}," reset_queries\n",[1131,3812,3813,3815,3817,3819,3822,3824],{"class":1133,"line":2421},[1131,3814,3792],{"class":1673},[1131,3816,3795],{"class":1330},[1131,3818,1333],{"class":1148},[1131,3820,3821],{"class":1330},"conf ",[1131,3823,2910],{"class":1673},[1131,3825,3826],{"class":1330}," settings\n",[1131,3828,3829],{"class":1133,"line":2440},[1131,3830,1784],{"class":1330},[1131,3832,3833],{"class":1133,"line":2459},[1131,3834,3835],{"class":1137},"        # Enable query logging\n",[1131,3837,3838,3841,3843,3846,3848],{"class":1133,"line":2491},[1131,3839,3840],{"class":1330},"        old_debug ",[1131,3842,1626],{"class":1148},[1131,3844,3845],{"class":1330}," settings",[1131,3847,1333],{"class":1148},[1131,3849,3851],{"class":3850},"sFGJz","DEBUG\n",[1131,3853,3854,3857,3859,3862,3864],{"class":1133,"line":2496},[1131,3855,3856],{"class":1330},"        settings",[1131,3858,1333],{"class":1148},[1131,3860,3861],{"class":3850},"DEBUG",[1131,3863,1149],{"class":1148},[1131,3865,2674],{"class":1359},[1131,3867,3868,3871],{"class":1133,"line":2501},[1131,3869,3870],{"class":1639},"        reset_queries",[1131,3872,3873],{"class":1148},"()\n",[1131,3875,3876],{"class":1133,"line":2507},[1131,3877,1784],{"class":1330},[1131,3879,3880,3883,3885,3888,3890,3893],{"class":1133,"line":2513},[1131,3881,3882],{"class":1330},"        start_time ",[1131,3884,1626],{"class":1148},[1131,3886,3887],{"class":1330}," time",[1131,3889,1333],{"class":1148},[1131,3891,3892],{"class":1639},"time",[1131,3894,3873],{"class":1148},[1131,3896,3897,3900,3902,3905,3907,3909,3911,3913,3915,3917],{"class":1133,"line":2519},[1131,3898,3899],{"class":1330},"        result ",[1131,3901,1626],{"class":1148},[1131,3903,3904],{"class":1639}," func",[1131,3906,1594],{"class":1148},[1131,3908,3776],{"class":1326},[1131,3910,3779],{"class":1639},[1131,3912,1267],{"class":1148},[1131,3914,3538],{"class":1326},[1131,3916,3541],{"class":1639},[1131,3918,1761],{"class":1148},[1131,3920,3921,3924,3926,3928,3930,3932],{"class":1133,"line":2525},[1131,3922,3923],{"class":1330},"        end_time ",[1131,3925,1626],{"class":1148},[1131,3927,3887],{"class":1330},[1131,3929,1333],{"class":1148},[1131,3931,3892],{"class":1639},[1131,3933,3873],{"class":1148},[1131,3935,3936],{"class":1133,"line":2530},[1131,3937,1784],{"class":1330},[1131,3939,3940],{"class":1133,"line":2553},[1131,3941,3942],{"class":1137},"        # Analyze queries\n",[1131,3944,3945,3948,3950,3952,3954],{"class":1133,"line":2566},[1131,3946,3947],{"class":1330},"        queries ",[1131,3949,1626],{"class":1148},[1131,3951,3805],{"class":1330},[1131,3953,1333],{"class":1148},[1131,3955,3956],{"class":1336},"queries\n",[1131,3958,3960,3963,3965,3969,3971,3974,3976,3979,3981,3983,3985,3987,3990,3992,3995,3997,4000],{"class":1133,"line":3959},80,[1131,3961,3962],{"class":1330},"        total_time ",[1131,3964,1626],{"class":1148},[1131,3966,3968],{"class":3967},"sJdAF"," sum",[1131,3970,1594],{"class":1148},[1131,3972,3973],{"class":1933},"float",[1131,3975,1594],{"class":1148},[1131,3977,3978],{"class":1639},"q",[1131,3980,2282],{"class":1148},[1131,3982,1172],{"class":1164},[1131,3984,3892],{"class":1168},[1131,3986,1172],{"class":1164},[1131,3988,3989],{"class":1148},"])",[1131,3991,2228],{"class":1673},[1131,3993,3994],{"class":1639}," q ",[1131,3996,1680],{"class":1673},[1131,3998,3999],{"class":1639}," queries",[1131,4001,1761],{"class":1148},[1131,4003,4005],{"class":1133,"line":4004},81,[1131,4006,1784],{"class":1330},[1131,4008,4010,4013,4015,4018,4021,4024,4027,4031,4033,4035,4039,4042,4045],{"class":1133,"line":4009},82,[1131,4011,4012],{"class":3967},"        print",[1131,4014,1594],{"class":1148},[1131,4016,4017],{"class":1313},"f",[1131,4019,4020],{"class":1168},"\"",[1131,4022,4023],{"class":1144},"\\n",[1131,4025,4026],{"class":1168},"=== Database Query Profile for ",[1131,4028,4030],{"class":4029},"s3h35","{",[1131,4032,3753],{"class":1639},[1131,4034,1333],{"class":1148},[1131,4036,4038],{"class":4037},"s131V","__name__",[1131,4040,4041],{"class":4029},"}",[1131,4043,4044],{"class":1168}," ===\"",[1131,4046,1761],{"class":1148},[1131,4048,4050,4052,4054,4056,4059,4061,4064,4067,4070,4073,4075,4078],{"class":1133,"line":4049},83,[1131,4051,4012],{"class":3967},[1131,4053,1594],{"class":1148},[1131,4055,4017],{"class":1313},[1131,4057,4058],{"class":1168},"\"Execution time: ",[1131,4060,4030],{"class":4029},[1131,4062,4063],{"class":1639},"end_time ",[1131,4065,4066],{"class":1326},"-",[1131,4068,4069],{"class":1639}," start_time",[1131,4071,4072],{"class":1313},":.4f",[1131,4074,4041],{"class":4029},[1131,4076,4077],{"class":1168},"s\"",[1131,4079,1761],{"class":1148},[1131,4081,4083,4085,4087,4089,4092,4094,4097,4099,4101,4103],{"class":1133,"line":4082},84,[1131,4084,4012],{"class":3967},[1131,4086,1594],{"class":1148},[1131,4088,4017],{"class":1313},[1131,4090,4091],{"class":1168},"\"Database time: ",[1131,4093,4030],{"class":4029},[1131,4095,4096],{"class":1639},"total_time",[1131,4098,4072],{"class":1313},[1131,4100,4041],{"class":4029},[1131,4102,4077],{"class":1168},[1131,4104,1761],{"class":1148},[1131,4106,4108,4110,4112,4114,4117,4119,4122,4124,4127,4130,4132,4134],{"class":1133,"line":4107},85,[1131,4109,4012],{"class":3967},[1131,4111,1594],{"class":1148},[1131,4113,4017],{"class":1313},[1131,4115,4116],{"class":1168},"\"Query count: ",[1131,4118,4030],{"class":4029},[1131,4120,4121],{"class":3967},"len",[1131,4123,1594],{"class":1148},[1131,4125,4126],{"class":1639},"queries",[1131,4128,4129],{"class":1148},")",[1131,4131,4041],{"class":4029},[1131,4133,4020],{"class":1168},[1131,4135,1761],{"class":1148},[1131,4137,4139,4141,4143,4145,4148,4150,4152,4155,4158,4161,4163,4165,4167,4170,4172,4174,4177,4179,4182],{"class":1133,"line":4138},86,[1131,4140,4012],{"class":3967},[1131,4142,1594],{"class":1148},[1131,4144,4017],{"class":1313},[1131,4146,4147],{"class":1168},"\"DB time percentage: ",[1131,4149,4030],{"class":4029},[1131,4151,1594],{"class":1148},[1131,4153,4154],{"class":1639},"total_time ",[1131,4156,4157],{"class":1326},"/",[1131,4159,4160],{"class":1148}," (",[1131,4162,4063],{"class":1639},[1131,4164,4066],{"class":1326},[1131,4166,4069],{"class":1639},[1131,4168,4169],{"class":1148},"))",[1131,4171,2794],{"class":1326},[1131,4173,2824],{"class":1377},[1131,4175,4176],{"class":1313},":.1f",[1131,4178,4041],{"class":4029},[1131,4180,4181],{"class":1168},"%\"",[1131,4183,1761],{"class":1148},[1131,4185,4187],{"class":1133,"line":4186},87,[1131,4188,1784],{"class":1330},[1131,4190,4192],{"class":1133,"line":4191},88,[1131,4193,4194],{"class":1137},"        # Show slow queries\n",[1131,4196,4198,4201,4203,4205,4208,4211,4213,4215,4218,4220,4223,4225,4227,4229,4231,4233,4235,4237,4240,4243],{"class":1133,"line":4197},89,[1131,4199,4200],{"class":1330},"        slow_queries ",[1131,4202,1626],{"class":1148},[1131,4204,2218],{"class":1148},[1131,4206,4207],{"class":1330},"q ",[1131,4209,4210],{"class":1673},"for",[1131,4212,3994],{"class":1330},[1131,4214,1680],{"class":1673},[1131,4216,4217],{"class":1330}," queries ",[1131,4219,2841],{"class":1673},[1131,4221,4222],{"class":1933}," float",[1131,4224,1594],{"class":1148},[1131,4226,3978],{"class":1639},[1131,4228,2282],{"class":1148},[1131,4230,1172],{"class":1164},[1131,4232,3892],{"class":1168},[1131,4234,1172],{"class":1164},[1131,4236,3989],{"class":1148},[1131,4238,4239],{"class":1326}," >",[1131,4241,4242],{"class":1377}," 0.01",[1131,4244,1181],{"class":1148},[1131,4246,4248,4251,4254],{"class":1133,"line":4247},90,[1131,4249,4250],{"class":1673},"        if",[1131,4252,4253],{"class":1330}," slow_queries",[1131,4255,1686],{"class":1148},[1131,4257,4259,4262,4264,4266,4268,4270,4273,4275,4277,4279,4282,4284,4286,4288],{"class":1133,"line":4258},91,[1131,4260,4261],{"class":3967},"            print",[1131,4263,1594],{"class":1148},[1131,4265,4017],{"class":1313},[1131,4267,4020],{"class":1168},[1131,4269,4023],{"class":1144},[1131,4271,4272],{"class":1168},"Slow queries (>10ms): ",[1131,4274,4030],{"class":4029},[1131,4276,4121],{"class":3967},[1131,4278,1594],{"class":1148},[1131,4280,4281],{"class":1639},"slow_queries",[1131,4283,4129],{"class":1148},[1131,4285,4041],{"class":4029},[1131,4287,4020],{"class":1168},[1131,4289,1761],{"class":1148},[1131,4291,4293,4296,4299,4301,4304,4306,4309,4311,4313,4316,4318],{"class":1133,"line":4292},92,[1131,4294,4295],{"class":1673},"            for",[1131,4297,4298],{"class":1330}," i",[1131,4300,1267],{"class":1148},[1131,4302,4303],{"class":1330}," query ",[1131,4305,1680],{"class":1673},[1131,4307,4308],{"class":3967}," enumerate",[1131,4310,1594],{"class":1148},[1131,4312,4281],{"class":1639},[1131,4314,4315],{"class":1148},"[:",[1131,4317,1851],{"class":1377},[1131,4319,4320],{"class":1148},"]):\n",[1131,4322,4324,4327,4329,4331,4333,4335,4338,4341,4344,4346,4349,4351,4354,4356,4358,4360,4362,4364,4366,4368],{"class":1133,"line":4323},93,[1131,4325,4326],{"class":3967},"                print",[1131,4328,1594],{"class":1148},[1131,4330,4017],{"class":1313},[1131,4332,4020],{"class":1168},[1131,4334,4030],{"class":4029},[1131,4336,4337],{"class":1639},"i",[1131,4339,4340],{"class":1326},"+",[1131,4342,4343],{"class":1377},"1",[1131,4345,4041],{"class":4029},[1131,4347,4348],{"class":1168},". Time: ",[1131,4350,4030],{"class":4029},[1131,4352,4353],{"class":1639},"query",[1131,4355,2282],{"class":1148},[1131,4357,1172],{"class":1164},[1131,4359,3892],{"class":1168},[1131,4361,1172],{"class":1164},[1131,4363,1776],{"class":1148},[1131,4365,4041],{"class":4029},[1131,4367,4077],{"class":1168},[1131,4369,1761],{"class":1148},[1131,4371,4373,4375,4377,4379,4382,4384,4386,4388,4390,4393,4395,4398,4401,4403,4405,4408],{"class":1133,"line":4372},94,[1131,4374,4326],{"class":3967},[1131,4376,1594],{"class":1148},[1131,4378,4017],{"class":1313},[1131,4380,4381],{"class":1168},"\"   SQL: ",[1131,4383,4030],{"class":4029},[1131,4385,4353],{"class":1639},[1131,4387,2282],{"class":1148},[1131,4389,1172],{"class":1164},[1131,4391,4392],{"class":1168},"sql",[1131,4394,1172],{"class":1164},[1131,4396,4397],{"class":1148},"][:",[1131,4399,4400],{"class":1377},"100",[1131,4402,1776],{"class":1148},[1131,4404,4041],{"class":4029},[1131,4406,4407],{"class":1168},"...\"",[1131,4409,1761],{"class":1148},[1131,4411,4413],{"class":1133,"line":4412},95,[1131,4414,1784],{"class":1330},[1131,4416,4418],{"class":1133,"line":4417},96,[1131,4419,4420],{"class":1137},"        # Restore debug setting\n",[1131,4422,4424,4426,4428,4430,4432],{"class":1133,"line":4423},97,[1131,4425,3856],{"class":1330},[1131,4427,1333],{"class":1148},[1131,4429,3861],{"class":3850},[1131,4431,1149],{"class":1148},[1131,4433,4434],{"class":1330}," old_debug\n",[1131,4436,4438],{"class":1133,"line":4437},98,[1131,4439,1784],{"class":1330},[1131,4441,4443,4445],{"class":1133,"line":4442},99,[1131,4444,3401],{"class":1673},[1131,4446,4447],{"class":1330}," result\n",[1131,4449,4451],{"class":1133,"line":4450},100,[1131,4452,1653],{"class":1330},[1131,4454,4456,4458],{"class":1133,"line":4455},101,[1131,4457,1984],{"class":1673},[1131,4459,4460],{"class":1330}," wrapper\n",[1131,4462,4464],{"class":1133,"line":4463},102,[1131,4465,1188],{"emptyLinePlaceholder":1187},[1131,4467,4469],{"class":1133,"line":4468},103,[1131,4470,4471],{"class":1137},"# Usage\n",[1131,4473,4475,4477],{"class":1133,"line":4474},104,[1131,4476,2927],{"class":1148},[1131,4478,4479],{"class":1590},"profile_database_queries\n",[1131,4481,4483,4485,4488],{"class":1133,"line":4482},105,[1131,4484,1587],{"class":1313},[1131,4486,4487],{"class":1590}," expensive_report_generation",[1131,4489,4490],{"class":1148},"():\n",[1131,4492,4494,4496,4499],{"class":1133,"line":4493},106,[1131,4495,1606],{"class":1605},[1131,4497,4498],{"class":1609},"Generate expensive report with query profiling",[1131,4500,1613],{"class":1605},[1131,4502,4504],{"class":1133,"line":4503},107,[1131,4505,4506],{"class":1137},"    # Your expensive operations here\n",[1131,4508,4510],{"class":1133,"line":4509},108,[1131,4511,4512],{"class":1673},"    pass\n",[1030,4514,4516],{"id":4515},"python-profiling-tools","Python Profiling Tools",[1038,4518,4520],{"id":4519},"cprofile-integration","cProfile Integration",[1121,4522,4524],{"className":1123,"code":4523,"language":1125,"meta":1126,"style":1126},"import cProfile\nimport pstats\nimport io\nfrom django.http import HttpResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views.decorators.csrf import csrf_exempt\n\ndef profile_view(func):\n    \"\"\"Decorator to profile view functions\"\"\"\n    def wrapper(request, *args, **kwargs):\n        if request.GET.get('profile') == '1' and request.user.is_superuser:\n            # Create profiler\n            profiler = cProfile.Profile()\n            \n            # Profile the view\n            profiler.enable()\n            response = func(request, *args, **kwargs)\n            profiler.disable()\n            \n            # Generate profile report\n            s = io.StringIO()\n            ps = pstats.Stats(profiler, stream=s)\n            ps.sort_stats('cumulative')\n            ps.print_stats(50)  # Top 50 functions\n            \n            # Return profile as response\n            profile_output = s.getvalue()\n            return HttpResponse(\n                f\"\u003Cpre>{profile_output}\u003C/pre>\",\n                content_type='text/html'\n            )\n        else:\n            return func(request, *args, **kwargs)\n    \n    return wrapper\n\n# Usage\n@profile_view\ndef complex_dashboard(request):\n    \"\"\"Complex dashboard with profiling capability\"\"\"\n    # Access with ?profile=1 to see profile\n    \n    # Expensive operations\n    user_stats = calculate_user_stats(request.user.id)\n    recent_orders = get_recent_orders(request.user.id)\n    recommendations = generate_recommendations(request.user.id)\n    \n    context = {\n        'user_stats': user_stats,\n        'recent_orders': recent_orders,\n        'recommendations': recommendations,\n    }\n    \n    return render(request, 'dashboard.html', context)\n\n# Line-by-line profiling with line_profiler\ndef line_profile_function():\n    \"\"\"\n    Use with kernprof:\n    kernprof -l -v manage.py runserver\n    \n    Add @profile decorator to functions you want to profile\n    \"\"\"\n    pass\n\n# Memory profiling with memory_profiler\nfrom memory_profiler import profile as memory_profile\n\n@memory_profile\ndef memory_intensive_function():\n    \"\"\"\n    Run with: python -m memory_profiler your_script.py\n    Shows line-by-line memory usage\n    \"\"\"\n    # Memory-intensive operations\n    large_list = [i for i in range(1000000)]\n    processed_data = [x * 2 for x in large_list]\n    return processed_data\n",[1128,4525,4526,4533,4540,4547,4563,4584,4610,4614,4627,4636,4660,4708,4713,4730,4735,4740,4752,4779,4790,4794,4799,4816,4848,4869,4887,4891,4896,4913,4923,4943,4957,4962,4969,4993,4997,5003,5007,5011,5018,5031,5040,5045,5049,5054,5077,5101,5125,5129,5138,5154,5170,5186,5190,5194,5220,5224,5229,5238,5243,5248,5253,5257,5262,5266,5270,5274,5279,5297,5301,5308,5317,5321,5326,5331,5335,5340,5370,5399],{"__ignoreMap":1126},[1131,4527,4528,4530],{"class":1133,"line":1134},[1131,4529,2910],{"class":1673},[1131,4531,4532],{"class":1330}," cProfile\n",[1131,4534,4535,4537],{"class":1133,"line":1141},[1131,4536,2910],{"class":1673},[1131,4538,4539],{"class":1330}," pstats\n",[1131,4541,4542,4544],{"class":1133,"line":1155},[1131,4543,2910],{"class":1673},[1131,4545,4546],{"class":1330}," io\n",[1131,4548,4549,4551,4553,4555,4558,4560],{"class":1133,"line":1161},[1131,4550,2894],{"class":1673},[1131,4552,3795],{"class":1330},[1131,4554,1333],{"class":1148},[1131,4556,4557],{"class":1330},"http ",[1131,4559,2910],{"class":1673},[1131,4561,4562],{"class":1330}," HttpResponse\n",[1131,4564,4565,4567,4569,4571,4574,4576,4579,4581],{"class":1133,"line":1178},[1131,4566,2894],{"class":1673},[1131,4568,3795],{"class":1330},[1131,4570,1333],{"class":1148},[1131,4572,4573],{"class":1330},"utils",[1131,4575,1333],{"class":1148},[1131,4577,4578],{"class":1330},"decorators ",[1131,4580,2910],{"class":1673},[1131,4582,4583],{"class":1330}," method_decorator\n",[1131,4585,4586,4588,4590,4592,4595,4597,4600,4602,4605,4607],{"class":1133,"line":1184},[1131,4587,2894],{"class":1673},[1131,4589,3795],{"class":1330},[1131,4591,1333],{"class":1148},[1131,4593,4594],{"class":1330},"views",[1131,4596,1333],{"class":1148},[1131,4598,4599],{"class":1330},"decorators",[1131,4601,1333],{"class":1148},[1131,4603,4604],{"class":1330},"csrf ",[1131,4606,2910],{"class":1673},[1131,4608,4609],{"class":1330}," csrf_exempt\n",[1131,4611,4612],{"class":1133,"line":1191},[1131,4613,1188],{"emptyLinePlaceholder":1187},[1131,4615,4616,4618,4621,4623,4625],{"class":1133,"line":1201},[1131,4617,1587],{"class":1313},[1131,4619,4620],{"class":1590}," profile_view",[1131,4622,1594],{"class":1148},[1131,4624,3753],{"class":1317},[1131,4626,1600],{"class":1148},[1131,4628,4629,4631,4634],{"class":1133,"line":1213},[1131,4630,1606],{"class":1605},[1131,4632,4633],{"class":1609},"Decorator to profile view functions",[1131,4635,1613],{"class":1605},[1131,4637,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658],{"class":1133,"line":1219},[1131,4639,3375],{"class":1313},[1131,4641,3771],{"class":1590},[1131,4643,1594],{"class":1148},[1131,4645,1597],{"class":1317},[1131,4647,1267],{"class":1148},[1131,4649,2794],{"class":1326},[1131,4651,3779],{"class":1317},[1131,4653,1267],{"class":1148},[1131,4655,3538],{"class":1326},[1131,4657,3541],{"class":1317},[1131,4659,1600],{"class":1148},[1131,4661,4662,4664,4666,4668,4671,4673,4675,4677,4679,4681,4683,4685,4688,4690,4692,4694,4696,4698,4700,4702,4704,4706],{"class":1133,"line":1224},[1131,4663,4250],{"class":1673},[1131,4665,1318],{"class":1330},[1131,4667,1333],{"class":1148},[1131,4669,4670],{"class":3850},"GET",[1131,4672,1333],{"class":1148},[1131,4674,2475],{"class":1639},[1131,4676,1594],{"class":1148},[1131,4678,1172],{"class":1164},[1131,4680,2994],{"class":1168},[1131,4682,1172],{"class":1164},[1131,4684,4129],{"class":1148},[1131,4686,4687],{"class":1326}," ==",[1131,4689,1996],{"class":1164},[1131,4691,4343],{"class":1168},[1131,4693,1172],{"class":1164},[1131,4695,1327],{"class":1326},[1131,4697,1318],{"class":1330},[1131,4699,1333],{"class":1148},[1131,4701,1337],{"class":1336},[1131,4703,1333],{"class":1148},[1131,4705,1342],{"class":1336},[1131,4707,1686],{"class":1148},[1131,4709,4710],{"class":1133,"line":1229},[1131,4711,4712],{"class":1137},"            # Create profiler\n",[1131,4714,4715,4718,4720,4723,4725,4728],{"class":1133,"line":1235},[1131,4716,4717],{"class":1330},"            profiler ",[1131,4719,1626],{"class":1148},[1131,4721,4722],{"class":1330}," cProfile",[1131,4724,1333],{"class":1148},[1131,4726,4727],{"class":1639},"Profile",[1131,4729,3873],{"class":1148},[1131,4731,4732],{"class":1133,"line":1245},[1131,4733,4734],{"class":1330},"            \n",[1131,4736,4737],{"class":1133,"line":1257},[1131,4738,4739],{"class":1137},"            # Profile the view\n",[1131,4741,4742,4745,4747,4750],{"class":1133,"line":1273},[1131,4743,4744],{"class":1330},"            profiler",[1131,4746,1333],{"class":1148},[1131,4748,4749],{"class":1639},"enable",[1131,4751,3873],{"class":1148},[1131,4753,4754,4757,4759,4761,4763,4765,4767,4769,4771,4773,4775,4777],{"class":1133,"line":1278},[1131,4755,4756],{"class":1330},"            response ",[1131,4758,1626],{"class":1148},[1131,4760,3904],{"class":1639},[1131,4762,1594],{"class":1148},[1131,4764,1597],{"class":1639},[1131,4766,1267],{"class":1148},[1131,4768,2794],{"class":1326},[1131,4770,3779],{"class":1639},[1131,4772,1267],{"class":1148},[1131,4774,3538],{"class":1326},[1131,4776,3541],{"class":1639},[1131,4778,1761],{"class":1148},[1131,4780,4781,4783,4785,4788],{"class":1133,"line":1283},[1131,4782,4744],{"class":1330},[1131,4784,1333],{"class":1148},[1131,4786,4787],{"class":1639},"disable",[1131,4789,3873],{"class":1148},[1131,4791,4792],{"class":1133,"line":1289},[1131,4793,4734],{"class":1330},[1131,4795,4796],{"class":1133,"line":1300},[1131,4797,4798],{"class":1137},"            # Generate profile report\n",[1131,4800,4801,4804,4806,4809,4811,4814],{"class":1133,"line":1347},[1131,4802,4803],{"class":1330},"            s ",[1131,4805,1626],{"class":1148},[1131,4807,4808],{"class":1330}," io",[1131,4810,1333],{"class":1148},[1131,4812,4813],{"class":1639},"StringIO",[1131,4815,3873],{"class":1148},[1131,4817,4818,4821,4823,4826,4828,4831,4833,4836,4838,4841,4843,4846],{"class":1133,"line":1365},[1131,4819,4820],{"class":1330},"            ps ",[1131,4822,1626],{"class":1148},[1131,4824,4825],{"class":1330}," pstats",[1131,4827,1333],{"class":1148},[1131,4829,4830],{"class":1639},"Stats",[1131,4832,1594],{"class":1148},[1131,4834,4835],{"class":1639},"profiler",[1131,4837,1267],{"class":1148},[1131,4839,4840],{"class":1743}," stream",[1131,4842,1626],{"class":1148},[1131,4844,4845],{"class":1639},"s",[1131,4847,1761],{"class":1148},[1131,4849,4850,4853,4855,4858,4860,4862,4865,4867],{"class":1133,"line":1383},[1131,4851,4852],{"class":1330},"            ps",[1131,4854,1333],{"class":1148},[1131,4856,4857],{"class":1639},"sort_stats",[1131,4859,1594],{"class":1148},[1131,4861,1172],{"class":1164},[1131,4863,4864],{"class":1168},"cumulative",[1131,4866,1172],{"class":1164},[1131,4868,1761],{"class":1148},[1131,4870,4871,4873,4875,4878,4880,4882,4884],{"class":1133,"line":1389},[1131,4872,4852],{"class":1330},[1131,4874,1333],{"class":1148},[1131,4876,4877],{"class":1639},"print_stats",[1131,4879,1594],{"class":1148},[1131,4881,1646],{"class":1377},[1131,4883,4129],{"class":1148},[1131,4885,4886],{"class":1137},"  # Top 50 functions\n",[1131,4888,4889],{"class":1133,"line":1394},[1131,4890,4734],{"class":1330},[1131,4892,4893],{"class":1133,"line":1400},[1131,4894,4895],{"class":1137},"            # Return profile as response\n",[1131,4897,4898,4901,4903,4906,4908,4911],{"class":1133,"line":1410},[1131,4899,4900],{"class":1330},"            profile_output ",[1131,4902,1626],{"class":1148},[1131,4904,4905],{"class":1330}," s",[1131,4907,1333],{"class":1148},[1131,4909,4910],{"class":1639},"getvalue",[1131,4912,3873],{"class":1148},[1131,4914,4915,4918,4921],{"class":1133,"line":1422},[1131,4916,4917],{"class":1673},"            return",[1131,4919,4920],{"class":1639}," HttpResponse",[1131,4922,1738],{"class":1148},[1131,4924,4925,4928,4931,4933,4936,4938,4941],{"class":1133,"line":1434},[1131,4926,4927],{"class":1313},"                f",[1131,4929,4930],{"class":1168},"\"\u003Cpre>",[1131,4932,4030],{"class":4029},[1131,4934,4935],{"class":1639},"profile_output",[1131,4937,4041],{"class":4029},[1131,4939,4940],{"class":1168},"\u003C/pre>\"",[1131,4942,1175],{"class":1148},[1131,4944,4945,4948,4950,4952,4955],{"class":1133,"line":1446},[1131,4946,4947],{"class":1743},"                content_type",[1131,4949,1626],{"class":1148},[1131,4951,1172],{"class":1164},[1131,4953,4954],{"class":1168},"text/html",[1131,4956,2107],{"class":1164},[1131,4958,4959],{"class":1133,"line":1458},[1131,4960,4961],{"class":1148},"            )\n",[1131,4963,4964,4967],{"class":1133,"line":1470},[1131,4965,4966],{"class":1673},"        else",[1131,4968,1686],{"class":1148},[1131,4970,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991],{"class":1133,"line":1482},[1131,4972,4917],{"class":1673},[1131,4974,3904],{"class":1639},[1131,4976,1594],{"class":1148},[1131,4978,1597],{"class":1639},[1131,4980,1267],{"class":1148},[1131,4982,2794],{"class":1326},[1131,4984,3779],{"class":1639},[1131,4986,1267],{"class":1148},[1131,4988,3538],{"class":1326},[1131,4990,3541],{"class":1639},[1131,4992,1761],{"class":1148},[1131,4994,4995],{"class":1133,"line":1494},[1131,4996,1653],{"class":1330},[1131,4998,4999,5001],{"class":1133,"line":1506},[1131,5000,1984],{"class":1673},[1131,5002,4460],{"class":1330},[1131,5004,5005],{"class":1133,"line":1518},[1131,5006,1188],{"emptyLinePlaceholder":1187},[1131,5008,5009],{"class":1133,"line":1530},[1131,5010,4471],{"class":1137},[1131,5012,5013,5015],{"class":1133,"line":1542},[1131,5014,2927],{"class":1148},[1131,5016,5017],{"class":1590},"profile_view\n",[1131,5019,5020,5022,5025,5027,5029],{"class":1133,"line":1554},[1131,5021,1587],{"class":1313},[1131,5023,5024],{"class":1590}," complex_dashboard",[1131,5026,1594],{"class":1148},[1131,5028,1597],{"class":1317},[1131,5030,1600],{"class":1148},[1131,5032,5033,5035,5038],{"class":1133,"line":1566},[1131,5034,1606],{"class":1605},[1131,5036,5037],{"class":1609},"Complex dashboard with profiling capability",[1131,5039,1613],{"class":1605},[1131,5041,5042],{"class":1133,"line":2059},[1131,5043,5044],{"class":1137},"    # Access with ?profile=1 to see profile\n",[1131,5046,5047],{"class":1133,"line":2065},[1131,5048,1653],{"class":1330},[1131,5050,5051],{"class":1133,"line":2100},[1131,5052,5053],{"class":1137},"    # Expensive operations\n",[1131,5055,5056,5059,5061,5063,5065,5067,5069,5071,5073,5075],{"class":1133,"line":2110},[1131,5057,5058],{"class":1330},"    user_stats ",[1131,5060,1626],{"class":1148},[1131,5062,2953],{"class":1639},[1131,5064,1594],{"class":1148},[1131,5066,1597],{"class":1639},[1131,5068,1333],{"class":1148},[1131,5070,1337],{"class":1336},[1131,5072,1333],{"class":1148},[1131,5074,1837],{"class":1336},[1131,5076,1761],{"class":1148},[1131,5078,5079,5082,5084,5087,5089,5091,5093,5095,5097,5099],{"class":1133,"line":2124},[1131,5080,5081],{"class":1330},"    recent_orders ",[1131,5083,1626],{"class":1148},[1131,5085,5086],{"class":1639}," get_recent_orders",[1131,5088,1594],{"class":1148},[1131,5090,1597],{"class":1639},[1131,5092,1333],{"class":1148},[1131,5094,1337],{"class":1336},[1131,5096,1333],{"class":1148},[1131,5098,1837],{"class":1336},[1131,5100,1761],{"class":1148},[1131,5102,5103,5106,5108,5111,5113,5115,5117,5119,5121,5123],{"class":1133,"line":2129},[1131,5104,5105],{"class":1330},"    recommendations ",[1131,5107,1626],{"class":1148},[1131,5109,5110],{"class":1639}," generate_recommendations",[1131,5112,1594],{"class":1148},[1131,5114,1597],{"class":1639},[1131,5116,1333],{"class":1148},[1131,5118,1337],{"class":1336},[1131,5120,1333],{"class":1148},[1131,5122,1837],{"class":1336},[1131,5124,1761],{"class":1148},[1131,5126,5127],{"class":1133,"line":2135},[1131,5128,1653],{"class":1330},[1131,5130,5131,5134,5136],{"class":1133,"line":2151},[1131,5132,5133],{"class":1330},"    context ",[1131,5135,1626],{"class":1148},[1131,5137,1297],{"class":1148},[1131,5139,5140,5142,5145,5147,5149,5152],{"class":1133,"line":2172},[1131,5141,2010],{"class":1164},[1131,5143,5144],{"class":1168},"user_stats",[1131,5146,1172],{"class":1164},[1131,5148,1310],{"class":1148},[1131,5150,5151],{"class":1330}," user_stats",[1131,5153,1175],{"class":1148},[1131,5155,5156,5158,5161,5163,5165,5168],{"class":1133,"line":2193},[1131,5157,2010],{"class":1164},[1131,5159,5160],{"class":1168},"recent_orders",[1131,5162,1172],{"class":1164},[1131,5164,1310],{"class":1148},[1131,5166,5167],{"class":1330}," recent_orders",[1131,5169,1175],{"class":1148},[1131,5171,5172,5174,5177,5179,5181,5184],{"class":1133,"line":2199},[1131,5173,2010],{"class":1164},[1131,5175,5176],{"class":1168},"recommendations",[1131,5178,1172],{"class":1164},[1131,5180,1310],{"class":1148},[1131,5182,5183],{"class":1330}," recommendations",[1131,5185,1175],{"class":1148},[1131,5187,5188],{"class":1133,"line":2204},[1131,5189,3274],{"class":1148},[1131,5191,5192],{"class":1133,"line":2210},[1131,5193,1653],{"class":1330},[1131,5195,5196,5198,5200,5202,5204,5206,5208,5211,5213,5215,5218],{"class":1133,"line":2240},[1131,5197,1984],{"class":1673},[1131,5199,1987],{"class":1639},[1131,5201,1594],{"class":1148},[1131,5203,1597],{"class":1639},[1131,5205,1267],{"class":1148},[1131,5207,1996],{"class":1164},[1131,5209,5210],{"class":1168},"dashboard.html",[1131,5212,1172],{"class":1164},[1131,5214,1267],{"class":1148},[1131,5216,5217],{"class":1639}," context",[1131,5219,1761],{"class":1148},[1131,5221,5222],{"class":1133,"line":2251},[1131,5223,1188],{"emptyLinePlaceholder":1187},[1131,5225,5226],{"class":1133,"line":2256},[1131,5227,5228],{"class":1137},"# Line-by-line profiling with line_profiler\n",[1131,5230,5231,5233,5236],{"class":1133,"line":2276},[1131,5232,1587],{"class":1313},[1131,5234,5235],{"class":1590}," line_profile_function",[1131,5237,4490],{"class":1148},[1131,5239,5240],{"class":1133,"line":2295},[1131,5241,5242],{"class":1605},"    \"\"\"\n",[1131,5244,5245],{"class":1133,"line":2319},[1131,5246,5247],{"class":1609},"    Use with kernprof:\n",[1131,5249,5250],{"class":1133,"line":2356},[1131,5251,5252],{"class":1609},"    kernprof -l -v manage.py runserver\n",[1131,5254,5255],{"class":1133,"line":2362},[1131,5256,1653],{"class":1609},[1131,5258,5259],{"class":1133,"line":2367},[1131,5260,5261],{"class":1609},"    Add @profile decorator to functions you want to profile\n",[1131,5263,5264],{"class":1133,"line":2373},[1131,5265,5242],{"class":1605},[1131,5267,5268],{"class":1133,"line":2382},[1131,5269,4512],{"class":1673},[1131,5271,5272],{"class":1133,"line":2395},[1131,5273,1188],{"emptyLinePlaceholder":1187},[1131,5275,5276],{"class":1133,"line":2406},[1131,5277,5278],{"class":1137},"# Memory profiling with memory_profiler\n",[1131,5280,5281,5283,5286,5288,5291,5294],{"class":1133,"line":2421},[1131,5282,2894],{"class":1673},[1131,5284,5285],{"class":1330}," memory_profiler ",[1131,5287,2910],{"class":1673},[1131,5289,5290],{"class":1330}," profile ",[1131,5292,5293],{"class":1673},"as",[1131,5295,5296],{"class":1330}," memory_profile\n",[1131,5298,5299],{"class":1133,"line":2440},[1131,5300,1188],{"emptyLinePlaceholder":1187},[1131,5302,5303,5305],{"class":1133,"line":2459},[1131,5304,2927],{"class":1148},[1131,5306,5307],{"class":1590},"memory_profile\n",[1131,5309,5310,5312,5315],{"class":1133,"line":2491},[1131,5311,1587],{"class":1313},[1131,5313,5314],{"class":1590}," memory_intensive_function",[1131,5316,4490],{"class":1148},[1131,5318,5319],{"class":1133,"line":2496},[1131,5320,5242],{"class":1605},[1131,5322,5323],{"class":1133,"line":2501},[1131,5324,5325],{"class":1609},"    Run with: python -m memory_profiler your_script.py\n",[1131,5327,5328],{"class":1133,"line":2507},[1131,5329,5330],{"class":1609},"    Shows line-by-line memory usage\n",[1131,5332,5333],{"class":1133,"line":2513},[1131,5334,5242],{"class":1605},[1131,5336,5337],{"class":1133,"line":2519},[1131,5338,5339],{"class":1137},"    # Memory-intensive operations\n",[1131,5341,5342,5345,5347,5349,5352,5354,5357,5359,5362,5364,5367],{"class":1133,"line":2525},[1131,5343,5344],{"class":1330},"    large_list ",[1131,5346,1626],{"class":1148},[1131,5348,2218],{"class":1148},[1131,5350,5351],{"class":1330},"i ",[1131,5353,4210],{"class":1673},[1131,5355,5356],{"class":1330}," i ",[1131,5358,1680],{"class":1673},[1131,5360,5361],{"class":3967}," range",[1131,5363,1594],{"class":1148},[1131,5365,5366],{"class":1377},"1000000",[1131,5368,5369],{"class":1148},")]\n",[1131,5371,5372,5375,5377,5379,5382,5384,5387,5389,5392,5394,5397],{"class":1133,"line":2530},[1131,5373,5374],{"class":1330},"    processed_data ",[1131,5376,1626],{"class":1148},[1131,5378,2218],{"class":1148},[1131,5380,5381],{"class":1330},"x ",[1131,5383,3776],{"class":1326},[1131,5385,5386],{"class":1377}," 2",[1131,5388,2228],{"class":1673},[1131,5390,5391],{"class":1330}," x ",[1131,5393,1680],{"class":1673},[1131,5395,5396],{"class":1330}," large_list",[1131,5398,1181],{"class":1148},[1131,5400,5401,5403],{"class":1133,"line":2553},[1131,5402,1984],{"class":1673},[1131,5404,5405],{"class":1330}," processed_data\n",[1038,5407,5409],{"id":5408},"custom-profiling-middleware","Custom Profiling Middleware",[1121,5411,5413],{"className":1123,"code":5412,"language":1125,"meta":1126,"style":1126},"import time\nimport cProfile\nimport pstats\nimport io\nfrom django.conf import settings\nfrom django.utils.deprecation import MiddlewareMixin\nfrom django.http import HttpResponse\n\nclass ProfilingMiddleware(MiddlewareMixin):\n    \"\"\"Comprehensive profiling middleware\"\"\"\n    \n    def process_request(self, request):\n        # Initialize profiling data\n        request.profiling_data = {\n            'start_time': time.time(),\n            'start_queries': len(connection.queries) if settings.DEBUG else 0,\n        }\n        \n        # Start cProfile if requested\n        if (request.GET.get('profile') == 'cprofile' and \n            request.user.is_authenticated and \n            request.user.is_superuser):\n            request.profiler = cProfile.Profile()\n            request.profiler.enable()\n    \n    def process_response(self, request, response):\n        if hasattr(request, 'profiling_data'):\n            # Calculate timing\n            end_time = time.time()\n            duration = end_time - request.profiling_data['start_time']\n            \n            # Calculate query stats\n            if settings.DEBUG:\n                end_queries = len(connection.queries)\n                query_count = end_queries - request.profiling_data['start_queries']\n                query_time = sum(\n                    float(q['time']) \n                    for q in connection.queries[request.profiling_data['start_queries']:]\n                )\n            else:\n                query_count = 0\n                query_time = 0\n            \n            # Add performance headers\n            response['X-Response-Time'] = f'{duration:.3f}'\n            response['X-DB-Queries'] = str(query_count)\n            response['X-DB-Time'] = f'{query_time:.3f}'\n            \n            # Handle cProfile output\n            if hasattr(request, 'profiler'):\n                request.profiler.disable()\n                \n                s = io.StringIO()\n                ps = pstats.Stats(request.profiler, stream=s)\n                ps.sort_stats('cumulative')\n                ps.print_stats(100)\n                \n                profile_output = s.getvalue()\n                return HttpResponse(\n                    f\"\u003Cpre>{profile_output}\u003C/pre>\",\n                    content_type='text/html'\n                )\n            \n            # Log slow requests\n            if duration > 1.0:\n                logger.warning(\n                    f'Slow request: {request.path} '\n                    f'took {duration:.3f}s with {query_count} queries'\n                )\n        \n        return response\n",[1128,5414,5415,5422,5428,5434,5440,5454,5474,5488,5492,5506,5515,5519,5536,5541,5555,5574,5615,5620,5624,5629,5669,5687,5701,5719,5733,5737,5759,5780,5785,5800,5828,5832,5837,5850,5869,5897,5908,5929,5963,5968,5975,5984,5992,5996,6001,6036,6063,6095,6099,6104,6124,6139,6144,6159,6190,6209,6223,6227,6242,6251,6268,6281,6285,6289,6294,6309,6321,6342,6369,6373,6377],{"__ignoreMap":1126},[1131,5416,5417,5419],{"class":1133,"line":1134},[1131,5418,2910],{"class":1673},[1131,5420,5421],{"class":1330}," time\n",[1131,5423,5424,5426],{"class":1133,"line":1141},[1131,5425,2910],{"class":1673},[1131,5427,4532],{"class":1330},[1131,5429,5430,5432],{"class":1133,"line":1155},[1131,5431,2910],{"class":1673},[1131,5433,4539],{"class":1330},[1131,5435,5436,5438],{"class":1133,"line":1161},[1131,5437,2910],{"class":1673},[1131,5439,4546],{"class":1330},[1131,5441,5442,5444,5446,5448,5450,5452],{"class":1133,"line":1178},[1131,5443,2894],{"class":1673},[1131,5445,3795],{"class":1330},[1131,5447,1333],{"class":1148},[1131,5449,3821],{"class":1330},[1131,5451,2910],{"class":1673},[1131,5453,3826],{"class":1330},[1131,5455,5456,5458,5460,5462,5464,5466,5469,5471],{"class":1133,"line":1184},[1131,5457,2894],{"class":1673},[1131,5459,3795],{"class":1330},[1131,5461,1333],{"class":1148},[1131,5463,4573],{"class":1330},[1131,5465,1333],{"class":1148},[1131,5467,5468],{"class":1330},"deprecation ",[1131,5470,2910],{"class":1673},[1131,5472,5473],{"class":1330}," MiddlewareMixin\n",[1131,5475,5476,5478,5480,5482,5484,5486],{"class":1133,"line":1191},[1131,5477,2894],{"class":1673},[1131,5479,3795],{"class":1330},[1131,5481,1333],{"class":1148},[1131,5483,4557],{"class":1330},[1131,5485,2910],{"class":1673},[1131,5487,4562],{"class":1330},[1131,5489,5490],{"class":1133,"line":1201},[1131,5491,1188],{"emptyLinePlaceholder":1187},[1131,5493,5494,5496,5499,5501,5504],{"class":1133,"line":1213},[1131,5495,3299],{"class":1313},[1131,5497,5498],{"class":3302}," ProfilingMiddleware",[1131,5500,1594],{"class":1148},[1131,5502,5503],{"class":3308},"MiddlewareMixin",[1131,5505,1600],{"class":1148},[1131,5507,5508,5510,5513],{"class":1133,"line":1219},[1131,5509,1606],{"class":1605},[1131,5511,5512],{"class":1609},"Comprehensive profiling middleware",[1131,5514,1613],{"class":1605},[1131,5516,5517],{"class":1133,"line":1224},[1131,5518,1653],{"class":1330},[1131,5520,5521,5523,5526,5528,5530,5532,5534],{"class":1133,"line":1229},[1131,5522,3375],{"class":1313},[1131,5524,5525],{"class":1590}," process_request",[1131,5527,1594],{"class":1148},[1131,5529,3384],{"class":3383},[1131,5531,1267],{"class":1148},[1131,5533,1318],{"class":1317},[1131,5535,1600],{"class":1148},[1131,5537,5538],{"class":1133,"line":1235},[1131,5539,5540],{"class":1137},"        # Initialize profiling data\n",[1131,5542,5543,5546,5548,5551,5553],{"class":1133,"line":1245},[1131,5544,5545],{"class":1330},"        request",[1131,5547,1333],{"class":1148},[1131,5549,5550],{"class":1336},"profiling_data",[1131,5552,1149],{"class":1148},[1131,5554,1297],{"class":1148},[1131,5556,5557,5559,5562,5564,5566,5568,5570,5572],{"class":1133,"line":1257},[1131,5558,1877],{"class":1164},[1131,5560,5561],{"class":1168},"start_time",[1131,5563,1172],{"class":1164},[1131,5565,1310],{"class":1148},[1131,5567,3887],{"class":1330},[1131,5569,1333],{"class":1148},[1131,5571,3892],{"class":1639},[1131,5573,3053],{"class":1148},[1131,5575,5576,5578,5581,5583,5585,5588,5590,5593,5595,5597,5599,5602,5604,5606,5608,5611,5613],{"class":1133,"line":1273},[1131,5577,1877],{"class":1164},[1131,5579,5580],{"class":1168},"start_queries",[1131,5582,1172],{"class":1164},[1131,5584,1310],{"class":1148},[1131,5586,5587],{"class":3967}," len",[1131,5589,1594],{"class":1148},[1131,5591,5592],{"class":1639},"connection",[1131,5594,1333],{"class":1148},[1131,5596,4126],{"class":1336},[1131,5598,4129],{"class":1148},[1131,5600,5601],{"class":1673}," if",[1131,5603,3845],{"class":1330},[1131,5605,1333],{"class":1148},[1131,5607,3861],{"class":3850},[1131,5609,5610],{"class":1673}," else",[1131,5612,3116],{"class":1377},[1131,5614,1175],{"class":1148},[1131,5616,5617],{"class":1133,"line":1278},[1131,5618,5619],{"class":1148},"        }\n",[1131,5621,5622],{"class":1133,"line":1283},[1131,5623,1784],{"class":1330},[1131,5625,5626],{"class":1133,"line":1289},[1131,5627,5628],{"class":1137},"        # Start cProfile if requested\n",[1131,5630,5631,5633,5635,5637,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5662,5664,5666],{"class":1133,"line":1300},[1131,5632,4250],{"class":1673},[1131,5634,4160],{"class":1148},[1131,5636,1597],{"class":1330},[1131,5638,1333],{"class":1148},[1131,5640,4670],{"class":3850},[1131,5642,1333],{"class":1148},[1131,5644,2475],{"class":1639},[1131,5646,1594],{"class":1148},[1131,5648,1172],{"class":1164},[1131,5650,2994],{"class":1168},[1131,5652,1172],{"class":1164},[1131,5654,4129],{"class":1148},[1131,5656,4687],{"class":1326},[1131,5658,1996],{"class":1164},[1131,5660,5661],{"class":1168},"cprofile",[1131,5663,1172],{"class":1164},[1131,5665,1327],{"class":1326},[1131,5667,5668],{"class":1330}," \n",[1131,5670,5671,5674,5676,5678,5680,5683,5685],{"class":1133,"line":1347},[1131,5672,5673],{"class":1330},"            request",[1131,5675,1333],{"class":1148},[1131,5677,1337],{"class":1336},[1131,5679,1333],{"class":1148},[1131,5681,5682],{"class":1336},"is_authenticated",[1131,5684,1327],{"class":1326},[1131,5686,5668],{"class":1330},[1131,5688,5689,5691,5693,5695,5697,5699],{"class":1133,"line":1365},[1131,5690,5673],{"class":1330},[1131,5692,1333],{"class":1148},[1131,5694,1337],{"class":1336},[1131,5696,1333],{"class":1148},[1131,5698,1342],{"class":1336},[1131,5700,1600],{"class":1148},[1131,5702,5703,5705,5707,5709,5711,5713,5715,5717],{"class":1133,"line":1383},[1131,5704,5673],{"class":1330},[1131,5706,1333],{"class":1148},[1131,5708,4835],{"class":1336},[1131,5710,1149],{"class":1148},[1131,5712,4722],{"class":1330},[1131,5714,1333],{"class":1148},[1131,5716,4727],{"class":1639},[1131,5718,3873],{"class":1148},[1131,5720,5721,5723,5725,5727,5729,5731],{"class":1133,"line":1389},[1131,5722,5673],{"class":1330},[1131,5724,1333],{"class":1148},[1131,5726,4835],{"class":1336},[1131,5728,1333],{"class":1148},[1131,5730,4749],{"class":1639},[1131,5732,3873],{"class":1148},[1131,5734,5735],{"class":1133,"line":1394},[1131,5736,1653],{"class":1330},[1131,5738,5739,5741,5744,5746,5748,5750,5752,5754,5757],{"class":1133,"line":1400},[1131,5740,3375],{"class":1313},[1131,5742,5743],{"class":1590}," process_response",[1131,5745,1594],{"class":1148},[1131,5747,3384],{"class":3383},[1131,5749,1267],{"class":1148},[1131,5751,1318],{"class":1317},[1131,5753,1267],{"class":1148},[1131,5755,5756],{"class":1317}," response",[1131,5758,1600],{"class":1148},[1131,5760,5761,5763,5766,5768,5770,5772,5774,5776,5778],{"class":1133,"line":1410},[1131,5762,4250],{"class":1673},[1131,5764,5765],{"class":3967}," hasattr",[1131,5767,1594],{"class":1148},[1131,5769,1597],{"class":1639},[1131,5771,1267],{"class":1148},[1131,5773,1996],{"class":1164},[1131,5775,5550],{"class":1168},[1131,5777,1172],{"class":1164},[1131,5779,1600],{"class":1148},[1131,5781,5782],{"class":1133,"line":1422},[1131,5783,5784],{"class":1137},"            # Calculate timing\n",[1131,5786,5787,5790,5792,5794,5796,5798],{"class":1133,"line":1434},[1131,5788,5789],{"class":1330},"            end_time ",[1131,5791,1626],{"class":1148},[1131,5793,3887],{"class":1330},[1131,5795,1333],{"class":1148},[1131,5797,3892],{"class":1639},[1131,5799,3873],{"class":1148},[1131,5801,5802,5805,5807,5810,5812,5814,5816,5818,5820,5822,5824,5826],{"class":1133,"line":1446},[1131,5803,5804],{"class":1330},"            duration ",[1131,5806,1626],{"class":1148},[1131,5808,5809],{"class":1330}," end_time ",[1131,5811,4066],{"class":1326},[1131,5813,1318],{"class":1330},[1131,5815,1333],{"class":1148},[1131,5817,5550],{"class":1336},[1131,5819,2282],{"class":1148},[1131,5821,1172],{"class":1164},[1131,5823,5561],{"class":1168},[1131,5825,1172],{"class":1164},[1131,5827,1181],{"class":1148},[1131,5829,5830],{"class":1133,"line":1458},[1131,5831,4734],{"class":1330},[1131,5833,5834],{"class":1133,"line":1470},[1131,5835,5836],{"class":1137},"            # Calculate query stats\n",[1131,5838,5839,5842,5844,5846,5848],{"class":1133,"line":1482},[1131,5840,5841],{"class":1673},"            if",[1131,5843,3845],{"class":1330},[1131,5845,1333],{"class":1148},[1131,5847,3861],{"class":3850},[1131,5849,1686],{"class":1148},[1131,5851,5852,5855,5857,5859,5861,5863,5865,5867],{"class":1133,"line":1494},[1131,5853,5854],{"class":1330},"                end_queries ",[1131,5856,1626],{"class":1148},[1131,5858,5587],{"class":3967},[1131,5860,1594],{"class":1148},[1131,5862,5592],{"class":1639},[1131,5864,1333],{"class":1148},[1131,5866,4126],{"class":1336},[1131,5868,1761],{"class":1148},[1131,5870,5871,5874,5876,5879,5881,5883,5885,5887,5889,5891,5893,5895],{"class":1133,"line":1506},[1131,5872,5873],{"class":1330},"                query_count ",[1131,5875,1626],{"class":1148},[1131,5877,5878],{"class":1330}," end_queries ",[1131,5880,4066],{"class":1326},[1131,5882,1318],{"class":1330},[1131,5884,1333],{"class":1148},[1131,5886,5550],{"class":1336},[1131,5888,2282],{"class":1148},[1131,5890,1172],{"class":1164},[1131,5892,5580],{"class":1168},[1131,5894,1172],{"class":1164},[1131,5896,1181],{"class":1148},[1131,5898,5899,5902,5904,5906],{"class":1133,"line":1518},[1131,5900,5901],{"class":1330},"                query_time ",[1131,5903,1626],{"class":1148},[1131,5905,3968],{"class":3967},[1131,5907,1738],{"class":1148},[1131,5909,5910,5913,5915,5917,5919,5921,5923,5925,5927],{"class":1133,"line":1530},[1131,5911,5912],{"class":1933},"                    float",[1131,5914,1594],{"class":1148},[1131,5916,3978],{"class":1639},[1131,5918,2282],{"class":1148},[1131,5920,1172],{"class":1164},[1131,5922,3892],{"class":1168},[1131,5924,1172],{"class":1164},[1131,5926,3989],{"class":1148},[1131,5928,5668],{"class":1639},[1131,5930,5931,5934,5936,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960],{"class":1133,"line":1542},[1131,5932,5933],{"class":1673},"                    for",[1131,5935,3994],{"class":1639},[1131,5937,1680],{"class":1673},[1131,5939,3805],{"class":1639},[1131,5941,1333],{"class":1148},[1131,5943,4126],{"class":1336},[1131,5945,2282],{"class":1148},[1131,5947,1597],{"class":1336},[1131,5949,1333],{"class":1148},[1131,5951,5550],{"class":1336},[1131,5953,2282],{"class":1148},[1131,5955,1172],{"class":1164},[1131,5957,5580],{"class":1168},[1131,5959,1172],{"class":1164},[1131,5961,5962],{"class":1148},"]:]\n",[1131,5964,5965],{"class":1133,"line":1554},[1131,5966,5967],{"class":1148},"                )\n",[1131,5969,5970,5973],{"class":1133,"line":1566},[1131,5971,5972],{"class":1673},"            else",[1131,5974,1686],{"class":1148},[1131,5976,5977,5979,5981],{"class":1133,"line":2059},[1131,5978,5873],{"class":1330},[1131,5980,1626],{"class":1148},[1131,5982,5983],{"class":1377}," 0\n",[1131,5985,5986,5988,5990],{"class":1133,"line":2065},[1131,5987,5901],{"class":1330},[1131,5989,1626],{"class":1148},[1131,5991,5983],{"class":1377},[1131,5993,5994],{"class":1133,"line":2100},[1131,5995,4734],{"class":1330},[1131,5997,5998],{"class":1133,"line":2110},[1131,5999,6000],{"class":1137},"            # Add performance headers\n",[1131,6002,6003,6006,6008,6010,6013,6015,6017,6019,6022,6024,6026,6029,6032,6034],{"class":1133,"line":2124},[1131,6004,6005],{"class":1330},"            response",[1131,6007,2282],{"class":1148},[1131,6009,1172],{"class":1164},[1131,6011,6012],{"class":1168},"X-Response-Time",[1131,6014,1172],{"class":1164},[1131,6016,1776],{"class":1148},[1131,6018,1149],{"class":1148},[1131,6020,6021],{"class":1313}," f",[1131,6023,1172],{"class":1168},[1131,6025,4030],{"class":4029},[1131,6027,6028],{"class":1330},"duration",[1131,6030,6031],{"class":1313},":.3f",[1131,6033,4041],{"class":4029},[1131,6035,2107],{"class":1168},[1131,6037,6038,6040,6042,6044,6047,6049,6051,6053,6056,6058,6061],{"class":1133,"line":2129},[1131,6039,6005],{"class":1330},[1131,6041,2282],{"class":1148},[1131,6043,1172],{"class":1164},[1131,6045,6046],{"class":1168},"X-DB-Queries",[1131,6048,1172],{"class":1164},[1131,6050,1776],{"class":1148},[1131,6052,1149],{"class":1148},[1131,6054,6055],{"class":1933}," str",[1131,6057,1594],{"class":1148},[1131,6059,6060],{"class":1639},"query_count",[1131,6062,1761],{"class":1148},[1131,6064,6065,6067,6069,6071,6074,6076,6078,6080,6082,6084,6086,6089,6091,6093],{"class":1133,"line":2135},[1131,6066,6005],{"class":1330},[1131,6068,2282],{"class":1148},[1131,6070,1172],{"class":1164},[1131,6072,6073],{"class":1168},"X-DB-Time",[1131,6075,1172],{"class":1164},[1131,6077,1776],{"class":1148},[1131,6079,1149],{"class":1148},[1131,6081,6021],{"class":1313},[1131,6083,1172],{"class":1168},[1131,6085,4030],{"class":4029},[1131,6087,6088],{"class":1330},"query_time",[1131,6090,6031],{"class":1313},[1131,6092,4041],{"class":4029},[1131,6094,2107],{"class":1168},[1131,6096,6097],{"class":1133,"line":2151},[1131,6098,4734],{"class":1330},[1131,6100,6101],{"class":1133,"line":2172},[1131,6102,6103],{"class":1137},"            # Handle cProfile output\n",[1131,6105,6106,6108,6110,6112,6114,6116,6118,6120,6122],{"class":1133,"line":2193},[1131,6107,5841],{"class":1673},[1131,6109,5765],{"class":3967},[1131,6111,1594],{"class":1148},[1131,6113,1597],{"class":1639},[1131,6115,1267],{"class":1148},[1131,6117,1996],{"class":1164},[1131,6119,4835],{"class":1168},[1131,6121,1172],{"class":1164},[1131,6123,1600],{"class":1148},[1131,6125,6126,6129,6131,6133,6135,6137],{"class":1133,"line":2199},[1131,6127,6128],{"class":1330},"                request",[1131,6130,1333],{"class":1148},[1131,6132,4835],{"class":1336},[1131,6134,1333],{"class":1148},[1131,6136,4787],{"class":1639},[1131,6138,3873],{"class":1148},[1131,6140,6141],{"class":1133,"line":2204},[1131,6142,6143],{"class":1330},"                \n",[1131,6145,6146,6149,6151,6153,6155,6157],{"class":1133,"line":2210},[1131,6147,6148],{"class":1330},"                s ",[1131,6150,1626],{"class":1148},[1131,6152,4808],{"class":1330},[1131,6154,1333],{"class":1148},[1131,6156,4813],{"class":1639},[1131,6158,3873],{"class":1148},[1131,6160,6161,6164,6166,6168,6170,6172,6174,6176,6178,6180,6182,6184,6186,6188],{"class":1133,"line":2240},[1131,6162,6163],{"class":1330},"                ps ",[1131,6165,1626],{"class":1148},[1131,6167,4825],{"class":1330},[1131,6169,1333],{"class":1148},[1131,6171,4830],{"class":1639},[1131,6173,1594],{"class":1148},[1131,6175,1597],{"class":1639},[1131,6177,1333],{"class":1148},[1131,6179,4835],{"class":1336},[1131,6181,1267],{"class":1148},[1131,6183,4840],{"class":1743},[1131,6185,1626],{"class":1148},[1131,6187,4845],{"class":1639},[1131,6189,1761],{"class":1148},[1131,6191,6192,6195,6197,6199,6201,6203,6205,6207],{"class":1133,"line":2251},[1131,6193,6194],{"class":1330},"                ps",[1131,6196,1333],{"class":1148},[1131,6198,4857],{"class":1639},[1131,6200,1594],{"class":1148},[1131,6202,1172],{"class":1164},[1131,6204,4864],{"class":1168},[1131,6206,1172],{"class":1164},[1131,6208,1761],{"class":1148},[1131,6210,6211,6213,6215,6217,6219,6221],{"class":1133,"line":2256},[1131,6212,6194],{"class":1330},[1131,6214,1333],{"class":1148},[1131,6216,4877],{"class":1639},[1131,6218,1594],{"class":1148},[1131,6220,4400],{"class":1377},[1131,6222,1761],{"class":1148},[1131,6224,6225],{"class":1133,"line":2276},[1131,6226,6143],{"class":1330},[1131,6228,6229,6232,6234,6236,6238,6240],{"class":1133,"line":2295},[1131,6230,6231],{"class":1330},"                profile_output ",[1131,6233,1626],{"class":1148},[1131,6235,4905],{"class":1330},[1131,6237,1333],{"class":1148},[1131,6239,4910],{"class":1639},[1131,6241,3873],{"class":1148},[1131,6243,6244,6247,6249],{"class":1133,"line":2319},[1131,6245,6246],{"class":1673},"                return",[1131,6248,4920],{"class":1639},[1131,6250,1738],{"class":1148},[1131,6252,6253,6256,6258,6260,6262,6264,6266],{"class":1133,"line":2356},[1131,6254,6255],{"class":1313},"                    f",[1131,6257,4930],{"class":1168},[1131,6259,4030],{"class":4029},[1131,6261,4935],{"class":1639},[1131,6263,4041],{"class":4029},[1131,6265,4940],{"class":1168},[1131,6267,1175],{"class":1148},[1131,6269,6270,6273,6275,6277,6279],{"class":1133,"line":2362},[1131,6271,6272],{"class":1743},"                    content_type",[1131,6274,1626],{"class":1148},[1131,6276,1172],{"class":1164},[1131,6278,4954],{"class":1168},[1131,6280,2107],{"class":1164},[1131,6282,6283],{"class":1133,"line":2367},[1131,6284,5967],{"class":1148},[1131,6286,6287],{"class":1133,"line":2373},[1131,6288,4734],{"class":1330},[1131,6290,6291],{"class":1133,"line":2382},[1131,6292,6293],{"class":1137},"            # Log slow requests\n",[1131,6295,6296,6298,6301,6304,6307],{"class":1133,"line":2395},[1131,6297,5841],{"class":1673},[1131,6299,6300],{"class":1330}," duration ",[1131,6302,6303],{"class":1326},">",[1131,6305,6306],{"class":1377}," 1.0",[1131,6308,1686],{"class":1148},[1131,6310,6311,6314,6316,6319],{"class":1133,"line":2406},[1131,6312,6313],{"class":1330},"                logger",[1131,6315,1333],{"class":1148},[1131,6317,6318],{"class":1639},"warning",[1131,6320,1738],{"class":1148},[1131,6322,6323,6325,6328,6330,6332,6334,6337,6339],{"class":1133,"line":2421},[1131,6324,6255],{"class":1313},[1131,6326,6327],{"class":1168},"'Slow request: ",[1131,6329,4030],{"class":4029},[1131,6331,1597],{"class":1639},[1131,6333,1333],{"class":1148},[1131,6335,6336],{"class":1336},"path",[1131,6338,4041],{"class":4029},[1131,6340,6341],{"class":1168}," '\n",[1131,6343,6344,6346,6349,6351,6353,6355,6357,6360,6362,6364,6366],{"class":1133,"line":2440},[1131,6345,6255],{"class":1313},[1131,6347,6348],{"class":1168},"'took ",[1131,6350,4030],{"class":4029},[1131,6352,6028],{"class":1639},[1131,6354,6031],{"class":1313},[1131,6356,4041],{"class":4029},[1131,6358,6359],{"class":1168},"s with ",[1131,6361,4030],{"class":4029},[1131,6363,6060],{"class":1639},[1131,6365,4041],{"class":4029},[1131,6367,6368],{"class":1168}," queries'\n",[1131,6370,6371],{"class":1133,"line":2459},[1131,6372,5967],{"class":1148},[1131,6374,6375],{"class":1133,"line":2491},[1131,6376,1784],{"class":1330},[1131,6378,6379,6381],{"class":1133,"line":2496},[1131,6380,3401],{"class":1673},[1131,6382,6383],{"class":1330}," response\n",[1030,6385,6387],{"id":6386},"database-query-analysis","Database Query Analysis",[1038,6389,6391],{"id":6390},"query-performance-analysis","Query Performance Analysis",[1121,6393,6395],{"className":1123,"code":6394,"language":1125,"meta":1126,"style":1126},"from django.db import connection\nfrom django.core.management.base import BaseCommand\nimport time\n\nclass QueryAnalyzer:\n    \"\"\"Analyze database query performance\"\"\"\n    \n    def __init__(self):\n        self.reset_stats()\n    \n    def reset_stats(self):\n        \"\"\"Reset query statistics\"\"\"\n        self.queries = []\n        self.start_time = time.time()\n        self.start_query_count = len(connection.queries)\n    \n    def analyze_queries(self):\n        \"\"\"Analyze executed queries\"\"\"\n        end_time = time.time()\n        current_queries = connection.queries[self.start_query_count:]\n        \n        analysis = {\n            'total_time': end_time - self.start_time,\n            'query_count': len(current_queries),\n            'total_db_time': sum(float(q['time']) for q in current_queries),\n            'slow_queries': [],\n            'duplicate_queries': {},\n            'n_plus_one_candidates': [],\n        }\n        \n        # Identify slow queries\n        for query in current_queries:\n            if float(query['time']) > 0.01:  # Slower than 10ms\n                analysis['slow_queries'].append({\n                    'time': float(query['time']),\n                    'sql': query['sql'][:200] + '...' if len(query['sql']) > 200 else query['sql']\n                })\n        \n        # Identify duplicate queries\n        for query in current_queries:\n            sql = query['sql']\n            if sql in analysis['duplicate_queries']:\n                analysis['duplicate_queries'][sql] += 1\n            else:\n                analysis['duplicate_queries'][sql] = 1\n        \n        # Remove non-duplicates\n        analysis['duplicate_queries'] = {\n            sql: count for sql, count in analysis['duplicate_queries'].items()\n            if count > 1\n        }\n        \n        # Identify potential N+1 queries\n        similar_queries = {}\n        for query in current_queries:\n            # Normalize query by removing specific IDs\n            normalized = self._normalize_query(query['sql'])\n            if normalized in similar_queries:\n                similar_queries[normalized].append(query)\n            else:\n                similar_queries[normalized] = [query]\n        \n        for normalized, queries in similar_queries.items():\n            if len(queries) > 5:  # More than 5 similar queries\n                analysis['n_plus_one_candidates'].append({\n                    'pattern': normalized,\n                    'count': len(queries),\n                    'example': queries[0]['sql'][:200]\n                })\n        \n        return analysis\n    \n    def _normalize_query(self, sql):\n        \"\"\"Normalize SQL query for pattern matching\"\"\"\n        import re\n        # Replace numbers with placeholder\n        normalized = re.sub(r'\\b\\d+\\b', 'N', sql)\n        # Replace quoted strings with placeholder\n        normalized = re.sub(r\"'[^']*'\", \"'STRING'\", normalized)\n        return normalized\n    \n    def print_analysis(self, analysis):\n        \"\"\"Print query analysis results\"\"\"\n        print(f\"\\n=== Query Performance Analysis ===\")\n        print(f\"Total execution time: {analysis['total_time']:.3f}s\")\n        print(f\"Database time: {analysis['total_db_time']:.3f}s\")\n        print(f\"Query count: {analysis['query_count']}\")\n        print(f\"DB percentage: {(analysis['total_db_time'] / analysis['total_time']) * 100:.1f}%\")\n        \n        if analysis['slow_queries']:\n            print(f\"\\n--- Slow Queries (>{10}ms) ---\")\n            for i, query in enumerate(analysis['slow_queries'][:5]):\n                print(f\"{i+1}. {query['time']:.3f}s: {query['sql']}\")\n        \n        if analysis['duplicate_queries']:\n            print(f\"\\n--- Duplicate Queries ---\")\n            for sql, count in list(analysis['duplicate_queries'].items())[:5]:\n                print(f\"{count}x: {sql[:100]}...\")\n        \n        if analysis['n_plus_one_candidates']:\n            print(f\"\\n--- Potential N+1 Queries ---\")\n            for candidate in analysis['n_plus_one_candidates'][:3]:\n                print(f\"{candidate['count']}x similar: {candidate['example'][:100]}...\")\n\n# Usage in views\ndef analyze_view_performance(request):\n    \"\"\"Example view with query analysis\"\"\"\n    analyzer = QueryAnalyzer()\n    \n    # Your view logic here\n    products = Product.objects.all()[:50]\n    \n    # This will trigger N+1 queries\n    for product in products:\n        print(product.category.name)  # Query per product\n    \n    # Analyze the queries\n    analysis = analyzer.analyze_queries()\n    analyzer.print_analysis(analysis)\n    \n    return render(request, 'products.html', {'products': products})\n",[1128,6396,6397,6412,6438,6444,6448,6457,6466,6470,6483,6495,6499,6512,6521,6533,6551,6574,6578,6591,6600,6614,6638,6642,6651,6674,6693,6735,6748,6762,6775,6779,6783,6788,6801,6830,6850,6878,6953,6958,6962,6967,6979,6998,7021,7046,7052,7074,7078,7083,7102,7140,7150,7154,7158,7163,7172,7184,7189,7218,7232,7252,7258,7276,7280,7301,7323,7341,7356,7374,7406,7410,7414,7421,7425,7442,7451,7459,7464,7513,7518,7572,7579,7583,7600,7609,7626,7660,7692,7722,7776,7780,7796,7823,7855,7919,7923,7939,7956,7993,8028,8032,8048,8065,8091,8145,8149,8154,8167,8176,8187,8192,8198,8221,8226,8232,8245,8266,8271,8277,8295,8312,8317],{"__ignoreMap":1126},[1131,6398,6399,6401,6403,6405,6407,6409],{"class":1133,"line":1134},[1131,6400,2894],{"class":1673},[1131,6402,3795],{"class":1330},[1131,6404,1333],{"class":1148},[1131,6406,3800],{"class":1330},[1131,6408,2910],{"class":1673},[1131,6410,6411],{"class":1330}," connection\n",[1131,6413,6414,6416,6418,6420,6423,6425,6428,6430,6433,6435],{"class":1133,"line":1141},[1131,6415,2894],{"class":1673},[1131,6417,3795],{"class":1330},[1131,6419,1333],{"class":1148},[1131,6421,6422],{"class":1330},"core",[1131,6424,1333],{"class":1148},[1131,6426,6427],{"class":1330},"management",[1131,6429,1333],{"class":1148},[1131,6431,6432],{"class":1330},"base ",[1131,6434,2910],{"class":1673},[1131,6436,6437],{"class":1330}," BaseCommand\n",[1131,6439,6440,6442],{"class":1133,"line":1155},[1131,6441,2910],{"class":1673},[1131,6443,5421],{"class":1330},[1131,6445,6446],{"class":1133,"line":1161},[1131,6447,1188],{"emptyLinePlaceholder":1187},[1131,6449,6450,6452,6455],{"class":1133,"line":1178},[1131,6451,3299],{"class":1313},[1131,6453,6454],{"class":3302}," QueryAnalyzer",[1131,6456,1686],{"class":1148},[1131,6458,6459,6461,6464],{"class":1133,"line":1184},[1131,6460,1606],{"class":1605},[1131,6462,6463],{"class":1609},"Analyze database query performance",[1131,6465,1613],{"class":1605},[1131,6467,6468],{"class":1133,"line":1191},[1131,6469,1653],{"class":1330},[1131,6471,6472,6474,6477,6479,6481],{"class":1133,"line":1201},[1131,6473,3375],{"class":1313},[1131,6475,6476],{"class":3967}," __init__",[1131,6478,1594],{"class":1148},[1131,6480,3384],{"class":3383},[1131,6482,1600],{"class":1148},[1131,6484,6485,6488,6490,6493],{"class":1133,"line":1213},[1131,6486,6487],{"class":1144},"        self",[1131,6489,1333],{"class":1148},[1131,6491,6492],{"class":1639},"reset_stats",[1131,6494,3873],{"class":1148},[1131,6496,6497],{"class":1133,"line":1219},[1131,6498,1653],{"class":1330},[1131,6500,6501,6503,6506,6508,6510],{"class":1133,"line":1224},[1131,6502,3375],{"class":1313},[1131,6504,6505],{"class":1590}," reset_stats",[1131,6507,1594],{"class":1148},[1131,6509,3384],{"class":3383},[1131,6511,1600],{"class":1148},[1131,6513,6514,6516,6519],{"class":1133,"line":1229},[1131,6515,3391],{"class":1605},[1131,6517,6518],{"class":1609},"Reset query statistics",[1131,6520,1613],{"class":1605},[1131,6522,6523,6525,6527,6529,6531],{"class":1133,"line":1235},[1131,6524,6487],{"class":1144},[1131,6526,1333],{"class":1148},[1131,6528,4126],{"class":1336},[1131,6530,1149],{"class":1148},[1131,6532,1668],{"class":1148},[1131,6534,6535,6537,6539,6541,6543,6545,6547,6549],{"class":1133,"line":1245},[1131,6536,6487],{"class":1144},[1131,6538,1333],{"class":1148},[1131,6540,5561],{"class":1336},[1131,6542,1149],{"class":1148},[1131,6544,3887],{"class":1330},[1131,6546,1333],{"class":1148},[1131,6548,3892],{"class":1639},[1131,6550,3873],{"class":1148},[1131,6552,6553,6555,6557,6560,6562,6564,6566,6568,6570,6572],{"class":1133,"line":1257},[1131,6554,6487],{"class":1144},[1131,6556,1333],{"class":1148},[1131,6558,6559],{"class":1336},"start_query_count",[1131,6561,1149],{"class":1148},[1131,6563,5587],{"class":3967},[1131,6565,1594],{"class":1148},[1131,6567,5592],{"class":1639},[1131,6569,1333],{"class":1148},[1131,6571,4126],{"class":1336},[1131,6573,1761],{"class":1148},[1131,6575,6576],{"class":1133,"line":1273},[1131,6577,1653],{"class":1330},[1131,6579,6580,6582,6585,6587,6589],{"class":1133,"line":1278},[1131,6581,3375],{"class":1313},[1131,6583,6584],{"class":1590}," analyze_queries",[1131,6586,1594],{"class":1148},[1131,6588,3384],{"class":3383},[1131,6590,1600],{"class":1148},[1131,6592,6593,6595,6598],{"class":1133,"line":1283},[1131,6594,3391],{"class":1605},[1131,6596,6597],{"class":1609},"Analyze executed queries",[1131,6599,1613],{"class":1605},[1131,6601,6602,6604,6606,6608,6610,6612],{"class":1133,"line":1289},[1131,6603,3923],{"class":1330},[1131,6605,1626],{"class":1148},[1131,6607,3887],{"class":1330},[1131,6609,1333],{"class":1148},[1131,6611,3892],{"class":1639},[1131,6613,3873],{"class":1148},[1131,6615,6616,6619,6621,6623,6625,6627,6629,6631,6633,6635],{"class":1133,"line":1300},[1131,6617,6618],{"class":1330},"        current_queries ",[1131,6620,1626],{"class":1148},[1131,6622,3805],{"class":1330},[1131,6624,1333],{"class":1148},[1131,6626,4126],{"class":1336},[1131,6628,2282],{"class":1148},[1131,6630,3384],{"class":1144},[1131,6632,1333],{"class":1148},[1131,6634,6559],{"class":1336},[1131,6636,6637],{"class":1148},":]\n",[1131,6639,6640],{"class":1133,"line":1347},[1131,6641,1784],{"class":1330},[1131,6643,6644,6647,6649],{"class":1133,"line":1365},[1131,6645,6646],{"class":1330},"        analysis ",[1131,6648,1626],{"class":1148},[1131,6650,1297],{"class":1148},[1131,6652,6653,6655,6657,6659,6661,6663,6665,6668,6670,6672],{"class":1133,"line":1383},[1131,6654,1877],{"class":1164},[1131,6656,4096],{"class":1168},[1131,6658,1172],{"class":1164},[1131,6660,1310],{"class":1148},[1131,6662,5809],{"class":1330},[1131,6664,4066],{"class":1326},[1131,6666,6667],{"class":1144}," self",[1131,6669,1333],{"class":1148},[1131,6671,5561],{"class":1336},[1131,6673,1175],{"class":1148},[1131,6675,6676,6678,6680,6682,6684,6686,6688,6691],{"class":1133,"line":1389},[1131,6677,1877],{"class":1164},[1131,6679,6060],{"class":1168},[1131,6681,1172],{"class":1164},[1131,6683,1310],{"class":1148},[1131,6685,5587],{"class":3967},[1131,6687,1594],{"class":1148},[1131,6689,6690],{"class":1639},"current_queries",[1131,6692,1941],{"class":1148},[1131,6694,6695,6697,6700,6702,6704,6706,6708,6710,6712,6714,6716,6718,6720,6722,6724,6726,6728,6730,6733],{"class":1133,"line":1394},[1131,6696,1877],{"class":1164},[1131,6698,6699],{"class":1168},"total_db_time",[1131,6701,1172],{"class":1164},[1131,6703,1310],{"class":1148},[1131,6705,3968],{"class":3967},[1131,6707,1594],{"class":1148},[1131,6709,3973],{"class":1933},[1131,6711,1594],{"class":1148},[1131,6713,3978],{"class":1639},[1131,6715,2282],{"class":1148},[1131,6717,1172],{"class":1164},[1131,6719,3892],{"class":1168},[1131,6721,1172],{"class":1164},[1131,6723,3989],{"class":1148},[1131,6725,2228],{"class":1673},[1131,6727,3994],{"class":1639},[1131,6729,1680],{"class":1673},[1131,6731,6732],{"class":1639}," current_queries",[1131,6734,1941],{"class":1148},[1131,6736,6737,6739,6741,6743,6745],{"class":1133,"line":1400},[1131,6738,1877],{"class":1164},[1131,6740,4281],{"class":1168},[1131,6742,1172],{"class":1164},[1131,6744,1310],{"class":1148},[1131,6746,6747],{"class":1148}," [],\n",[1131,6749,6750,6752,6755,6757,6759],{"class":1133,"line":1410},[1131,6751,1877],{"class":1164},[1131,6753,6754],{"class":1168},"duplicate_queries",[1131,6756,1172],{"class":1164},[1131,6758,1310],{"class":1148},[1131,6760,6761],{"class":1148}," {},\n",[1131,6763,6764,6766,6769,6771,6773],{"class":1133,"line":1422},[1131,6765,1877],{"class":1164},[1131,6767,6768],{"class":1168},"n_plus_one_candidates",[1131,6770,1172],{"class":1164},[1131,6772,1310],{"class":1148},[1131,6774,6747],{"class":1148},[1131,6776,6777],{"class":1133,"line":1434},[1131,6778,5619],{"class":1148},[1131,6780,6781],{"class":1133,"line":1446},[1131,6782,1784],{"class":1330},[1131,6784,6785],{"class":1133,"line":1458},[1131,6786,6787],{"class":1137},"        # Identify slow queries\n",[1131,6789,6790,6793,6795,6797,6799],{"class":1133,"line":1470},[1131,6791,6792],{"class":1673},"        for",[1131,6794,4303],{"class":1330},[1131,6796,1680],{"class":1673},[1131,6798,6732],{"class":1330},[1131,6800,1686],{"class":1148},[1131,6802,6803,6805,6807,6809,6811,6813,6815,6817,6819,6821,6823,6825,6827],{"class":1133,"line":1482},[1131,6804,5841],{"class":1673},[1131,6806,4222],{"class":1933},[1131,6808,1594],{"class":1148},[1131,6810,4353],{"class":1639},[1131,6812,2282],{"class":1148},[1131,6814,1172],{"class":1164},[1131,6816,3892],{"class":1168},[1131,6818,1172],{"class":1164},[1131,6820,3989],{"class":1148},[1131,6822,4239],{"class":1326},[1131,6824,4242],{"class":1377},[1131,6826,1310],{"class":1148},[1131,6828,6829],{"class":1137},"  # Slower than 10ms\n",[1131,6831,6832,6835,6837,6839,6841,6843,6846,6848],{"class":1133,"line":1494},[1131,6833,6834],{"class":1330},"                analysis",[1131,6836,2282],{"class":1148},[1131,6838,1172],{"class":1164},[1131,6840,4281],{"class":1168},[1131,6842,1172],{"class":1164},[1131,6844,6845],{"class":1148},"].",[1131,6847,1869],{"class":1639},[1131,6849,1872],{"class":1148},[1131,6851,6852,6855,6857,6859,6861,6863,6865,6867,6869,6871,6873,6875],{"class":1133,"line":1506},[1131,6853,6854],{"class":1164},"                    '",[1131,6856,3892],{"class":1168},[1131,6858,1172],{"class":1164},[1131,6860,1310],{"class":1148},[1131,6862,4222],{"class":1933},[1131,6864,1594],{"class":1148},[1131,6866,4353],{"class":1639},[1131,6868,2282],{"class":1148},[1131,6870,1172],{"class":1164},[1131,6872,3892],{"class":1168},[1131,6874,1172],{"class":1164},[1131,6876,6877],{"class":1148},"]),\n",[1131,6879,6880,6882,6884,6886,6888,6891,6893,6895,6897,6899,6901,6904,6906,6909,6911,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6939,6941,6943,6945,6947,6949,6951],{"class":1133,"line":1518},[1131,6881,6854],{"class":1164},[1131,6883,4392],{"class":1168},[1131,6885,1172],{"class":1164},[1131,6887,1310],{"class":1148},[1131,6889,6890],{"class":1639}," query",[1131,6892,2282],{"class":1148},[1131,6894,1172],{"class":1164},[1131,6896,4392],{"class":1168},[1131,6898,1172],{"class":1164},[1131,6900,4397],{"class":1148},[1131,6902,6903],{"class":1377},"200",[1131,6905,1776],{"class":1148},[1131,6907,6908],{"class":1326}," +",[1131,6910,1996],{"class":1164},[1131,6912,6913],{"class":1168},"...",[1131,6915,1172],{"class":1164},[1131,6917,5601],{"class":1673},[1131,6919,5587],{"class":3967},[1131,6921,1594],{"class":1148},[1131,6923,4353],{"class":1639},[1131,6925,2282],{"class":1148},[1131,6927,1172],{"class":1164},[1131,6929,4392],{"class":1168},[1131,6931,1172],{"class":1164},[1131,6933,3989],{"class":1148},[1131,6935,4239],{"class":1326},[1131,6937,6938],{"class":1377}," 200",[1131,6940,5610],{"class":1673},[1131,6942,6890],{"class":1639},[1131,6944,2282],{"class":1148},[1131,6946,1172],{"class":1164},[1131,6948,4392],{"class":1168},[1131,6950,1172],{"class":1164},[1131,6952,1181],{"class":1148},[1131,6954,6955],{"class":1133,"line":1530},[1131,6956,6957],{"class":1148},"                })\n",[1131,6959,6960],{"class":1133,"line":1542},[1131,6961,1784],{"class":1330},[1131,6963,6964],{"class":1133,"line":1554},[1131,6965,6966],{"class":1137},"        # Identify duplicate queries\n",[1131,6968,6969,6971,6973,6975,6977],{"class":1133,"line":1566},[1131,6970,6792],{"class":1673},[1131,6972,4303],{"class":1330},[1131,6974,1680],{"class":1673},[1131,6976,6732],{"class":1330},[1131,6978,1686],{"class":1148},[1131,6980,6981,6984,6986,6988,6990,6992,6994,6996],{"class":1133,"line":2059},[1131,6982,6983],{"class":1330},"            sql ",[1131,6985,1626],{"class":1148},[1131,6987,6890],{"class":1330},[1131,6989,2282],{"class":1148},[1131,6991,1172],{"class":1164},[1131,6993,4392],{"class":1168},[1131,6995,1172],{"class":1164},[1131,6997,1181],{"class":1148},[1131,6999,7000,7002,7005,7007,7010,7012,7014,7016,7018],{"class":1133,"line":2065},[1131,7001,5841],{"class":1673},[1131,7003,7004],{"class":1330}," sql ",[1131,7006,1680],{"class":1326},[1131,7008,7009],{"class":1330}," analysis",[1131,7011,2282],{"class":1148},[1131,7013,1172],{"class":1164},[1131,7015,6754],{"class":1168},[1131,7017,1172],{"class":1164},[1131,7019,7020],{"class":1148},"]:\n",[1131,7022,7023,7025,7027,7029,7031,7033,7036,7038,7040,7043],{"class":1133,"line":2100},[1131,7024,6834],{"class":1330},[1131,7026,2282],{"class":1148},[1131,7028,1172],{"class":1164},[1131,7030,6754],{"class":1168},[1131,7032,1172],{"class":1164},[1131,7034,7035],{"class":1148},"][",[1131,7037,4392],{"class":1330},[1131,7039,1776],{"class":1148},[1131,7041,7042],{"class":1148}," +=",[1131,7044,7045],{"class":1377}," 1\n",[1131,7047,7048,7050],{"class":1133,"line":2110},[1131,7049,5972],{"class":1673},[1131,7051,1686],{"class":1148},[1131,7053,7054,7056,7058,7060,7062,7064,7066,7068,7070,7072],{"class":1133,"line":2124},[1131,7055,6834],{"class":1330},[1131,7057,2282],{"class":1148},[1131,7059,1172],{"class":1164},[1131,7061,6754],{"class":1168},[1131,7063,1172],{"class":1164},[1131,7065,7035],{"class":1148},[1131,7067,4392],{"class":1330},[1131,7069,1776],{"class":1148},[1131,7071,1149],{"class":1148},[1131,7073,7045],{"class":1377},[1131,7075,7076],{"class":1133,"line":2129},[1131,7077,1784],{"class":1330},[1131,7079,7080],{"class":1133,"line":2135},[1131,7081,7082],{"class":1137},"        # Remove non-duplicates\n",[1131,7084,7085,7088,7090,7092,7094,7096,7098,7100],{"class":1133,"line":2151},[1131,7086,7087],{"class":1330},"        analysis",[1131,7089,2282],{"class":1148},[1131,7091,1172],{"class":1164},[1131,7093,6754],{"class":1168},[1131,7095,1172],{"class":1164},[1131,7097,1776],{"class":1148},[1131,7099,1149],{"class":1148},[1131,7101,1297],{"class":1148},[1131,7103,7104,7107,7109,7112,7114,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135,7138],{"class":1133,"line":2172},[1131,7105,7106],{"class":1330},"            sql",[1131,7108,1310],{"class":1148},[1131,7110,7111],{"class":1330}," count ",[1131,7113,4210],{"class":1673},[1131,7115,7116],{"class":1330}," sql",[1131,7118,1267],{"class":1148},[1131,7120,7111],{"class":1330},[1131,7122,1680],{"class":1673},[1131,7124,7009],{"class":1330},[1131,7126,2282],{"class":1148},[1131,7128,1172],{"class":1164},[1131,7130,6754],{"class":1168},[1131,7132,1172],{"class":1164},[1131,7134,6845],{"class":1148},[1131,7136,7137],{"class":1639},"items",[1131,7139,3873],{"class":1148},[1131,7141,7142,7144,7146,7148],{"class":1133,"line":2193},[1131,7143,5841],{"class":1673},[1131,7145,7111],{"class":1330},[1131,7147,6303],{"class":1326},[1131,7149,7045],{"class":1377},[1131,7151,7152],{"class":1133,"line":2199},[1131,7153,5619],{"class":1148},[1131,7155,7156],{"class":1133,"line":2204},[1131,7157,1784],{"class":1330},[1131,7159,7160],{"class":1133,"line":2210},[1131,7161,7162],{"class":1137},"        # Identify potential N+1 queries\n",[1131,7164,7165,7168,7170],{"class":1133,"line":2240},[1131,7166,7167],{"class":1330},"        similar_queries ",[1131,7169,1626],{"class":1148},[1131,7171,2248],{"class":1148},[1131,7173,7174,7176,7178,7180,7182],{"class":1133,"line":2251},[1131,7175,6792],{"class":1673},[1131,7177,4303],{"class":1330},[1131,7179,1680],{"class":1673},[1131,7181,6732],{"class":1330},[1131,7183,1686],{"class":1148},[1131,7185,7186],{"class":1133,"line":2256},[1131,7187,7188],{"class":1137},"            # Normalize query by removing specific IDs\n",[1131,7190,7191,7194,7196,7198,7200,7203,7205,7207,7209,7211,7213,7215],{"class":1133,"line":2276},[1131,7192,7193],{"class":1330},"            normalized ",[1131,7195,1626],{"class":1148},[1131,7197,6667],{"class":1144},[1131,7199,1333],{"class":1148},[1131,7201,7202],{"class":1639},"_normalize_query",[1131,7204,1594],{"class":1148},[1131,7206,4353],{"class":1639},[1131,7208,2282],{"class":1148},[1131,7210,1172],{"class":1164},[1131,7212,4392],{"class":1168},[1131,7214,1172],{"class":1164},[1131,7216,7217],{"class":1148},"])\n",[1131,7219,7220,7222,7225,7227,7230],{"class":1133,"line":2295},[1131,7221,5841],{"class":1673},[1131,7223,7224],{"class":1330}," normalized ",[1131,7226,1680],{"class":1326},[1131,7228,7229],{"class":1330}," similar_queries",[1131,7231,1686],{"class":1148},[1131,7233,7234,7237,7239,7242,7244,7246,7248,7250],{"class":1133,"line":2319},[1131,7235,7236],{"class":1330},"                similar_queries",[1131,7238,2282],{"class":1148},[1131,7240,7241],{"class":1330},"normalized",[1131,7243,6845],{"class":1148},[1131,7245,1869],{"class":1639},[1131,7247,1594],{"class":1148},[1131,7249,4353],{"class":1639},[1131,7251,1761],{"class":1148},[1131,7253,7254,7256],{"class":1133,"line":2356},[1131,7255,5972],{"class":1673},[1131,7257,1686],{"class":1148},[1131,7259,7260,7262,7264,7266,7268,7270,7272,7274],{"class":1133,"line":2362},[1131,7261,7236],{"class":1330},[1131,7263,2282],{"class":1148},[1131,7265,7241],{"class":1330},[1131,7267,1776],{"class":1148},[1131,7269,1149],{"class":1148},[1131,7271,2218],{"class":1148},[1131,7273,4353],{"class":1330},[1131,7275,1181],{"class":1148},[1131,7277,7278],{"class":1133,"line":2367},[1131,7279,1784],{"class":1330},[1131,7281,7282,7284,7287,7289,7291,7293,7295,7297,7299],{"class":1133,"line":2373},[1131,7283,6792],{"class":1673},[1131,7285,7286],{"class":1330}," normalized",[1131,7288,1267],{"class":1148},[1131,7290,4217],{"class":1330},[1131,7292,1680],{"class":1673},[1131,7294,7229],{"class":1330},[1131,7296,1333],{"class":1148},[1131,7298,7137],{"class":1639},[1131,7300,4490],{"class":1148},[1131,7302,7303,7305,7307,7309,7311,7313,7315,7318,7320],{"class":1133,"line":2382},[1131,7304,5841],{"class":1673},[1131,7306,5587],{"class":3967},[1131,7308,1594],{"class":1148},[1131,7310,4126],{"class":1639},[1131,7312,4129],{"class":1148},[1131,7314,4239],{"class":1326},[1131,7316,7317],{"class":1377}," 5",[1131,7319,1310],{"class":1148},[1131,7321,7322],{"class":1137},"  # More than 5 similar queries\n",[1131,7324,7325,7327,7329,7331,7333,7335,7337,7339],{"class":1133,"line":2395},[1131,7326,6834],{"class":1330},[1131,7328,2282],{"class":1148},[1131,7330,1172],{"class":1164},[1131,7332,6768],{"class":1168},[1131,7334,1172],{"class":1164},[1131,7336,6845],{"class":1148},[1131,7338,1869],{"class":1639},[1131,7340,1872],{"class":1148},[1131,7342,7343,7345,7348,7350,7352,7354],{"class":1133,"line":2406},[1131,7344,6854],{"class":1164},[1131,7346,7347],{"class":1168},"pattern",[1131,7349,1172],{"class":1164},[1131,7351,1310],{"class":1148},[1131,7353,7286],{"class":1639},[1131,7355,1175],{"class":1148},[1131,7357,7358,7360,7362,7364,7366,7368,7370,7372],{"class":1133,"line":2421},[1131,7359,6854],{"class":1164},[1131,7361,1711],{"class":1168},[1131,7363,1172],{"class":1164},[1131,7365,1310],{"class":1148},[1131,7367,5587],{"class":3967},[1131,7369,1594],{"class":1148},[1131,7371,4126],{"class":1639},[1131,7373,1941],{"class":1148},[1131,7375,7376,7378,7381,7383,7385,7387,7389,7392,7394,7396,7398,7400,7402,7404],{"class":1133,"line":2440},[1131,7377,6854],{"class":1164},[1131,7379,7380],{"class":1168},"example",[1131,7382,1172],{"class":1164},[1131,7384,1310],{"class":1148},[1131,7386,3999],{"class":1639},[1131,7388,2282],{"class":1148},[1131,7390,7391],{"class":1377},"0",[1131,7393,7035],{"class":1148},[1131,7395,1172],{"class":1164},[1131,7397,4392],{"class":1168},[1131,7399,1172],{"class":1164},[1131,7401,4397],{"class":1148},[1131,7403,6903],{"class":1377},[1131,7405,1181],{"class":1148},[1131,7407,7408],{"class":1133,"line":2459},[1131,7409,6957],{"class":1148},[1131,7411,7412],{"class":1133,"line":2491},[1131,7413,1784],{"class":1330},[1131,7415,7416,7418],{"class":1133,"line":2496},[1131,7417,3401],{"class":1673},[1131,7419,7420],{"class":1330}," analysis\n",[1131,7422,7423],{"class":1133,"line":2501},[1131,7424,1653],{"class":1330},[1131,7426,7427,7429,7432,7434,7436,7438,7440],{"class":1133,"line":2507},[1131,7428,3375],{"class":1313},[1131,7430,7431],{"class":1590}," _normalize_query",[1131,7433,1594],{"class":1148},[1131,7435,3384],{"class":3383},[1131,7437,1267],{"class":1148},[1131,7439,7116],{"class":1317},[1131,7441,1600],{"class":1148},[1131,7443,7444,7446,7449],{"class":1133,"line":2513},[1131,7445,3391],{"class":1605},[1131,7447,7448],{"class":1609},"Normalize SQL query for pattern matching",[1131,7450,1613],{"class":1605},[1131,7452,7453,7456],{"class":1133,"line":2519},[1131,7454,7455],{"class":1673},"        import",[1131,7457,7458],{"class":1330}," re\n",[1131,7460,7461],{"class":1133,"line":2525},[1131,7462,7463],{"class":1137},"        # Replace numbers with placeholder\n",[1131,7465,7466,7469,7471,7474,7476,7479,7481,7484,7486,7490,7493,7496,7498,7500,7502,7505,7507,7509,7511],{"class":1133,"line":2530},[1131,7467,7468],{"class":1330},"        normalized ",[1131,7470,1626],{"class":1148},[1131,7472,7473],{"class":1330}," re",[1131,7475,1333],{"class":1148},[1131,7477,7478],{"class":1639},"sub",[1131,7480,1594],{"class":1148},[1131,7482,7483],{"class":1313},"r",[1131,7485,1172],{"class":1164},[1131,7487,7489],{"class":7488},"sRJPX","\\b\\d",[1131,7491,4340],{"class":7492},"sGuSu",[1131,7494,7495],{"class":7488},"\\b",[1131,7497,1172],{"class":1164},[1131,7499,1267],{"class":1148},[1131,7501,1996],{"class":1164},[1131,7503,7504],{"class":1168},"N",[1131,7506,1172],{"class":1164},[1131,7508,1267],{"class":1148},[1131,7510,7116],{"class":1639},[1131,7512,1761],{"class":1148},[1131,7514,7515],{"class":1133,"line":2553},[1131,7516,7517],{"class":1137},"        # Replace quoted strings with placeholder\n",[1131,7519,7520,7522,7524,7526,7528,7530,7532,7534,7536,7539,7542,7545,7548,7550,7552,7554,7556,7558,7561,7564,7566,7568,7570],{"class":1133,"line":2566},[1131,7521,7468],{"class":1330},[1131,7523,1626],{"class":1148},[1131,7525,7473],{"class":1330},[1131,7527,1333],{"class":1148},[1131,7529,7478],{"class":1639},[1131,7531,1594],{"class":1148},[1131,7533,7483],{"class":1313},[1131,7535,4020],{"class":1164},[1131,7537,1172],{"class":7538},"s27EL",[1131,7540,2282],{"class":7541},"sETVe",[1131,7543,7544],{"class":1326},"^",[1131,7546,1172],{"class":7547},"sz9Cv",[1131,7549,1776],{"class":7541},[1131,7551,3776],{"class":7492},[1131,7553,1172],{"class":7538},[1131,7555,4020],{"class":1164},[1131,7557,1267],{"class":1148},[1131,7559,7560],{"class":1164}," \"",[1131,7562,7563],{"class":1168},"'STRING'",[1131,7565,4020],{"class":1164},[1131,7567,1267],{"class":1148},[1131,7569,7286],{"class":1639},[1131,7571,1761],{"class":1148},[1131,7573,7574,7576],{"class":1133,"line":3959},[1131,7575,3401],{"class":1673},[1131,7577,7578],{"class":1330}," normalized\n",[1131,7580,7581],{"class":1133,"line":4004},[1131,7582,1653],{"class":1330},[1131,7584,7585,7587,7590,7592,7594,7596,7598],{"class":1133,"line":4009},[1131,7586,3375],{"class":1313},[1131,7588,7589],{"class":1590}," print_analysis",[1131,7591,1594],{"class":1148},[1131,7593,3384],{"class":3383},[1131,7595,1267],{"class":1148},[1131,7597,7009],{"class":1317},[1131,7599,1600],{"class":1148},[1131,7601,7602,7604,7607],{"class":1133,"line":4049},[1131,7603,3391],{"class":1605},[1131,7605,7606],{"class":1609},"Print query analysis results",[1131,7608,1613],{"class":1605},[1131,7610,7611,7613,7615,7617,7619,7621,7624],{"class":1133,"line":4082},[1131,7612,4012],{"class":3967},[1131,7614,1594],{"class":1148},[1131,7616,4017],{"class":1313},[1131,7618,4020],{"class":1168},[1131,7620,4023],{"class":1144},[1131,7622,7623],{"class":1168},"=== Query Performance Analysis ===\"",[1131,7625,1761],{"class":1148},[1131,7627,7628,7630,7632,7634,7637,7639,7642,7644,7646,7648,7650,7652,7654,7656,7658],{"class":1133,"line":4107},[1131,7629,4012],{"class":3967},[1131,7631,1594],{"class":1148},[1131,7633,4017],{"class":1313},[1131,7635,7636],{"class":1168},"\"Total execution time: ",[1131,7638,4030],{"class":4029},[1131,7640,7641],{"class":1639},"analysis",[1131,7643,2282],{"class":1148},[1131,7645,1172],{"class":1164},[1131,7647,4096],{"class":1168},[1131,7649,1172],{"class":1164},[1131,7651,1776],{"class":1148},[1131,7653,6031],{"class":1313},[1131,7655,4041],{"class":4029},[1131,7657,4077],{"class":1168},[1131,7659,1761],{"class":1148},[1131,7661,7662,7664,7666,7668,7670,7672,7674,7676,7678,7680,7682,7684,7686,7688,7690],{"class":1133,"line":4138},[1131,7663,4012],{"class":3967},[1131,7665,1594],{"class":1148},[1131,7667,4017],{"class":1313},[1131,7669,4091],{"class":1168},[1131,7671,4030],{"class":4029},[1131,7673,7641],{"class":1639},[1131,7675,2282],{"class":1148},[1131,7677,1172],{"class":1164},[1131,7679,6699],{"class":1168},[1131,7681,1172],{"class":1164},[1131,7683,1776],{"class":1148},[1131,7685,6031],{"class":1313},[1131,7687,4041],{"class":4029},[1131,7689,4077],{"class":1168},[1131,7691,1761],{"class":1148},[1131,7693,7694,7696,7698,7700,7702,7704,7706,7708,7710,7712,7714,7716,7718,7720],{"class":1133,"line":4186},[1131,7695,4012],{"class":3967},[1131,7697,1594],{"class":1148},[1131,7699,4017],{"class":1313},[1131,7701,4116],{"class":1168},[1131,7703,4030],{"class":4029},[1131,7705,7641],{"class":1639},[1131,7707,2282],{"class":1148},[1131,7709,1172],{"class":1164},[1131,7711,6060],{"class":1168},[1131,7713,1172],{"class":1164},[1131,7715,1776],{"class":1148},[1131,7717,4041],{"class":4029},[1131,7719,4020],{"class":1168},[1131,7721,1761],{"class":1148},[1131,7723,7724,7726,7728,7730,7733,7735,7737,7739,7741,7743,7745,7747,7749,7752,7754,7756,7758,7760,7762,7764,7766,7768,7770,7772,7774],{"class":1133,"line":4191},[1131,7725,4012],{"class":3967},[1131,7727,1594],{"class":1148},[1131,7729,4017],{"class":1313},[1131,7731,7732],{"class":1168},"\"DB percentage: ",[1131,7734,4030],{"class":4029},[1131,7736,1594],{"class":1148},[1131,7738,7641],{"class":1639},[1131,7740,2282],{"class":1148},[1131,7742,1172],{"class":1164},[1131,7744,6699],{"class":1168},[1131,7746,1172],{"class":1164},[1131,7748,1776],{"class":1148},[1131,7750,7751],{"class":1326}," /",[1131,7753,7009],{"class":1639},[1131,7755,2282],{"class":1148},[1131,7757,1172],{"class":1164},[1131,7759,4096],{"class":1168},[1131,7761,1172],{"class":1164},[1131,7763,3989],{"class":1148},[1131,7765,2794],{"class":1326},[1131,7767,2824],{"class":1377},[1131,7769,4176],{"class":1313},[1131,7771,4041],{"class":4029},[1131,7773,4181],{"class":1168},[1131,7775,1761],{"class":1148},[1131,7777,7778],{"class":1133,"line":4197},[1131,7779,1784],{"class":1330},[1131,7781,7782,7784,7786,7788,7790,7792,7794],{"class":1133,"line":4247},[1131,7783,4250],{"class":1673},[1131,7785,7009],{"class":1330},[1131,7787,2282],{"class":1148},[1131,7789,1172],{"class":1164},[1131,7791,4281],{"class":1168},[1131,7793,1172],{"class":1164},[1131,7795,7020],{"class":1148},[1131,7797,7798,7800,7802,7804,7806,7808,7811,7813,7816,7818,7821],{"class":1133,"line":4258},[1131,7799,4261],{"class":3967},[1131,7801,1594],{"class":1148},[1131,7803,4017],{"class":1313},[1131,7805,4020],{"class":1168},[1131,7807,4023],{"class":1144},[1131,7809,7810],{"class":1168},"--- Slow Queries (>",[1131,7812,4030],{"class":4029},[1131,7814,7815],{"class":1377},"10",[1131,7817,4041],{"class":4029},[1131,7819,7820],{"class":1168},"ms) ---\"",[1131,7822,1761],{"class":1148},[1131,7824,7825,7827,7829,7831,7833,7835,7837,7839,7841,7843,7845,7847,7849,7851,7853],{"class":1133,"line":4292},[1131,7826,4295],{"class":1673},[1131,7828,4298],{"class":1330},[1131,7830,1267],{"class":1148},[1131,7832,4303],{"class":1330},[1131,7834,1680],{"class":1673},[1131,7836,4308],{"class":3967},[1131,7838,1594],{"class":1148},[1131,7840,7641],{"class":1639},[1131,7842,2282],{"class":1148},[1131,7844,1172],{"class":1164},[1131,7846,4281],{"class":1168},[1131,7848,1172],{"class":1164},[1131,7850,4397],{"class":1148},[1131,7852,1851],{"class":1377},[1131,7854,4320],{"class":1148},[1131,7856,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7878,7880,7882,7884,7886,7888,7890,7892,7894,7896,7899,7901,7903,7905,7907,7909,7911,7913,7915,7917],{"class":1133,"line":4323},[1131,7858,4326],{"class":3967},[1131,7860,1594],{"class":1148},[1131,7862,4017],{"class":1313},[1131,7864,4020],{"class":1168},[1131,7866,4030],{"class":4029},[1131,7868,4337],{"class":1639},[1131,7870,4340],{"class":1326},[1131,7872,4343],{"class":1377},[1131,7874,4041],{"class":4029},[1131,7876,7877],{"class":1168},". ",[1131,7879,4030],{"class":4029},[1131,7881,4353],{"class":1639},[1131,7883,2282],{"class":1148},[1131,7885,1172],{"class":1164},[1131,7887,3892],{"class":1168},[1131,7889,1172],{"class":1164},[1131,7891,1776],{"class":1148},[1131,7893,6031],{"class":1313},[1131,7895,4041],{"class":4029},[1131,7897,7898],{"class":1168},"s: ",[1131,7900,4030],{"class":4029},[1131,7902,4353],{"class":1639},[1131,7904,2282],{"class":1148},[1131,7906,1172],{"class":1164},[1131,7908,4392],{"class":1168},[1131,7910,1172],{"class":1164},[1131,7912,1776],{"class":1148},[1131,7914,4041],{"class":4029},[1131,7916,4020],{"class":1168},[1131,7918,1761],{"class":1148},[1131,7920,7921],{"class":1133,"line":4372},[1131,7922,1784],{"class":1330},[1131,7924,7925,7927,7929,7931,7933,7935,7937],{"class":1133,"line":4412},[1131,7926,4250],{"class":1673},[1131,7928,7009],{"class":1330},[1131,7930,2282],{"class":1148},[1131,7932,1172],{"class":1164},[1131,7934,6754],{"class":1168},[1131,7936,1172],{"class":1164},[1131,7938,7020],{"class":1148},[1131,7940,7941,7943,7945,7947,7949,7951,7954],{"class":1133,"line":4417},[1131,7942,4261],{"class":3967},[1131,7944,1594],{"class":1148},[1131,7946,4017],{"class":1313},[1131,7948,4020],{"class":1168},[1131,7950,4023],{"class":1144},[1131,7952,7953],{"class":1168},"--- Duplicate Queries ---\"",[1131,7955,1761],{"class":1148},[1131,7957,7958,7960,7962,7964,7966,7968,7970,7972,7974,7976,7978,7980,7982,7984,7986,7989,7991],{"class":1133,"line":4423},[1131,7959,4295],{"class":1673},[1131,7961,7116],{"class":1330},[1131,7963,1267],{"class":1148},[1131,7965,7111],{"class":1330},[1131,7967,1680],{"class":1673},[1131,7969,1934],{"class":1933},[1131,7971,1594],{"class":1148},[1131,7973,7641],{"class":1639},[1131,7975,2282],{"class":1148},[1131,7977,1172],{"class":1164},[1131,7979,6754],{"class":1168},[1131,7981,1172],{"class":1164},[1131,7983,6845],{"class":1148},[1131,7985,7137],{"class":1639},[1131,7987,7988],{"class":1148},"())[:",[1131,7990,1851],{"class":1377},[1131,7992,7020],{"class":1148},[1131,7994,7995,7997,7999,8001,8003,8005,8007,8009,8012,8014,8016,8018,8020,8022,8024,8026],{"class":1133,"line":4437},[1131,7996,4326],{"class":3967},[1131,7998,1594],{"class":1148},[1131,8000,4017],{"class":1313},[1131,8002,4020],{"class":1168},[1131,8004,4030],{"class":4029},[1131,8006,1711],{"class":1639},[1131,8008,4041],{"class":4029},[1131,8010,8011],{"class":1168},"x: ",[1131,8013,4030],{"class":4029},[1131,8015,4392],{"class":1639},[1131,8017,4315],{"class":1148},[1131,8019,4400],{"class":1377},[1131,8021,1776],{"class":1148},[1131,8023,4041],{"class":4029},[1131,8025,4407],{"class":1168},[1131,8027,1761],{"class":1148},[1131,8029,8030],{"class":1133,"line":4442},[1131,8031,1784],{"class":1330},[1131,8033,8034,8036,8038,8040,8042,8044,8046],{"class":1133,"line":4450},[1131,8035,4250],{"class":1673},[1131,8037,7009],{"class":1330},[1131,8039,2282],{"class":1148},[1131,8041,1172],{"class":1164},[1131,8043,6768],{"class":1168},[1131,8045,1172],{"class":1164},[1131,8047,7020],{"class":1148},[1131,8049,8050,8052,8054,8056,8058,8060,8063],{"class":1133,"line":4455},[1131,8051,4261],{"class":3967},[1131,8053,1594],{"class":1148},[1131,8055,4017],{"class":1313},[1131,8057,4020],{"class":1168},[1131,8059,4023],{"class":1144},[1131,8061,8062],{"class":1168},"--- Potential N+1 Queries ---\"",[1131,8064,1761],{"class":1148},[1131,8066,8067,8069,8072,8074,8076,8078,8080,8082,8084,8086,8089],{"class":1133,"line":4463},[1131,8068,4295],{"class":1673},[1131,8070,8071],{"class":1330}," candidate ",[1131,8073,1680],{"class":1673},[1131,8075,7009],{"class":1330},[1131,8077,2282],{"class":1148},[1131,8079,1172],{"class":1164},[1131,8081,6768],{"class":1168},[1131,8083,1172],{"class":1164},[1131,8085,4397],{"class":1148},[1131,8087,8088],{"class":1377},"3",[1131,8090,7020],{"class":1148},[1131,8092,8093,8095,8097,8099,8101,8103,8106,8108,8110,8112,8114,8116,8118,8121,8123,8125,8127,8129,8131,8133,8135,8137,8139,8141,8143],{"class":1133,"line":4468},[1131,8094,4326],{"class":3967},[1131,8096,1594],{"class":1148},[1131,8098,4017],{"class":1313},[1131,8100,4020],{"class":1168},[1131,8102,4030],{"class":4029},[1131,8104,8105],{"class":1639},"candidate",[1131,8107,2282],{"class":1148},[1131,8109,1172],{"class":1164},[1131,8111,1711],{"class":1168},[1131,8113,1172],{"class":1164},[1131,8115,1776],{"class":1148},[1131,8117,4041],{"class":4029},[1131,8119,8120],{"class":1168},"x similar: ",[1131,8122,4030],{"class":4029},[1131,8124,8105],{"class":1639},[1131,8126,2282],{"class":1148},[1131,8128,1172],{"class":1164},[1131,8130,7380],{"class":1168},[1131,8132,1172],{"class":1164},[1131,8134,4397],{"class":1148},[1131,8136,4400],{"class":1377},[1131,8138,1776],{"class":1148},[1131,8140,4041],{"class":4029},[1131,8142,4407],{"class":1168},[1131,8144,1761],{"class":1148},[1131,8146,8147],{"class":1133,"line":4474},[1131,8148,1188],{"emptyLinePlaceholder":1187},[1131,8150,8151],{"class":1133,"line":4482},[1131,8152,8153],{"class":1137},"# Usage in views\n",[1131,8155,8156,8158,8161,8163,8165],{"class":1133,"line":4493},[1131,8157,1587],{"class":1313},[1131,8159,8160],{"class":1590}," analyze_view_performance",[1131,8162,1594],{"class":1148},[1131,8164,1597],{"class":1317},[1131,8166,1600],{"class":1148},[1131,8168,8169,8171,8174],{"class":1133,"line":4503},[1131,8170,1606],{"class":1605},[1131,8172,8173],{"class":1609},"Example view with query analysis",[1131,8175,1613],{"class":1605},[1131,8177,8178,8181,8183,8185],{"class":1133,"line":4509},[1131,8179,8180],{"class":1330},"    analyzer ",[1131,8182,1626],{"class":1148},[1131,8184,6454],{"class":1639},[1131,8186,3873],{"class":1148},[1131,8188,8190],{"class":1133,"line":8189},109,[1131,8191,1653],{"class":1330},[1131,8193,8195],{"class":1133,"line":8194},110,[1131,8196,8197],{"class":1137},"    # Your view logic here\n",[1131,8199,8201,8203,8205,8207,8209,8211,8213,8215,8217,8219],{"class":1133,"line":8200},111,[1131,8202,1623],{"class":1330},[1131,8204,1626],{"class":1148},[1131,8206,1629],{"class":1330},[1131,8208,1333],{"class":1148},[1131,8210,1634],{"class":1336},[1131,8212,1333],{"class":1148},[1131,8214,1640],{"class":1639},[1131,8216,1643],{"class":1148},[1131,8218,1646],{"class":1377},[1131,8220,1181],{"class":1148},[1131,8222,8224],{"class":1133,"line":8223},112,[1131,8225,1653],{"class":1330},[1131,8227,8229],{"class":1133,"line":8228},113,[1131,8230,8231],{"class":1137},"    # This will trigger N+1 queries\n",[1131,8233,8235,8237,8239,8241,8243],{"class":1133,"line":8234},114,[1131,8236,1674],{"class":1673},[1131,8238,1677],{"class":1330},[1131,8240,1680],{"class":1673},[1131,8242,1683],{"class":1330},[1131,8244,1686],{"class":1148},[1131,8246,8248,8250,8252,8254,8256,8258,8260,8262,8264],{"class":1133,"line":8247},115,[1131,8249,4012],{"class":3967},[1131,8251,1594],{"class":1148},[1131,8253,1819],{"class":1639},[1131,8255,1333],{"class":1148},[1131,8257,2087],{"class":1336},[1131,8259,1333],{"class":1148},[1131,8261,2935],{"class":1336},[1131,8263,4129],{"class":1148},[1131,8265,1717],{"class":1137},[1131,8267,8269],{"class":1133,"line":8268},116,[1131,8270,1653],{"class":1330},[1131,8272,8274],{"class":1133,"line":8273},117,[1131,8275,8276],{"class":1137},"    # Analyze the queries\n",[1131,8278,8280,8283,8285,8288,8290,8293],{"class":1133,"line":8279},118,[1131,8281,8282],{"class":1330},"    analysis ",[1131,8284,1626],{"class":1148},[1131,8286,8287],{"class":1330}," analyzer",[1131,8289,1333],{"class":1148},[1131,8291,8292],{"class":1639},"analyze_queries",[1131,8294,3873],{"class":1148},[1131,8296,8298,8301,8303,8306,8308,8310],{"class":1133,"line":8297},119,[1131,8299,8300],{"class":1330},"    analyzer",[1131,8302,1333],{"class":1148},[1131,8304,8305],{"class":1639},"print_analysis",[1131,8307,1594],{"class":1148},[1131,8309,7641],{"class":1639},[1131,8311,1761],{"class":1148},[1131,8313,8315],{"class":1133,"line":8314},120,[1131,8316,1653],{"class":1330},[1131,8318,8320,8322,8324,8326,8328,8330,8332,8335,8337,8339,8342,8344,8346,8348,8350,8352],{"class":1133,"line":8319},121,[1131,8321,1984],{"class":1673},[1131,8323,1987],{"class":1639},[1131,8325,1594],{"class":1148},[1131,8327,1597],{"class":1639},[1131,8329,1267],{"class":1148},[1131,8331,1996],{"class":1164},[1131,8333,8334],{"class":1168},"products.html",[1131,8336,1172],{"class":1164},[1131,8338,1267],{"class":1148},[1131,8340,8341],{"class":1148}," {",[1131,8343,1172],{"class":1164},[1131,8345,3651],{"class":1168},[1131,8347,1172],{"class":1164},[1131,8349,1310],{"class":1148},[1131,8351,1683],{"class":1639},[1131,8353,8354],{"class":1148},"})\n",[1038,8356,8358],{"id":8357},"explain-query-analysis","EXPLAIN Query Analysis",[1121,8360,8362],{"className":1123,"code":8361,"language":1125,"meta":1126,"style":1126},"from django.db import connection\n\nclass QueryExplainer:\n    \"\"\"Analyze query execution plans\"\"\"\n    \n    @staticmethod\n    def explain_queryset(queryset, analyze=False):\n        \"\"\"Get EXPLAIN output for a queryset\"\"\"\n        query = str(queryset.query)\n        \n        with connection.cursor() as cursor:\n            if connection.vendor == 'postgresql':\n                explain_query = f\"EXPLAIN {'ANALYZE ' if analyze else ''}(BUFFERS, FORMAT JSON) {query}\"\n                cursor.execute(explain_query)\n                result = cursor.fetchone()[0]\n                return result\n            \n            elif connection.vendor == 'mysql':\n                cursor.execute(f\"EXPLAIN FORMAT=JSON {query}\")\n                result = cursor.fetchone()[0]\n                return result\n            \n            else:\n                cursor.execute(f\"EXPLAIN QUERY PLAN {query}\")\n                return cursor.fetchall()\n    \n    @staticmethod\n    def analyze_execution_plan(plan_data):\n        \"\"\"Analyze execution plan for performance issues\"\"\"\n        issues = []\n        \n        if isinstance(plan_data, dict):\n            # PostgreSQL JSON format\n            plan = plan_data.get('Plan', {})\n            \n            # Check for sequential scans\n            if plan.get('Node Type') == 'Seq Scan':\n                issues.append({\n                    'type': 'sequential_scan',\n                    'message': f\"Sequential scan on {plan.get('Relation Name')}\",\n                    'cost': plan.get('Total Cost'),\n                    'rows': plan.get('Plan Rows')\n                })\n            \n            # Check for expensive operations\n            if plan.get('Total Cost', 0) > 1000:\n                issues.append({\n                    'type': 'expensive_operation',\n                    'message': f\"High cost operation: {plan.get('Node Type')}\",\n                    'cost': plan.get('Total Cost')\n                })\n            \n            # Recursively check child plans\n            for child in plan.get('Plans', []):\n                child_issues = QueryExplainer.analyze_execution_plan({'Plan': child})\n                issues.extend(child_issues)\n        \n        return issues\n\n# Usage examples\ndef analyze_slow_query():\n    \"\"\"Analyze a potentially slow query\"\"\"\n    # Create a complex queryset\n    queryset = Product.objects.select_related('category').prefetch_related(\n        'reviews'\n    ).filter(\n        is_active=True,\n        price__gte=100\n    ).annotate(\n        avg_rating=Avg('reviews__rating'),\n        review_count=Count('reviews')\n    ).order_by('-avg_rating')\n    \n    # Get execution plan\n    plan = QueryExplainer.explain_queryset(queryset, analyze=True)\n    issues = QueryExplainer.analyze_execution_plan(plan)\n    \n    print(\"=== Query Execution Plan Analysis ===\")\n    print(f\"Query: {queryset.query}\")\n    print(f\"Execution plan: {plan}\")\n    \n    if issues:\n        print(\"\\n--- Performance Issues ---\")\n        for issue in issues:\n            print(f\"- {issue['type']}: {issue['message']}\")\n    else:\n        print(\"No obvious performance issues found.\")\n\n# Management command for query analysis\nclass Command(BaseCommand):\n    \"\"\"Management command to analyze query performance\"\"\"\n    help = 'Analyze query performance for specific models'\n    \n    def add_arguments(self, parser):\n        parser.add_argument('model', type=str, help='Model to analyze')\n        parser.add_argument('--limit', type=int, default=100, help='Query limit')\n    \n    def handle(self, *args, **options):\n        from django.apps import apps\n        \n        try:\n            model = apps.get_model(options['model'])\n        except LookupError:\n            self.stdout.write(\n                self.style.ERROR(f\"Model {options['model']} not found\")\n            )\n            return\n        \n        # Analyze basic query\n        queryset = model.objects.all()[:options['limit']]\n        \n        analyzer = QueryAnalyzer()\n        \n        # Execute query\n        list(queryset)  # Force evaluation\n        \n        # Analyze results\n        analysis = analyzer.analyze_queries()\n        analyzer.print_analysis(analysis)\n        \n        # Get execution plan\n        plan = QueryExplainer.explain_queryset(queryset)\n        issues = QueryExplainer.analyze_execution_plan(plan)\n        \n        if issues:\n            self.stdout.write(\"\\n--- Execution Plan Issues ---\")\n            for issue in issues:\n                self.stdout.write(f\"- {issue['message']}\")\n",[1128,8363,8364,8378,8382,8391,8400,8404,8411,8435,8444,8463,8467,8489,8511,8557,8574,8595,8601,8605,8627,8652,8670,8676,8680,8686,8711,8724,8728,8734,8748,8757,8766,8770,8788,8793,8821,8825,8830,8863,8874,8894,8936,8964,8992,8996,9000,9005,9036,9046,9065,9104,9130,9134,9138,9143,9172,9202,9218,9222,9229,9233,9238,9247,9256,9261,9292,9300,9308,9319,9329,9337,9355,9373,9390,9394,9399,9427,9446,9450,9466,9491,9512,9516,9526,9543,9556,9607,9614,9629,9633,9638,9652,9661,9675,9679,9697,9742,9792,9796,9822,9838,9842,9849,9878,9888,9905,9948,9952,9957,9961,9966,10000,10004,10015,10019,10024,10038,10042,10047,10061,10076,10080,10085,10105,10124,10129,10138,10164,10177],{"__ignoreMap":1126},[1131,8365,8366,8368,8370,8372,8374,8376],{"class":1133,"line":1134},[1131,8367,2894],{"class":1673},[1131,8369,3795],{"class":1330},[1131,8371,1333],{"class":1148},[1131,8373,3800],{"class":1330},[1131,8375,2910],{"class":1673},[1131,8377,6411],{"class":1330},[1131,8379,8380],{"class":1133,"line":1141},[1131,8381,1188],{"emptyLinePlaceholder":1187},[1131,8383,8384,8386,8389],{"class":1133,"line":1155},[1131,8385,3299],{"class":1313},[1131,8387,8388],{"class":3302}," QueryExplainer",[1131,8390,1686],{"class":1148},[1131,8392,8393,8395,8398],{"class":1133,"line":1161},[1131,8394,1606],{"class":1605},[1131,8396,8397],{"class":1609},"Analyze query execution plans",[1131,8399,1613],{"class":1605},[1131,8401,8402],{"class":1133,"line":1178},[1131,8403,1653],{"class":1330},[1131,8405,8406,8408],{"class":1133,"line":1184},[1131,8407,3353],{"class":1148},[1131,8409,8410],{"class":1933},"staticmethod\n",[1131,8412,8413,8415,8418,8420,8423,8425,8428,8430,8433],{"class":1133,"line":1191},[1131,8414,3375],{"class":1313},[1131,8416,8417],{"class":1590}," explain_queryset",[1131,8419,1594],{"class":1148},[1131,8421,8422],{"class":1317},"queryset",[1131,8424,1267],{"class":1148},[1131,8426,8427],{"class":1317}," analyze",[1131,8429,1626],{"class":1326},[1131,8431,8432],{"class":1359},"False",[1131,8434,1600],{"class":1148},[1131,8436,8437,8439,8442],{"class":1133,"line":1201},[1131,8438,3391],{"class":1605},[1131,8440,8441],{"class":1609},"Get EXPLAIN output for a queryset",[1131,8443,1613],{"class":1605},[1131,8445,8446,8449,8451,8453,8455,8457,8459,8461],{"class":1133,"line":1213},[1131,8447,8448],{"class":1330},"        query ",[1131,8450,1626],{"class":1148},[1131,8452,6055],{"class":1933},[1131,8454,1594],{"class":1148},[1131,8456,8422],{"class":1639},[1131,8458,1333],{"class":1148},[1131,8460,4353],{"class":1336},[1131,8462,1761],{"class":1148},[1131,8464,8465],{"class":1133,"line":1219},[1131,8466,1784],{"class":1330},[1131,8468,8469,8472,8474,8476,8479,8481,8484,8487],{"class":1133,"line":1224},[1131,8470,8471],{"class":1673},"        with",[1131,8473,3805],{"class":1330},[1131,8475,1333],{"class":1148},[1131,8477,8478],{"class":1639},"cursor",[1131,8480,1714],{"class":1148},[1131,8482,8483],{"class":1673}," as",[1131,8485,8486],{"class":1330}," cursor",[1131,8488,1686],{"class":1148},[1131,8490,8491,8493,8495,8497,8500,8502,8504,8507,8509],{"class":1133,"line":1229},[1131,8492,5841],{"class":1673},[1131,8494,3805],{"class":1330},[1131,8496,1333],{"class":1148},[1131,8498,8499],{"class":1336},"vendor",[1131,8501,4687],{"class":1326},[1131,8503,1996],{"class":1164},[1131,8505,8506],{"class":1168},"postgresql",[1131,8508,1172],{"class":1164},[1131,8510,1686],{"class":1148},[1131,8512,8513,8516,8518,8520,8523,8525,8527,8530,8532,8534,8537,8540,8543,8545,8548,8550,8552,8554],{"class":1133,"line":1235},[1131,8514,8515],{"class":1330},"                explain_query ",[1131,8517,1626],{"class":1148},[1131,8519,6021],{"class":1313},[1131,8521,8522],{"class":1168},"\"EXPLAIN ",[1131,8524,4030],{"class":4029},[1131,8526,1172],{"class":1164},[1131,8528,8529],{"class":1168},"ANALYZE ",[1131,8531,1172],{"class":1164},[1131,8533,5601],{"class":1673},[1131,8535,8536],{"class":1330}," analyze ",[1131,8538,8539],{"class":1673},"else",[1131,8541,8542],{"class":1164}," ''",[1131,8544,4041],{"class":4029},[1131,8546,8547],{"class":1168},"(BUFFERS, FORMAT JSON) ",[1131,8549,4030],{"class":4029},[1131,8551,4353],{"class":1330},[1131,8553,4041],{"class":4029},[1131,8555,8556],{"class":1168},"\"\n",[1131,8558,8559,8562,8564,8567,8569,8572],{"class":1133,"line":1245},[1131,8560,8561],{"class":1330},"                cursor",[1131,8563,1333],{"class":1148},[1131,8565,8566],{"class":1639},"execute",[1131,8568,1594],{"class":1148},[1131,8570,8571],{"class":1639},"explain_query",[1131,8573,1761],{"class":1148},[1131,8575,8576,8579,8581,8583,8585,8588,8591,8593],{"class":1133,"line":1257},[1131,8577,8578],{"class":1330},"                result ",[1131,8580,1626],{"class":1148},[1131,8582,8486],{"class":1330},[1131,8584,1333],{"class":1148},[1131,8586,8587],{"class":1639},"fetchone",[1131,8589,8590],{"class":1148},"()[",[1131,8592,7391],{"class":1377},[1131,8594,1181],{"class":1148},[1131,8596,8597,8599],{"class":1133,"line":1273},[1131,8598,6246],{"class":1673},[1131,8600,4447],{"class":1330},[1131,8602,8603],{"class":1133,"line":1278},[1131,8604,4734],{"class":1330},[1131,8606,8607,8610,8612,8614,8616,8618,8620,8623,8625],{"class":1133,"line":1283},[1131,8608,8609],{"class":1673},"            elif",[1131,8611,3805],{"class":1330},[1131,8613,1333],{"class":1148},[1131,8615,8499],{"class":1336},[1131,8617,4687],{"class":1326},[1131,8619,1996],{"class":1164},[1131,8621,8622],{"class":1168},"mysql",[1131,8624,1172],{"class":1164},[1131,8626,1686],{"class":1148},[1131,8628,8629,8631,8633,8635,8637,8639,8642,8644,8646,8648,8650],{"class":1133,"line":1289},[1131,8630,8561],{"class":1330},[1131,8632,1333],{"class":1148},[1131,8634,8566],{"class":1639},[1131,8636,1594],{"class":1148},[1131,8638,4017],{"class":1313},[1131,8640,8641],{"class":1168},"\"EXPLAIN FORMAT=JSON ",[1131,8643,4030],{"class":4029},[1131,8645,4353],{"class":1639},[1131,8647,4041],{"class":4029},[1131,8649,4020],{"class":1168},[1131,8651,1761],{"class":1148},[1131,8653,8654,8656,8658,8660,8662,8664,8666,8668],{"class":1133,"line":1300},[1131,8655,8578],{"class":1330},[1131,8657,1626],{"class":1148},[1131,8659,8486],{"class":1330},[1131,8661,1333],{"class":1148},[1131,8663,8587],{"class":1639},[1131,8665,8590],{"class":1148},[1131,8667,7391],{"class":1377},[1131,8669,1181],{"class":1148},[1131,8671,8672,8674],{"class":1133,"line":1347},[1131,8673,6246],{"class":1673},[1131,8675,4447],{"class":1330},[1131,8677,8678],{"class":1133,"line":1365},[1131,8679,4734],{"class":1330},[1131,8681,8682,8684],{"class":1133,"line":1383},[1131,8683,5972],{"class":1673},[1131,8685,1686],{"class":1148},[1131,8687,8688,8690,8692,8694,8696,8698,8701,8703,8705,8707,8709],{"class":1133,"line":1389},[1131,8689,8561],{"class":1330},[1131,8691,1333],{"class":1148},[1131,8693,8566],{"class":1639},[1131,8695,1594],{"class":1148},[1131,8697,4017],{"class":1313},[1131,8699,8700],{"class":1168},"\"EXPLAIN QUERY PLAN ",[1131,8702,4030],{"class":4029},[1131,8704,4353],{"class":1639},[1131,8706,4041],{"class":4029},[1131,8708,4020],{"class":1168},[1131,8710,1761],{"class":1148},[1131,8712,8713,8715,8717,8719,8722],{"class":1133,"line":1394},[1131,8714,6246],{"class":1673},[1131,8716,8486],{"class":1330},[1131,8718,1333],{"class":1148},[1131,8720,8721],{"class":1639},"fetchall",[1131,8723,3873],{"class":1148},[1131,8725,8726],{"class":1133,"line":1400},[1131,8727,1653],{"class":1330},[1131,8729,8730,8732],{"class":1133,"line":1410},[1131,8731,3353],{"class":1148},[1131,8733,8410],{"class":1933},[1131,8735,8736,8738,8741,8743,8746],{"class":1133,"line":1422},[1131,8737,3375],{"class":1313},[1131,8739,8740],{"class":1590}," analyze_execution_plan",[1131,8742,1594],{"class":1148},[1131,8744,8745],{"class":1317},"plan_data",[1131,8747,1600],{"class":1148},[1131,8749,8750,8752,8755],{"class":1133,"line":1434},[1131,8751,3391],{"class":1605},[1131,8753,8754],{"class":1609},"Analyze execution plan for performance issues",[1131,8756,1613],{"class":1605},[1131,8758,8759,8762,8764],{"class":1133,"line":1446},[1131,8760,8761],{"class":1330},"        issues ",[1131,8763,1626],{"class":1148},[1131,8765,1668],{"class":1148},[1131,8767,8768],{"class":1133,"line":1458},[1131,8769,1784],{"class":1330},[1131,8771,8772,8774,8777,8779,8781,8783,8786],{"class":1133,"line":1470},[1131,8773,4250],{"class":1673},[1131,8775,8776],{"class":3967}," isinstance",[1131,8778,1594],{"class":1148},[1131,8780,8745],{"class":1639},[1131,8782,1267],{"class":1148},[1131,8784,8785],{"class":1933}," dict",[1131,8787,1600],{"class":1148},[1131,8789,8790],{"class":1133,"line":1482},[1131,8791,8792],{"class":1137},"            # PostgreSQL JSON format\n",[1131,8794,8795,8798,8800,8803,8805,8807,8809,8811,8814,8816,8818],{"class":1133,"line":1494},[1131,8796,8797],{"class":1330},"            plan ",[1131,8799,1626],{"class":1148},[1131,8801,8802],{"class":1330}," plan_data",[1131,8804,1333],{"class":1148},[1131,8806,2475],{"class":1639},[1131,8808,1594],{"class":1148},[1131,8810,1172],{"class":1164},[1131,8812,8813],{"class":1168},"Plan",[1131,8815,1172],{"class":1164},[1131,8817,1267],{"class":1148},[1131,8819,8820],{"class":1148}," {})\n",[1131,8822,8823],{"class":1133,"line":1506},[1131,8824,4734],{"class":1330},[1131,8826,8827],{"class":1133,"line":1518},[1131,8828,8829],{"class":1137},"            # Check for sequential scans\n",[1131,8831,8832,8834,8837,8839,8841,8843,8845,8848,8850,8852,8854,8856,8859,8861],{"class":1133,"line":1530},[1131,8833,5841],{"class":1673},[1131,8835,8836],{"class":1330}," plan",[1131,8838,1333],{"class":1148},[1131,8840,2475],{"class":1639},[1131,8842,1594],{"class":1148},[1131,8844,1172],{"class":1164},[1131,8846,8847],{"class":1168},"Node Type",[1131,8849,1172],{"class":1164},[1131,8851,4129],{"class":1148},[1131,8853,4687],{"class":1326},[1131,8855,1996],{"class":1164},[1131,8857,8858],{"class":1168},"Seq Scan",[1131,8860,1172],{"class":1164},[1131,8862,1686],{"class":1148},[1131,8864,8865,8868,8870,8872],{"class":1133,"line":1542},[1131,8866,8867],{"class":1330},"                issues",[1131,8869,1333],{"class":1148},[1131,8871,1869],{"class":1639},[1131,8873,1872],{"class":1148},[1131,8875,8876,8878,8881,8883,8885,8887,8890,8892],{"class":1133,"line":1554},[1131,8877,6854],{"class":1164},[1131,8879,8880],{"class":1168},"type",[1131,8882,1172],{"class":1164},[1131,8884,1310],{"class":1148},[1131,8886,1996],{"class":1164},[1131,8888,8889],{"class":1168},"sequential_scan",[1131,8891,1172],{"class":1164},[1131,8893,1175],{"class":1148},[1131,8895,8896,8898,8901,8903,8905,8907,8910,8912,8915,8917,8919,8921,8923,8926,8928,8930,8932,8934],{"class":1133,"line":1566},[1131,8897,6854],{"class":1164},[1131,8899,8900],{"class":1168},"message",[1131,8902,1172],{"class":1164},[1131,8904,1310],{"class":1148},[1131,8906,6021],{"class":1313},[1131,8908,8909],{"class":1168},"\"Sequential scan on ",[1131,8911,4030],{"class":4029},[1131,8913,8914],{"class":1639},"plan",[1131,8916,1333],{"class":1148},[1131,8918,2475],{"class":1639},[1131,8920,1594],{"class":1148},[1131,8922,1172],{"class":1164},[1131,8924,8925],{"class":1168},"Relation Name",[1131,8927,1172],{"class":1164},[1131,8929,4129],{"class":1148},[1131,8931,4041],{"class":4029},[1131,8933,4020],{"class":1168},[1131,8935,1175],{"class":1148},[1131,8937,8938,8940,8943,8945,8947,8949,8951,8953,8955,8957,8960,8962],{"class":1133,"line":2059},[1131,8939,6854],{"class":1164},[1131,8941,8942],{"class":1168},"cost",[1131,8944,1172],{"class":1164},[1131,8946,1310],{"class":1148},[1131,8948,8836],{"class":1639},[1131,8950,1333],{"class":1148},[1131,8952,2475],{"class":1639},[1131,8954,1594],{"class":1148},[1131,8956,1172],{"class":1164},[1131,8958,8959],{"class":1168},"Total Cost",[1131,8961,1172],{"class":1164},[1131,8963,1941],{"class":1148},[1131,8965,8966,8968,8971,8973,8975,8977,8979,8981,8983,8985,8988,8990],{"class":1133,"line":2065},[1131,8967,6854],{"class":1164},[1131,8969,8970],{"class":1168},"rows",[1131,8972,1172],{"class":1164},[1131,8974,1310],{"class":1148},[1131,8976,8836],{"class":1639},[1131,8978,1333],{"class":1148},[1131,8980,2475],{"class":1639},[1131,8982,1594],{"class":1148},[1131,8984,1172],{"class":1164},[1131,8986,8987],{"class":1168},"Plan Rows",[1131,8989,1172],{"class":1164},[1131,8991,1761],{"class":1148},[1131,8993,8994],{"class":1133,"line":2100},[1131,8995,6957],{"class":1148},[1131,8997,8998],{"class":1133,"line":2110},[1131,8999,4734],{"class":1330},[1131,9001,9002],{"class":1133,"line":2124},[1131,9003,9004],{"class":1137},"            # Check for expensive operations\n",[1131,9006,9007,9009,9011,9013,9015,9017,9019,9021,9023,9025,9027,9029,9031,9034],{"class":1133,"line":2129},[1131,9008,5841],{"class":1673},[1131,9010,8836],{"class":1330},[1131,9012,1333],{"class":1148},[1131,9014,2475],{"class":1639},[1131,9016,1594],{"class":1148},[1131,9018,1172],{"class":1164},[1131,9020,8959],{"class":1168},[1131,9022,1172],{"class":1164},[1131,9024,1267],{"class":1148},[1131,9026,3116],{"class":1377},[1131,9028,4129],{"class":1148},[1131,9030,4239],{"class":1326},[1131,9032,9033],{"class":1377}," 1000",[1131,9035,1686],{"class":1148},[1131,9037,9038,9040,9042,9044],{"class":1133,"line":2135},[1131,9039,8867],{"class":1330},[1131,9041,1333],{"class":1148},[1131,9043,1869],{"class":1639},[1131,9045,1872],{"class":1148},[1131,9047,9048,9050,9052,9054,9056,9058,9061,9063],{"class":1133,"line":2151},[1131,9049,6854],{"class":1164},[1131,9051,8880],{"class":1168},[1131,9053,1172],{"class":1164},[1131,9055,1310],{"class":1148},[1131,9057,1996],{"class":1164},[1131,9059,9060],{"class":1168},"expensive_operation",[1131,9062,1172],{"class":1164},[1131,9064,1175],{"class":1148},[1131,9066,9067,9069,9071,9073,9075,9077,9080,9082,9084,9086,9088,9090,9092,9094,9096,9098,9100,9102],{"class":1133,"line":2172},[1131,9068,6854],{"class":1164},[1131,9070,8900],{"class":1168},[1131,9072,1172],{"class":1164},[1131,9074,1310],{"class":1148},[1131,9076,6021],{"class":1313},[1131,9078,9079],{"class":1168},"\"High cost operation: ",[1131,9081,4030],{"class":4029},[1131,9083,8914],{"class":1639},[1131,9085,1333],{"class":1148},[1131,9087,2475],{"class":1639},[1131,9089,1594],{"class":1148},[1131,9091,1172],{"class":1164},[1131,9093,8847],{"class":1168},[1131,9095,1172],{"class":1164},[1131,9097,4129],{"class":1148},[1131,9099,4041],{"class":4029},[1131,9101,4020],{"class":1168},[1131,9103,1175],{"class":1148},[1131,9105,9106,9108,9110,9112,9114,9116,9118,9120,9122,9124,9126,9128],{"class":1133,"line":2193},[1131,9107,6854],{"class":1164},[1131,9109,8942],{"class":1168},[1131,9111,1172],{"class":1164},[1131,9113,1310],{"class":1148},[1131,9115,8836],{"class":1639},[1131,9117,1333],{"class":1148},[1131,9119,2475],{"class":1639},[1131,9121,1594],{"class":1148},[1131,9123,1172],{"class":1164},[1131,9125,8959],{"class":1168},[1131,9127,1172],{"class":1164},[1131,9129,1761],{"class":1148},[1131,9131,9132],{"class":1133,"line":2199},[1131,9133,6957],{"class":1148},[1131,9135,9136],{"class":1133,"line":2204},[1131,9137,4734],{"class":1330},[1131,9139,9140],{"class":1133,"line":2210},[1131,9141,9142],{"class":1137},"            # Recursively check child plans\n",[1131,9144,9145,9147,9150,9152,9154,9156,9158,9160,9162,9165,9167,9169],{"class":1133,"line":2240},[1131,9146,4295],{"class":1673},[1131,9148,9149],{"class":1330}," child ",[1131,9151,1680],{"class":1673},[1131,9153,8836],{"class":1330},[1131,9155,1333],{"class":1148},[1131,9157,2475],{"class":1639},[1131,9159,1594],{"class":1148},[1131,9161,1172],{"class":1164},[1131,9163,9164],{"class":1168},"Plans",[1131,9166,1172],{"class":1164},[1131,9168,1267],{"class":1148},[1131,9170,9171],{"class":1148}," []):\n",[1131,9173,9174,9177,9179,9181,9183,9186,9189,9191,9193,9195,9197,9200],{"class":1133,"line":2251},[1131,9175,9176],{"class":1330},"                child_issues ",[1131,9178,1626],{"class":1148},[1131,9180,8388],{"class":1330},[1131,9182,1333],{"class":1148},[1131,9184,9185],{"class":1639},"analyze_execution_plan",[1131,9187,9188],{"class":1148},"({",[1131,9190,1172],{"class":1164},[1131,9192,8813],{"class":1168},[1131,9194,1172],{"class":1164},[1131,9196,1310],{"class":1148},[1131,9198,9199],{"class":1639}," child",[1131,9201,8354],{"class":1148},[1131,9203,9204,9206,9208,9211,9213,9216],{"class":1133,"line":2256},[1131,9205,8867],{"class":1330},[1131,9207,1333],{"class":1148},[1131,9209,9210],{"class":1639},"extend",[1131,9212,1594],{"class":1148},[1131,9214,9215],{"class":1639},"child_issues",[1131,9217,1761],{"class":1148},[1131,9219,9220],{"class":1133,"line":2276},[1131,9221,1784],{"class":1330},[1131,9223,9224,9226],{"class":1133,"line":2295},[1131,9225,3401],{"class":1673},[1131,9227,9228],{"class":1330}," issues\n",[1131,9230,9231],{"class":1133,"line":2319},[1131,9232,1188],{"emptyLinePlaceholder":1187},[1131,9234,9235],{"class":1133,"line":2356},[1131,9236,9237],{"class":1137},"# Usage examples\n",[1131,9239,9240,9242,9245],{"class":1133,"line":2362},[1131,9241,1587],{"class":1313},[1131,9243,9244],{"class":1590}," analyze_slow_query",[1131,9246,4490],{"class":1148},[1131,9248,9249,9251,9254],{"class":1133,"line":2367},[1131,9250,1606],{"class":1605},[1131,9252,9253],{"class":1609},"Analyze a potentially slow query",[1131,9255,1613],{"class":1605},[1131,9257,9258],{"class":1133,"line":2373},[1131,9259,9260],{"class":1137},"    # Create a complex queryset\n",[1131,9262,9263,9266,9268,9270,9272,9274,9276,9278,9280,9282,9284,9286,9288,9290],{"class":1133,"line":2382},[1131,9264,9265],{"class":1330},"    queryset ",[1131,9267,1626],{"class":1148},[1131,9269,1629],{"class":1330},[1131,9271,1333],{"class":1148},[1131,9273,1634],{"class":1336},[1131,9275,1333],{"class":1148},[1131,9277,2080],{"class":1639},[1131,9279,1594],{"class":1148},[1131,9281,1172],{"class":1164},[1131,9283,2087],{"class":1168},[1131,9285,1172],{"class":1164},[1131,9287,2092],{"class":1148},[1131,9289,2095],{"class":1639},[1131,9291,1738],{"class":1148},[1131,9293,9294,9296,9298],{"class":1133,"line":2395},[1131,9295,2010],{"class":1164},[1131,9297,1706],{"class":1168},[1131,9299,2107],{"class":1164},[1131,9301,9302,9304,9306],{"class":1133,"line":2406},[1131,9303,2113],{"class":1148},[1131,9305,1807],{"class":1639},[1131,9307,1738],{"class":1148},[1131,9309,9310,9313,9315,9317],{"class":1133,"line":2421},[1131,9311,9312],{"class":1743},"        is_active",[1131,9314,1626],{"class":1148},[1131,9316,3449],{"class":1359},[1131,9318,1175],{"class":1148},[1131,9320,9321,9324,9326],{"class":1133,"line":2440},[1131,9322,9323],{"class":1743},"        price__gte",[1131,9325,1626],{"class":1148},[1131,9327,9328],{"class":1377},"100\n",[1131,9330,9331,9333,9335],{"class":1133,"line":2459},[1131,9332,2113],{"class":1148},[1131,9334,2146],{"class":1639},[1131,9336,1738],{"class":1148},[1131,9338,9339,9341,9343,9345,9347,9349,9351,9353],{"class":1133,"line":2491},[1131,9340,2175],{"class":1743},[1131,9342,1626],{"class":1148},[1131,9344,1749],{"class":1639},[1131,9346,1594],{"class":1148},[1131,9348,1172],{"class":1164},[1131,9350,2186],{"class":1168},[1131,9352,1172],{"class":1164},[1131,9354,1941],{"class":1148},[1131,9356,9357,9359,9361,9363,9365,9367,9369,9371],{"class":1133,"line":2496},[1131,9358,2154],{"class":1743},[1131,9360,1626],{"class":1148},[1131,9362,2159],{"class":1639},[1131,9364,1594],{"class":1148},[1131,9366,1172],{"class":1164},[1131,9368,1706],{"class":1168},[1131,9370,1172],{"class":1164},[1131,9372,1761],{"class":1148},[1131,9374,9375,9377,9379,9381,9383,9386,9388],{"class":1133,"line":2501},[1131,9376,2113],{"class":1148},[1131,9378,3249],{"class":1639},[1131,9380,1594],{"class":1148},[1131,9382,1172],{"class":1164},[1131,9384,9385],{"class":1168},"-avg_rating",[1131,9387,1172],{"class":1164},[1131,9389,1761],{"class":1148},[1131,9391,9392],{"class":1133,"line":2507},[1131,9393,1653],{"class":1330},[1131,9395,9396],{"class":1133,"line":2513},[1131,9397,9398],{"class":1137},"    # Get execution plan\n",[1131,9400,9401,9404,9406,9408,9410,9413,9415,9417,9419,9421,9423,9425],{"class":1133,"line":2519},[1131,9402,9403],{"class":1330},"    plan ",[1131,9405,1626],{"class":1148},[1131,9407,8388],{"class":1330},[1131,9409,1333],{"class":1148},[1131,9411,9412],{"class":1639},"explain_queryset",[1131,9414,1594],{"class":1148},[1131,9416,8422],{"class":1639},[1131,9418,1267],{"class":1148},[1131,9420,8427],{"class":1743},[1131,9422,1626],{"class":1148},[1131,9424,3449],{"class":1359},[1131,9426,1761],{"class":1148},[1131,9428,9429,9432,9434,9436,9438,9440,9442,9444],{"class":1133,"line":2525},[1131,9430,9431],{"class":1330},"    issues ",[1131,9433,1626],{"class":1148},[1131,9435,8388],{"class":1330},[1131,9437,1333],{"class":1148},[1131,9439,9185],{"class":1639},[1131,9441,1594],{"class":1148},[1131,9443,8914],{"class":1639},[1131,9445,1761],{"class":1148},[1131,9447,9448],{"class":1133,"line":2530},[1131,9449,1653],{"class":1330},[1131,9451,9452,9455,9457,9459,9462,9464],{"class":1133,"line":2553},[1131,9453,9454],{"class":3967},"    print",[1131,9456,1594],{"class":1148},[1131,9458,4020],{"class":1164},[1131,9460,9461],{"class":1168},"=== Query Execution Plan Analysis ===",[1131,9463,4020],{"class":1164},[1131,9465,1761],{"class":1148},[1131,9467,9468,9470,9472,9474,9477,9479,9481,9483,9485,9487,9489],{"class":1133,"line":2566},[1131,9469,9454],{"class":3967},[1131,9471,1594],{"class":1148},[1131,9473,4017],{"class":1313},[1131,9475,9476],{"class":1168},"\"Query: ",[1131,9478,4030],{"class":4029},[1131,9480,8422],{"class":1639},[1131,9482,1333],{"class":1148},[1131,9484,4353],{"class":1336},[1131,9486,4041],{"class":4029},[1131,9488,4020],{"class":1168},[1131,9490,1761],{"class":1148},[1131,9492,9493,9495,9497,9499,9502,9504,9506,9508,9510],{"class":1133,"line":3959},[1131,9494,9454],{"class":3967},[1131,9496,1594],{"class":1148},[1131,9498,4017],{"class":1313},[1131,9500,9501],{"class":1168},"\"Execution plan: ",[1131,9503,4030],{"class":4029},[1131,9505,8914],{"class":1639},[1131,9507,4041],{"class":4029},[1131,9509,4020],{"class":1168},[1131,9511,1761],{"class":1148},[1131,9513,9514],{"class":1133,"line":4004},[1131,9515,1653],{"class":1330},[1131,9517,9518,9521,9524],{"class":1133,"line":4009},[1131,9519,9520],{"class":1673},"    if",[1131,9522,9523],{"class":1330}," issues",[1131,9525,1686],{"class":1148},[1131,9527,9528,9530,9532,9534,9536,9539,9541],{"class":1133,"line":4049},[1131,9529,4012],{"class":3967},[1131,9531,1594],{"class":1148},[1131,9533,4020],{"class":1164},[1131,9535,4023],{"class":1144},[1131,9537,9538],{"class":1168},"--- Performance Issues ---",[1131,9540,4020],{"class":1164},[1131,9542,1761],{"class":1148},[1131,9544,9545,9547,9550,9552,9554],{"class":1133,"line":4082},[1131,9546,6792],{"class":1673},[1131,9548,9549],{"class":1330}," issue ",[1131,9551,1680],{"class":1673},[1131,9553,9523],{"class":1330},[1131,9555,1686],{"class":1148},[1131,9557,9558,9560,9562,9564,9567,9569,9572,9574,9576,9578,9580,9582,9584,9587,9589,9591,9593,9595,9597,9599,9601,9603,9605],{"class":1133,"line":4107},[1131,9559,4261],{"class":3967},[1131,9561,1594],{"class":1148},[1131,9563,4017],{"class":1313},[1131,9565,9566],{"class":1168},"\"- ",[1131,9568,4030],{"class":4029},[1131,9570,9571],{"class":1639},"issue",[1131,9573,2282],{"class":1148},[1131,9575,1172],{"class":1164},[1131,9577,8880],{"class":1168},[1131,9579,1172],{"class":1164},[1131,9581,1776],{"class":1148},[1131,9583,4041],{"class":4029},[1131,9585,9586],{"class":1168},": ",[1131,9588,4030],{"class":4029},[1131,9590,9571],{"class":1639},[1131,9592,2282],{"class":1148},[1131,9594,1172],{"class":1164},[1131,9596,8900],{"class":1168},[1131,9598,1172],{"class":1164},[1131,9600,1776],{"class":1148},[1131,9602,4041],{"class":4029},[1131,9604,4020],{"class":1168},[1131,9606,1761],{"class":1148},[1131,9608,9609,9612],{"class":1133,"line":4138},[1131,9610,9611],{"class":1673},"    else",[1131,9613,1686],{"class":1148},[1131,9615,9616,9618,9620,9622,9625,9627],{"class":1133,"line":4186},[1131,9617,4012],{"class":3967},[1131,9619,1594],{"class":1148},[1131,9621,4020],{"class":1164},[1131,9623,9624],{"class":1168},"No obvious performance issues found.",[1131,9626,4020],{"class":1164},[1131,9628,1761],{"class":1148},[1131,9630,9631],{"class":1133,"line":4191},[1131,9632,1188],{"emptyLinePlaceholder":1187},[1131,9634,9635],{"class":1133,"line":4197},[1131,9636,9637],{"class":1137},"# Management command for query analysis\n",[1131,9639,9640,9642,9645,9647,9650],{"class":1133,"line":4247},[1131,9641,3299],{"class":1313},[1131,9643,9644],{"class":3302}," Command",[1131,9646,1594],{"class":1148},[1131,9648,9649],{"class":3308},"BaseCommand",[1131,9651,1600],{"class":1148},[1131,9653,9654,9656,9659],{"class":1133,"line":4258},[1131,9655,1606],{"class":1605},[1131,9657,9658],{"class":1609},"Management command to analyze query performance",[1131,9660,1613],{"class":1605},[1131,9662,9663,9666,9668,9670,9673],{"class":1133,"line":4292},[1131,9664,9665],{"class":3967},"    help",[1131,9667,1149],{"class":1148},[1131,9669,1996],{"class":1164},[1131,9671,9672],{"class":1168},"Analyze query performance for specific models",[1131,9674,2107],{"class":1164},[1131,9676,9677],{"class":1133,"line":4323},[1131,9678,1653],{"class":1330},[1131,9680,9681,9683,9686,9688,9690,9692,9695],{"class":1133,"line":4372},[1131,9682,3375],{"class":1313},[1131,9684,9685],{"class":1590}," add_arguments",[1131,9687,1594],{"class":1148},[1131,9689,3384],{"class":3383},[1131,9691,1267],{"class":1148},[1131,9693,9694],{"class":1317}," parser",[1131,9696,1600],{"class":1148},[1131,9698,9699,9702,9704,9707,9709,9711,9714,9716,9718,9721,9723,9726,9728,9731,9733,9735,9738,9740],{"class":1133,"line":4412},[1131,9700,9701],{"class":1330},"        parser",[1131,9703,1333],{"class":1148},[1131,9705,9706],{"class":1639},"add_argument",[1131,9708,1594],{"class":1148},[1131,9710,1172],{"class":1164},[1131,9712,9713],{"class":1168},"model",[1131,9715,1172],{"class":1164},[1131,9717,1267],{"class":1148},[1131,9719,9720],{"class":1743}," type",[1131,9722,1626],{"class":1148},[1131,9724,9725],{"class":1933},"str",[1131,9727,1267],{"class":1148},[1131,9729,9730],{"class":1743}," help",[1131,9732,1626],{"class":1148},[1131,9734,1172],{"class":1164},[1131,9736,9737],{"class":1168},"Model to analyze",[1131,9739,1172],{"class":1164},[1131,9741,1761],{"class":1148},[1131,9743,9744,9746,9748,9750,9752,9754,9757,9759,9761,9763,9765,9768,9770,9773,9775,9777,9779,9781,9783,9785,9788,9790],{"class":1133,"line":4417},[1131,9745,9701],{"class":1330},[1131,9747,1333],{"class":1148},[1131,9749,9706],{"class":1639},[1131,9751,1594],{"class":1148},[1131,9753,1172],{"class":1164},[1131,9755,9756],{"class":1168},"--limit",[1131,9758,1172],{"class":1164},[1131,9760,1267],{"class":1148},[1131,9762,9720],{"class":1743},[1131,9764,1626],{"class":1148},[1131,9766,9767],{"class":1933},"int",[1131,9769,1267],{"class":1148},[1131,9771,9772],{"class":1743}," default",[1131,9774,1626],{"class":1148},[1131,9776,4400],{"class":1377},[1131,9778,1267],{"class":1148},[1131,9780,9730],{"class":1743},[1131,9782,1626],{"class":1148},[1131,9784,1172],{"class":1164},[1131,9786,9787],{"class":1168},"Query limit",[1131,9789,1172],{"class":1164},[1131,9791,1761],{"class":1148},[1131,9793,9794],{"class":1133,"line":4423},[1131,9795,1653],{"class":1330},[1131,9797,9798,9800,9803,9805,9807,9809,9811,9813,9815,9817,9820],{"class":1133,"line":4437},[1131,9799,3375],{"class":1313},[1131,9801,9802],{"class":1590}," handle",[1131,9804,1594],{"class":1148},[1131,9806,3384],{"class":3383},[1131,9808,1267],{"class":1148},[1131,9810,2794],{"class":1326},[1131,9812,3779],{"class":1317},[1131,9814,1267],{"class":1148},[1131,9816,3538],{"class":1326},[1131,9818,9819],{"class":1317},"options",[1131,9821,1600],{"class":1148},[1131,9823,9824,9826,9828,9830,9833,9835],{"class":1133,"line":4442},[1131,9825,3792],{"class":1673},[1131,9827,3795],{"class":1330},[1131,9829,1333],{"class":1148},[1131,9831,9832],{"class":1330},"apps ",[1131,9834,2910],{"class":1673},[1131,9836,9837],{"class":1330}," apps\n",[1131,9839,9840],{"class":1133,"line":4450},[1131,9841,1784],{"class":1330},[1131,9843,9844,9847],{"class":1133,"line":4455},[1131,9845,9846],{"class":1673},"        try",[1131,9848,1686],{"class":1148},[1131,9850,9851,9854,9856,9859,9861,9864,9866,9868,9870,9872,9874,9876],{"class":1133,"line":4463},[1131,9852,9853],{"class":1330},"            model ",[1131,9855,1626],{"class":1148},[1131,9857,9858],{"class":1330}," apps",[1131,9860,1333],{"class":1148},[1131,9862,9863],{"class":1639},"get_model",[1131,9865,1594],{"class":1148},[1131,9867,9819],{"class":1639},[1131,9869,2282],{"class":1148},[1131,9871,1172],{"class":1164},[1131,9873,9713],{"class":1168},[1131,9875,1172],{"class":1164},[1131,9877,7217],{"class":1148},[1131,9879,9880,9883,9886],{"class":1133,"line":4468},[1131,9881,9882],{"class":1673},"        except",[1131,9884,9885],{"class":1933}," LookupError",[1131,9887,1686],{"class":1148},[1131,9889,9890,9893,9895,9898,9900,9903],{"class":1133,"line":4474},[1131,9891,9892],{"class":1144},"            self",[1131,9894,1333],{"class":1148},[1131,9896,9897],{"class":1336},"stdout",[1131,9899,1333],{"class":1148},[1131,9901,9902],{"class":1639},"write",[1131,9904,1738],{"class":1148},[1131,9906,9907,9910,9912,9915,9917,9920,9922,9924,9927,9929,9931,9933,9935,9937,9939,9941,9943,9946],{"class":1133,"line":4482},[1131,9908,9909],{"class":1144},"                self",[1131,9911,1333],{"class":1148},[1131,9913,9914],{"class":1336},"style",[1131,9916,1333],{"class":1148},[1131,9918,9919],{"class":1639},"ERROR",[1131,9921,1594],{"class":1148},[1131,9923,4017],{"class":1313},[1131,9925,9926],{"class":1168},"\"Model ",[1131,9928,4030],{"class":4029},[1131,9930,9819],{"class":1639},[1131,9932,2282],{"class":1148},[1131,9934,1172],{"class":1164},[1131,9936,9713],{"class":1168},[1131,9938,1172],{"class":1164},[1131,9940,1776],{"class":1148},[1131,9942,4041],{"class":4029},[1131,9944,9945],{"class":1168}," not found\"",[1131,9947,1761],{"class":1148},[1131,9949,9950],{"class":1133,"line":4493},[1131,9951,4961],{"class":1148},[1131,9953,9954],{"class":1133,"line":4503},[1131,9955,9956],{"class":1673},"            return\n",[1131,9958,9959],{"class":1133,"line":4509},[1131,9960,1784],{"class":1330},[1131,9962,9963],{"class":1133,"line":8189},[1131,9964,9965],{"class":1137},"        # Analyze basic query\n",[1131,9967,9968,9971,9973,9976,9978,9980,9982,9984,9986,9988,9990,9992,9995,9997],{"class":1133,"line":8194},[1131,9969,9970],{"class":1330},"        queryset ",[1131,9972,1626],{"class":1148},[1131,9974,9975],{"class":1330}," model",[1131,9977,1333],{"class":1148},[1131,9979,1634],{"class":1336},[1131,9981,1333],{"class":1148},[1131,9983,1640],{"class":1639},[1131,9985,1643],{"class":1148},[1131,9987,9819],{"class":1330},[1131,9989,2282],{"class":1148},[1131,9991,1172],{"class":1164},[1131,9993,9994],{"class":1168},"limit",[1131,9996,1172],{"class":1164},[1131,9998,9999],{"class":1148},"]]\n",[1131,10001,10002],{"class":1133,"line":8200},[1131,10003,1784],{"class":1330},[1131,10005,10006,10009,10011,10013],{"class":1133,"line":8223},[1131,10007,10008],{"class":1330},"        analyzer ",[1131,10010,1626],{"class":1148},[1131,10012,6454],{"class":1639},[1131,10014,3873],{"class":1148},[1131,10016,10017],{"class":1133,"line":8228},[1131,10018,1784],{"class":1330},[1131,10020,10021],{"class":1133,"line":8234},[1131,10022,10023],{"class":1137},"        # Execute query\n",[1131,10025,10026,10029,10031,10033,10035],{"class":1133,"line":8247},[1131,10027,10028],{"class":1933},"        list",[1131,10030,1594],{"class":1148},[1131,10032,8422],{"class":1639},[1131,10034,4129],{"class":1148},[1131,10036,10037],{"class":1137},"  # Force evaluation\n",[1131,10039,10040],{"class":1133,"line":8268},[1131,10041,1784],{"class":1330},[1131,10043,10044],{"class":1133,"line":8273},[1131,10045,10046],{"class":1137},"        # Analyze results\n",[1131,10048,10049,10051,10053,10055,10057,10059],{"class":1133,"line":8279},[1131,10050,6646],{"class":1330},[1131,10052,1626],{"class":1148},[1131,10054,8287],{"class":1330},[1131,10056,1333],{"class":1148},[1131,10058,8292],{"class":1639},[1131,10060,3873],{"class":1148},[1131,10062,10063,10066,10068,10070,10072,10074],{"class":1133,"line":8297},[1131,10064,10065],{"class":1330},"        analyzer",[1131,10067,1333],{"class":1148},[1131,10069,8305],{"class":1639},[1131,10071,1594],{"class":1148},[1131,10073,7641],{"class":1639},[1131,10075,1761],{"class":1148},[1131,10077,10078],{"class":1133,"line":8314},[1131,10079,1784],{"class":1330},[1131,10081,10082],{"class":1133,"line":8319},[1131,10083,10084],{"class":1137},"        # Get execution plan\n",[1131,10086,10088,10091,10093,10095,10097,10099,10101,10103],{"class":1133,"line":10087},122,[1131,10089,10090],{"class":1330},"        plan ",[1131,10092,1626],{"class":1148},[1131,10094,8388],{"class":1330},[1131,10096,1333],{"class":1148},[1131,10098,9412],{"class":1639},[1131,10100,1594],{"class":1148},[1131,10102,8422],{"class":1639},[1131,10104,1761],{"class":1148},[1131,10106,10108,10110,10112,10114,10116,10118,10120,10122],{"class":1133,"line":10107},123,[1131,10109,8761],{"class":1330},[1131,10111,1626],{"class":1148},[1131,10113,8388],{"class":1330},[1131,10115,1333],{"class":1148},[1131,10117,9185],{"class":1639},[1131,10119,1594],{"class":1148},[1131,10121,8914],{"class":1639},[1131,10123,1761],{"class":1148},[1131,10125,10127],{"class":1133,"line":10126},124,[1131,10128,1784],{"class":1330},[1131,10130,10132,10134,10136],{"class":1133,"line":10131},125,[1131,10133,4250],{"class":1673},[1131,10135,9523],{"class":1330},[1131,10137,1686],{"class":1148},[1131,10139,10141,10143,10145,10147,10149,10151,10153,10155,10157,10160,10162],{"class":1133,"line":10140},126,[1131,10142,9892],{"class":1144},[1131,10144,1333],{"class":1148},[1131,10146,9897],{"class":1336},[1131,10148,1333],{"class":1148},[1131,10150,9902],{"class":1639},[1131,10152,1594],{"class":1148},[1131,10154,4020],{"class":1164},[1131,10156,4023],{"class":1144},[1131,10158,10159],{"class":1168},"--- Execution Plan Issues ---",[1131,10161,4020],{"class":1164},[1131,10163,1761],{"class":1148},[1131,10165,10167,10169,10171,10173,10175],{"class":1133,"line":10166},127,[1131,10168,4295],{"class":1673},[1131,10170,9549],{"class":1330},[1131,10172,1680],{"class":1673},[1131,10174,9523],{"class":1330},[1131,10176,1686],{"class":1148},[1131,10178,10180,10182,10184,10186,10188,10190,10192,10194,10196,10198,10200,10202,10204,10206,10208,10210,10212,10214],{"class":1133,"line":10179},128,[1131,10181,9909],{"class":1144},[1131,10183,1333],{"class":1148},[1131,10185,9897],{"class":1336},[1131,10187,1333],{"class":1148},[1131,10189,9902],{"class":1639},[1131,10191,1594],{"class":1148},[1131,10193,4017],{"class":1313},[1131,10195,9566],{"class":1168},[1131,10197,4030],{"class":4029},[1131,10199,9571],{"class":1639},[1131,10201,2282],{"class":1148},[1131,10203,1172],{"class":1164},[1131,10205,8900],{"class":1168},[1131,10207,1172],{"class":1164},[1131,10209,1776],{"class":1148},[1131,10211,4041],{"class":4029},[1131,10213,4020],{"class":1168},[1131,10215,1761],{"class":1148},[1030,10217,1081],{"id":10218},"memory-profiling",[1038,10220,10222],{"id":10221},"memory-usage-analysis","Memory Usage Analysis",[1121,10224,10226],{"className":1123,"code":10225,"language":1125,"meta":1126,"style":1126},"import tracemalloc\nimport psutil\nimport os\nfrom django.utils.deprecation import MiddlewareMixin\n\nclass MemoryProfilingMiddleware(MiddlewareMixin):\n    \"\"\"Monitor memory usage during request processing\"\"\"\n    \n    def process_request(self, request):\n        if request.GET.get('memory_profile') == '1' and request.user.is_superuser:\n            # Start memory tracing\n            tracemalloc.start()\n            \n            # Get initial memory usage\n            process = psutil.Process(os.getpid())\n            request.initial_memory = process.memory_info().rss / 1024 / 1024  # MB\n            request.memory_profiling = True\n    \n    def process_response(self, request, response):\n        if hasattr(request, 'memory_profiling'):\n            # Get final memory usage\n            process = psutil.Process(os.getpid())\n            final_memory = process.memory_info().rss / 1024 / 1024  # MB\n            \n            # Get memory trace\n            current, peak = tracemalloc.get_traced_memory()\n            tracemalloc.stop()\n            \n            # Calculate memory delta\n            memory_delta = final_memory - request.initial_memory\n            \n            # Add memory headers\n            response['X-Memory-Initial'] = f'{request.initial_memory:.1f}MB'\n            response['X-Memory-Final'] = f'{final_memory:.1f}MB'\n            response['X-Memory-Delta'] = f'{memory_delta:.1f}MB'\n            response['X-Memory-Peak'] = f'{peak / 1024 / 1024:.1f}MB'\n            \n            # Log high memory usage\n            if memory_delta > 50:  # More than 50MB increase\n                logger.warning(\n                    f'High memory usage: {request.path} '\n                    f'increased memory by {memory_delta:.1f}MB'\n                )\n        \n        return response\n\n# Memory profiling decorator\ndef memory_profile(func):\n    \"\"\"Decorator to profile memory usage of functions\"\"\"\n    def wrapper(*args, **kwargs):\n        tracemalloc.start()\n        \n        # Get initial memory\n        process = psutil.Process(os.getpid())\n        initial_memory = process.memory_info().rss\n        \n        # Execute function\n        result = func(*args, **kwargs)\n        \n        # Get final memory\n        final_memory = process.memory_info().rss\n        current, peak = tracemalloc.get_traced_memory()\n        tracemalloc.stop()\n        \n        # Calculate usage\n        memory_delta = (final_memory - initial_memory) / 1024 / 1024  # MB\n        peak_mb = peak / 1024 / 1024\n        \n        print(f\"\\n=== Memory Profile for {func.__name__} ===\")\n        print(f\"Memory delta: {memory_delta:.1f}MB\")\n        print(f\"Peak memory: {peak_mb:.1f}MB\")\n        \n        return result\n    \n    return wrapper\n\n# Usage\n@memory_profile\ndef memory_intensive_operation():\n    \"\"\"Example memory-intensive operation\"\"\"\n    # Create large data structures\n    large_list = [i for i in range(1000000)]\n    large_dict = {i: f\"value_{i}\" for i in range(100000)}\n    \n    # Process data\n    processed = [x * 2 for x in large_list if x % 2 == 0]\n    \n    return processed\n",[1128,10227,10228,10235,10242,10249,10267,10271,10284,10293,10297,10313,10360,10365,10377,10381,10386,10414,10449,10462,10466,10486,10506,10511,10533,10560,10564,10569,10591,10602,10606,10611,10630,10634,10639,10675,10707,10739,10779,10783,10788,10805,10815,10834,10851,10855,10859,10865,10869,10874,10887,10896,10916,10927,10931,10936,10959,10977,10981,10986,11008,11012,11017,11034,11053,11063,11067,11072,11101,11119,11123,11152,11176,11200,11204,11210,11214,11220,11224,11228,11234,11243,11252,11257,11281,11323,11327,11332,11371,11375],{"__ignoreMap":1126},[1131,10229,10230,10232],{"class":1133,"line":1134},[1131,10231,2910],{"class":1673},[1131,10233,10234],{"class":1330}," tracemalloc\n",[1131,10236,10237,10239],{"class":1133,"line":1141},[1131,10238,2910],{"class":1673},[1131,10240,10241],{"class":1330}," psutil\n",[1131,10243,10244,10246],{"class":1133,"line":1155},[1131,10245,2910],{"class":1673},[1131,10247,10248],{"class":1330}," os\n",[1131,10250,10251,10253,10255,10257,10259,10261,10263,10265],{"class":1133,"line":1161},[1131,10252,2894],{"class":1673},[1131,10254,3795],{"class":1330},[1131,10256,1333],{"class":1148},[1131,10258,4573],{"class":1330},[1131,10260,1333],{"class":1148},[1131,10262,5468],{"class":1330},[1131,10264,2910],{"class":1673},[1131,10266,5473],{"class":1330},[1131,10268,10269],{"class":1133,"line":1178},[1131,10270,1188],{"emptyLinePlaceholder":1187},[1131,10272,10273,10275,10278,10280,10282],{"class":1133,"line":1184},[1131,10274,3299],{"class":1313},[1131,10276,10277],{"class":3302}," MemoryProfilingMiddleware",[1131,10279,1594],{"class":1148},[1131,10281,5503],{"class":3308},[1131,10283,1600],{"class":1148},[1131,10285,10286,10288,10291],{"class":1133,"line":1191},[1131,10287,1606],{"class":1605},[1131,10289,10290],{"class":1609},"Monitor memory usage during request processing",[1131,10292,1613],{"class":1605},[1131,10294,10295],{"class":1133,"line":1201},[1131,10296,1653],{"class":1330},[1131,10298,10299,10301,10303,10305,10307,10309,10311],{"class":1133,"line":1213},[1131,10300,3375],{"class":1313},[1131,10302,5525],{"class":1590},[1131,10304,1594],{"class":1148},[1131,10306,3384],{"class":3383},[1131,10308,1267],{"class":1148},[1131,10310,1318],{"class":1317},[1131,10312,1600],{"class":1148},[1131,10314,10315,10317,10319,10321,10323,10325,10327,10329,10331,10334,10336,10338,10340,10342,10344,10346,10348,10350,10352,10354,10356,10358],{"class":1133,"line":1219},[1131,10316,4250],{"class":1673},[1131,10318,1318],{"class":1330},[1131,10320,1333],{"class":1148},[1131,10322,4670],{"class":3850},[1131,10324,1333],{"class":1148},[1131,10326,2475],{"class":1639},[1131,10328,1594],{"class":1148},[1131,10330,1172],{"class":1164},[1131,10332,10333],{"class":1168},"memory_profile",[1131,10335,1172],{"class":1164},[1131,10337,4129],{"class":1148},[1131,10339,4687],{"class":1326},[1131,10341,1996],{"class":1164},[1131,10343,4343],{"class":1168},[1131,10345,1172],{"class":1164},[1131,10347,1327],{"class":1326},[1131,10349,1318],{"class":1330},[1131,10351,1333],{"class":1148},[1131,10353,1337],{"class":1336},[1131,10355,1333],{"class":1148},[1131,10357,1342],{"class":1336},[1131,10359,1686],{"class":1148},[1131,10361,10362],{"class":1133,"line":1224},[1131,10363,10364],{"class":1137},"            # Start memory tracing\n",[1131,10366,10367,10370,10372,10375],{"class":1133,"line":1229},[1131,10368,10369],{"class":1330},"            tracemalloc",[1131,10371,1333],{"class":1148},[1131,10373,10374],{"class":1639},"start",[1131,10376,3873],{"class":1148},[1131,10378,10379],{"class":1133,"line":1235},[1131,10380,4734],{"class":1330},[1131,10382,10383],{"class":1133,"line":1245},[1131,10384,10385],{"class":1137},"            # Get initial memory usage\n",[1131,10387,10388,10391,10393,10396,10398,10401,10403,10406,10408,10411],{"class":1133,"line":1257},[1131,10389,10390],{"class":1330},"            process ",[1131,10392,1626],{"class":1148},[1131,10394,10395],{"class":1330}," psutil",[1131,10397,1333],{"class":1148},[1131,10399,10400],{"class":1639},"Process",[1131,10402,1594],{"class":1148},[1131,10404,10405],{"class":1639},"os",[1131,10407,1333],{"class":1148},[1131,10409,10410],{"class":1639},"getpid",[1131,10412,10413],{"class":1148},"())\n",[1131,10415,10416,10418,10420,10423,10425,10428,10430,10433,10435,10438,10440,10442,10444,10446],{"class":1133,"line":1273},[1131,10417,5673],{"class":1330},[1131,10419,1333],{"class":1148},[1131,10421,10422],{"class":1336},"initial_memory",[1131,10424,1149],{"class":1148},[1131,10426,10427],{"class":1330}," process",[1131,10429,1333],{"class":1148},[1131,10431,10432],{"class":1639},"memory_info",[1131,10434,3565],{"class":1148},[1131,10436,10437],{"class":1336},"rss",[1131,10439,7751],{"class":1326},[1131,10441,2791],{"class":1377},[1131,10443,7751],{"class":1326},[1131,10445,2791],{"class":1377},[1131,10447,10448],{"class":1137},"  # MB\n",[1131,10450,10451,10453,10455,10458,10460],{"class":1133,"line":1278},[1131,10452,5673],{"class":1330},[1131,10454,1333],{"class":1148},[1131,10456,10457],{"class":1336},"memory_profiling",[1131,10459,1149],{"class":1148},[1131,10461,2674],{"class":1359},[1131,10463,10464],{"class":1133,"line":1283},[1131,10465,1653],{"class":1330},[1131,10467,10468,10470,10472,10474,10476,10478,10480,10482,10484],{"class":1133,"line":1289},[1131,10469,3375],{"class":1313},[1131,10471,5743],{"class":1590},[1131,10473,1594],{"class":1148},[1131,10475,3384],{"class":3383},[1131,10477,1267],{"class":1148},[1131,10479,1318],{"class":1317},[1131,10481,1267],{"class":1148},[1131,10483,5756],{"class":1317},[1131,10485,1600],{"class":1148},[1131,10487,10488,10490,10492,10494,10496,10498,10500,10502,10504],{"class":1133,"line":1300},[1131,10489,4250],{"class":1673},[1131,10491,5765],{"class":3967},[1131,10493,1594],{"class":1148},[1131,10495,1597],{"class":1639},[1131,10497,1267],{"class":1148},[1131,10499,1996],{"class":1164},[1131,10501,10457],{"class":1168},[1131,10503,1172],{"class":1164},[1131,10505,1600],{"class":1148},[1131,10507,10508],{"class":1133,"line":1347},[1131,10509,10510],{"class":1137},"            # Get final memory usage\n",[1131,10512,10513,10515,10517,10519,10521,10523,10525,10527,10529,10531],{"class":1133,"line":1365},[1131,10514,10390],{"class":1330},[1131,10516,1626],{"class":1148},[1131,10518,10395],{"class":1330},[1131,10520,1333],{"class":1148},[1131,10522,10400],{"class":1639},[1131,10524,1594],{"class":1148},[1131,10526,10405],{"class":1639},[1131,10528,1333],{"class":1148},[1131,10530,10410],{"class":1639},[1131,10532,10413],{"class":1148},[1131,10534,10535,10538,10540,10542,10544,10546,10548,10550,10552,10554,10556,10558],{"class":1133,"line":1383},[1131,10536,10537],{"class":1330},"            final_memory ",[1131,10539,1626],{"class":1148},[1131,10541,10427],{"class":1330},[1131,10543,1333],{"class":1148},[1131,10545,10432],{"class":1639},[1131,10547,3565],{"class":1148},[1131,10549,10437],{"class":1336},[1131,10551,7751],{"class":1326},[1131,10553,2791],{"class":1377},[1131,10555,7751],{"class":1326},[1131,10557,2791],{"class":1377},[1131,10559,10448],{"class":1137},[1131,10561,10562],{"class":1133,"line":1389},[1131,10563,4734],{"class":1330},[1131,10565,10566],{"class":1133,"line":1394},[1131,10567,10568],{"class":1137},"            # Get memory trace\n",[1131,10570,10571,10574,10576,10579,10581,10584,10586,10589],{"class":1133,"line":1400},[1131,10572,10573],{"class":1330},"            current",[1131,10575,1267],{"class":1148},[1131,10577,10578],{"class":1330}," peak ",[1131,10580,1626],{"class":1148},[1131,10582,10583],{"class":1330}," tracemalloc",[1131,10585,1333],{"class":1148},[1131,10587,10588],{"class":1639},"get_traced_memory",[1131,10590,3873],{"class":1148},[1131,10592,10593,10595,10597,10600],{"class":1133,"line":1410},[1131,10594,10369],{"class":1330},[1131,10596,1333],{"class":1148},[1131,10598,10599],{"class":1639},"stop",[1131,10601,3873],{"class":1148},[1131,10603,10604],{"class":1133,"line":1422},[1131,10605,4734],{"class":1330},[1131,10607,10608],{"class":1133,"line":1434},[1131,10609,10610],{"class":1137},"            # Calculate memory delta\n",[1131,10612,10613,10616,10618,10621,10623,10625,10627],{"class":1133,"line":1446},[1131,10614,10615],{"class":1330},"            memory_delta ",[1131,10617,1626],{"class":1148},[1131,10619,10620],{"class":1330}," final_memory ",[1131,10622,4066],{"class":1326},[1131,10624,1318],{"class":1330},[1131,10626,1333],{"class":1148},[1131,10628,10629],{"class":1336},"initial_memory\n",[1131,10631,10632],{"class":1133,"line":1458},[1131,10633,4734],{"class":1330},[1131,10635,10636],{"class":1133,"line":1470},[1131,10637,10638],{"class":1137},"            # Add memory headers\n",[1131,10640,10641,10643,10645,10647,10650,10652,10654,10656,10658,10660,10662,10664,10666,10668,10670,10672],{"class":1133,"line":1482},[1131,10642,6005],{"class":1330},[1131,10644,2282],{"class":1148},[1131,10646,1172],{"class":1164},[1131,10648,10649],{"class":1168},"X-Memory-Initial",[1131,10651,1172],{"class":1164},[1131,10653,1776],{"class":1148},[1131,10655,1149],{"class":1148},[1131,10657,6021],{"class":1313},[1131,10659,1172],{"class":1168},[1131,10661,4030],{"class":4029},[1131,10663,1597],{"class":1330},[1131,10665,1333],{"class":1148},[1131,10667,10422],{"class":1336},[1131,10669,4176],{"class":1313},[1131,10671,4041],{"class":4029},[1131,10673,10674],{"class":1168},"MB'\n",[1131,10676,10677,10679,10681,10683,10686,10688,10690,10692,10694,10696,10698,10701,10703,10705],{"class":1133,"line":1494},[1131,10678,6005],{"class":1330},[1131,10680,2282],{"class":1148},[1131,10682,1172],{"class":1164},[1131,10684,10685],{"class":1168},"X-Memory-Final",[1131,10687,1172],{"class":1164},[1131,10689,1776],{"class":1148},[1131,10691,1149],{"class":1148},[1131,10693,6021],{"class":1313},[1131,10695,1172],{"class":1168},[1131,10697,4030],{"class":4029},[1131,10699,10700],{"class":1330},"final_memory",[1131,10702,4176],{"class":1313},[1131,10704,4041],{"class":4029},[1131,10706,10674],{"class":1168},[1131,10708,10709,10711,10713,10715,10718,10720,10722,10724,10726,10728,10730,10733,10735,10737],{"class":1133,"line":1506},[1131,10710,6005],{"class":1330},[1131,10712,2282],{"class":1148},[1131,10714,1172],{"class":1164},[1131,10716,10717],{"class":1168},"X-Memory-Delta",[1131,10719,1172],{"class":1164},[1131,10721,1776],{"class":1148},[1131,10723,1149],{"class":1148},[1131,10725,6021],{"class":1313},[1131,10727,1172],{"class":1168},[1131,10729,4030],{"class":4029},[1131,10731,10732],{"class":1330},"memory_delta",[1131,10734,4176],{"class":1313},[1131,10736,4041],{"class":4029},[1131,10738,10674],{"class":1168},[1131,10740,10741,10743,10745,10747,10750,10752,10754,10756,10758,10760,10762,10765,10767,10769,10771,10773,10775,10777],{"class":1133,"line":1518},[1131,10742,6005],{"class":1330},[1131,10744,2282],{"class":1148},[1131,10746,1172],{"class":1164},[1131,10748,10749],{"class":1168},"X-Memory-Peak",[1131,10751,1172],{"class":1164},[1131,10753,1776],{"class":1148},[1131,10755,1149],{"class":1148},[1131,10757,6021],{"class":1313},[1131,10759,1172],{"class":1168},[1131,10761,4030],{"class":4029},[1131,10763,10764],{"class":1330},"peak ",[1131,10766,4157],{"class":1326},[1131,10768,2791],{"class":1377},[1131,10770,7751],{"class":1326},[1131,10772,2791],{"class":1377},[1131,10774,4176],{"class":1313},[1131,10776,4041],{"class":4029},[1131,10778,10674],{"class":1168},[1131,10780,10781],{"class":1133,"line":1530},[1131,10782,4734],{"class":1330},[1131,10784,10785],{"class":1133,"line":1542},[1131,10786,10787],{"class":1137},"            # Log high memory usage\n",[1131,10789,10790,10792,10795,10797,10800,10802],{"class":1133,"line":1554},[1131,10791,5841],{"class":1673},[1131,10793,10794],{"class":1330}," memory_delta ",[1131,10796,6303],{"class":1326},[1131,10798,10799],{"class":1377}," 50",[1131,10801,1310],{"class":1148},[1131,10803,10804],{"class":1137},"  # More than 50MB increase\n",[1131,10806,10807,10809,10811,10813],{"class":1133,"line":1566},[1131,10808,6313],{"class":1330},[1131,10810,1333],{"class":1148},[1131,10812,6318],{"class":1639},[1131,10814,1738],{"class":1148},[1131,10816,10817,10819,10822,10824,10826,10828,10830,10832],{"class":1133,"line":2059},[1131,10818,6255],{"class":1313},[1131,10820,10821],{"class":1168},"'High memory usage: ",[1131,10823,4030],{"class":4029},[1131,10825,1597],{"class":1639},[1131,10827,1333],{"class":1148},[1131,10829,6336],{"class":1336},[1131,10831,4041],{"class":4029},[1131,10833,6341],{"class":1168},[1131,10835,10836,10838,10841,10843,10845,10847,10849],{"class":1133,"line":2065},[1131,10837,6255],{"class":1313},[1131,10839,10840],{"class":1168},"'increased memory by ",[1131,10842,4030],{"class":4029},[1131,10844,10732],{"class":1639},[1131,10846,4176],{"class":1313},[1131,10848,4041],{"class":4029},[1131,10850,10674],{"class":1168},[1131,10852,10853],{"class":1133,"line":2100},[1131,10854,5967],{"class":1148},[1131,10856,10857],{"class":1133,"line":2110},[1131,10858,1784],{"class":1330},[1131,10860,10861,10863],{"class":1133,"line":2124},[1131,10862,3401],{"class":1673},[1131,10864,6383],{"class":1330},[1131,10866,10867],{"class":1133,"line":2129},[1131,10868,1188],{"emptyLinePlaceholder":1187},[1131,10870,10871],{"class":1133,"line":2135},[1131,10872,10873],{"class":1137},"# Memory profiling decorator\n",[1131,10875,10876,10878,10881,10883,10885],{"class":1133,"line":2151},[1131,10877,1587],{"class":1313},[1131,10879,10880],{"class":1590}," memory_profile",[1131,10882,1594],{"class":1148},[1131,10884,3753],{"class":1317},[1131,10886,1600],{"class":1148},[1131,10888,10889,10891,10894],{"class":1133,"line":2172},[1131,10890,1606],{"class":1605},[1131,10892,10893],{"class":1609},"Decorator to profile memory usage of functions",[1131,10895,1613],{"class":1605},[1131,10897,10898,10900,10902,10904,10906,10908,10910,10912,10914],{"class":1133,"line":2193},[1131,10899,3375],{"class":1313},[1131,10901,3771],{"class":1590},[1131,10903,1594],{"class":1148},[1131,10905,3776],{"class":1326},[1131,10907,3779],{"class":1317},[1131,10909,1267],{"class":1148},[1131,10911,3538],{"class":1326},[1131,10913,3541],{"class":1317},[1131,10915,1600],{"class":1148},[1131,10917,10918,10921,10923,10925],{"class":1133,"line":2199},[1131,10919,10920],{"class":1330},"        tracemalloc",[1131,10922,1333],{"class":1148},[1131,10924,10374],{"class":1639},[1131,10926,3873],{"class":1148},[1131,10928,10929],{"class":1133,"line":2204},[1131,10930,1784],{"class":1330},[1131,10932,10933],{"class":1133,"line":2210},[1131,10934,10935],{"class":1137},"        # Get initial memory\n",[1131,10937,10938,10941,10943,10945,10947,10949,10951,10953,10955,10957],{"class":1133,"line":2240},[1131,10939,10940],{"class":1330},"        process ",[1131,10942,1626],{"class":1148},[1131,10944,10395],{"class":1330},[1131,10946,1333],{"class":1148},[1131,10948,10400],{"class":1639},[1131,10950,1594],{"class":1148},[1131,10952,10405],{"class":1639},[1131,10954,1333],{"class":1148},[1131,10956,10410],{"class":1639},[1131,10958,10413],{"class":1148},[1131,10960,10961,10964,10966,10968,10970,10972,10974],{"class":1133,"line":2251},[1131,10962,10963],{"class":1330},"        initial_memory ",[1131,10965,1626],{"class":1148},[1131,10967,10427],{"class":1330},[1131,10969,1333],{"class":1148},[1131,10971,10432],{"class":1639},[1131,10973,3565],{"class":1148},[1131,10975,10976],{"class":1336},"rss\n",[1131,10978,10979],{"class":1133,"line":2256},[1131,10980,1784],{"class":1330},[1131,10982,10983],{"class":1133,"line":2276},[1131,10984,10985],{"class":1137},"        # Execute function\n",[1131,10987,10988,10990,10992,10994,10996,10998,11000,11002,11004,11006],{"class":1133,"line":2295},[1131,10989,3899],{"class":1330},[1131,10991,1626],{"class":1148},[1131,10993,3904],{"class":1639},[1131,10995,1594],{"class":1148},[1131,10997,3776],{"class":1326},[1131,10999,3779],{"class":1639},[1131,11001,1267],{"class":1148},[1131,11003,3538],{"class":1326},[1131,11005,3541],{"class":1639},[1131,11007,1761],{"class":1148},[1131,11009,11010],{"class":1133,"line":2319},[1131,11011,1784],{"class":1330},[1131,11013,11014],{"class":1133,"line":2356},[1131,11015,11016],{"class":1137},"        # Get final memory\n",[1131,11018,11019,11022,11024,11026,11028,11030,11032],{"class":1133,"line":2362},[1131,11020,11021],{"class":1330},"        final_memory ",[1131,11023,1626],{"class":1148},[1131,11025,10427],{"class":1330},[1131,11027,1333],{"class":1148},[1131,11029,10432],{"class":1639},[1131,11031,3565],{"class":1148},[1131,11033,10976],{"class":1336},[1131,11035,11036,11039,11041,11043,11045,11047,11049,11051],{"class":1133,"line":2367},[1131,11037,11038],{"class":1330},"        current",[1131,11040,1267],{"class":1148},[1131,11042,10578],{"class":1330},[1131,11044,1626],{"class":1148},[1131,11046,10583],{"class":1330},[1131,11048,1333],{"class":1148},[1131,11050,10588],{"class":1639},[1131,11052,3873],{"class":1148},[1131,11054,11055,11057,11059,11061],{"class":1133,"line":2373},[1131,11056,10920],{"class":1330},[1131,11058,1333],{"class":1148},[1131,11060,10599],{"class":1639},[1131,11062,3873],{"class":1148},[1131,11064,11065],{"class":1133,"line":2382},[1131,11066,1784],{"class":1330},[1131,11068,11069],{"class":1133,"line":2395},[1131,11070,11071],{"class":1137},"        # Calculate usage\n",[1131,11073,11074,11077,11079,11081,11084,11086,11089,11091,11093,11095,11097,11099],{"class":1133,"line":2406},[1131,11075,11076],{"class":1330},"        memory_delta ",[1131,11078,1626],{"class":1148},[1131,11080,4160],{"class":1148},[1131,11082,11083],{"class":1330},"final_memory ",[1131,11085,4066],{"class":1326},[1131,11087,11088],{"class":1330}," initial_memory",[1131,11090,4129],{"class":1148},[1131,11092,7751],{"class":1326},[1131,11094,2791],{"class":1377},[1131,11096,7751],{"class":1326},[1131,11098,2791],{"class":1377},[1131,11100,10448],{"class":1137},[1131,11102,11103,11106,11108,11110,11112,11114,11116],{"class":1133,"line":2421},[1131,11104,11105],{"class":1330},"        peak_mb ",[1131,11107,1626],{"class":1148},[1131,11109,10578],{"class":1330},[1131,11111,4157],{"class":1326},[1131,11113,2791],{"class":1377},[1131,11115,7751],{"class":1326},[1131,11117,11118],{"class":1377}," 1024\n",[1131,11120,11121],{"class":1133,"line":2440},[1131,11122,1784],{"class":1330},[1131,11124,11125,11127,11129,11131,11133,11135,11138,11140,11142,11144,11146,11148,11150],{"class":1133,"line":2459},[1131,11126,4012],{"class":3967},[1131,11128,1594],{"class":1148},[1131,11130,4017],{"class":1313},[1131,11132,4020],{"class":1168},[1131,11134,4023],{"class":1144},[1131,11136,11137],{"class":1168},"=== Memory Profile for ",[1131,11139,4030],{"class":4029},[1131,11141,3753],{"class":1639},[1131,11143,1333],{"class":1148},[1131,11145,4038],{"class":4037},[1131,11147,4041],{"class":4029},[1131,11149,4044],{"class":1168},[1131,11151,1761],{"class":1148},[1131,11153,11154,11156,11158,11160,11163,11165,11167,11169,11171,11174],{"class":1133,"line":2491},[1131,11155,4012],{"class":3967},[1131,11157,1594],{"class":1148},[1131,11159,4017],{"class":1313},[1131,11161,11162],{"class":1168},"\"Memory delta: ",[1131,11164,4030],{"class":4029},[1131,11166,10732],{"class":1639},[1131,11168,4176],{"class":1313},[1131,11170,4041],{"class":4029},[1131,11172,11173],{"class":1168},"MB\"",[1131,11175,1761],{"class":1148},[1131,11177,11178,11180,11182,11184,11187,11189,11192,11194,11196,11198],{"class":1133,"line":2496},[1131,11179,4012],{"class":3967},[1131,11181,1594],{"class":1148},[1131,11183,4017],{"class":1313},[1131,11185,11186],{"class":1168},"\"Peak memory: ",[1131,11188,4030],{"class":4029},[1131,11190,11191],{"class":1639},"peak_mb",[1131,11193,4176],{"class":1313},[1131,11195,4041],{"class":4029},[1131,11197,11173],{"class":1168},[1131,11199,1761],{"class":1148},[1131,11201,11202],{"class":1133,"line":2501},[1131,11203,1784],{"class":1330},[1131,11205,11206,11208],{"class":1133,"line":2507},[1131,11207,3401],{"class":1673},[1131,11209,4447],{"class":1330},[1131,11211,11212],{"class":1133,"line":2513},[1131,11213,1653],{"class":1330},[1131,11215,11216,11218],{"class":1133,"line":2519},[1131,11217,1984],{"class":1673},[1131,11219,4460],{"class":1330},[1131,11221,11222],{"class":1133,"line":2525},[1131,11223,1188],{"emptyLinePlaceholder":1187},[1131,11225,11226],{"class":1133,"line":2530},[1131,11227,4471],{"class":1137},[1131,11229,11230,11232],{"class":1133,"line":2553},[1131,11231,2927],{"class":1148},[1131,11233,5307],{"class":1590},[1131,11235,11236,11238,11241],{"class":1133,"line":2566},[1131,11237,1587],{"class":1313},[1131,11239,11240],{"class":1590}," memory_intensive_operation",[1131,11242,4490],{"class":1148},[1131,11244,11245,11247,11250],{"class":1133,"line":3959},[1131,11246,1606],{"class":1605},[1131,11248,11249],{"class":1609},"Example memory-intensive operation",[1131,11251,1613],{"class":1605},[1131,11253,11254],{"class":1133,"line":4004},[1131,11255,11256],{"class":1137},"    # Create large data structures\n",[1131,11258,11259,11261,11263,11265,11267,11269,11271,11273,11275,11277,11279],{"class":1133,"line":4009},[1131,11260,5344],{"class":1330},[1131,11262,1626],{"class":1148},[1131,11264,2218],{"class":1148},[1131,11266,5351],{"class":1330},[1131,11268,4210],{"class":1673},[1131,11270,5356],{"class":1330},[1131,11272,1680],{"class":1673},[1131,11274,5361],{"class":3967},[1131,11276,1594],{"class":1148},[1131,11278,5366],{"class":1377},[1131,11280,5369],{"class":1148},[1131,11282,11283,11286,11288,11290,11292,11294,11296,11299,11301,11303,11305,11307,11309,11311,11313,11315,11317,11320],{"class":1133,"line":4049},[1131,11284,11285],{"class":1330},"    large_dict ",[1131,11287,1626],{"class":1148},[1131,11289,8341],{"class":1148},[1131,11291,4337],{"class":1330},[1131,11293,1310],{"class":1148},[1131,11295,6021],{"class":1313},[1131,11297,11298],{"class":1168},"\"value_",[1131,11300,4030],{"class":4029},[1131,11302,4337],{"class":1330},[1131,11304,4041],{"class":4029},[1131,11306,4020],{"class":1168},[1131,11308,2228],{"class":1673},[1131,11310,5356],{"class":1330},[1131,11312,1680],{"class":1673},[1131,11314,5361],{"class":3967},[1131,11316,1594],{"class":1148},[1131,11318,11319],{"class":1377},"100000",[1131,11321,11322],{"class":1148},")}\n",[1131,11324,11325],{"class":1133,"line":4082},[1131,11326,1653],{"class":1330},[1131,11328,11329],{"class":1133,"line":4107},[1131,11330,11331],{"class":1137},"    # Process data\n",[1131,11333,11334,11337,11339,11341,11343,11345,11347,11349,11351,11353,11356,11358,11360,11363,11365,11367,11369],{"class":1133,"line":4138},[1131,11335,11336],{"class":1330},"    processed ",[1131,11338,1626],{"class":1148},[1131,11340,2218],{"class":1148},[1131,11342,5381],{"class":1330},[1131,11344,3776],{"class":1326},[1131,11346,5386],{"class":1377},[1131,11348,2228],{"class":1673},[1131,11350,5391],{"class":1330},[1131,11352,1680],{"class":1673},[1131,11354,11355],{"class":1330}," large_list ",[1131,11357,2841],{"class":1673},[1131,11359,5391],{"class":1330},[1131,11361,11362],{"class":1326},"%",[1131,11364,5386],{"class":1377},[1131,11366,4687],{"class":1326},[1131,11368,3116],{"class":1377},[1131,11370,1181],{"class":1148},[1131,11372,11373],{"class":1133,"line":4186},[1131,11374,1653],{"class":1330},[1131,11376,11377,11379],{"class":1133,"line":4191},[1131,11378,1984],{"class":1673},[1131,11380,11381],{"class":1330}," processed\n",[1038,11383,11385],{"id":11384},"memory-leak-detection","Memory Leak Detection",[1121,11387,11389],{"className":1123,"code":11388,"language":1125,"meta":1126,"style":1126},"import gc\nimport weakref\nfrom collections import defaultdict\n\nclass MemoryLeakDetector:\n    \"\"\"Detect potential memory leaks in Django applications\"\"\"\n    \n    def __init__(self):\n        self.object_counts = defaultdict(int)\n        self.tracked_objects = []\n    \n    def start_tracking(self):\n        \"\"\"Start tracking object creation\"\"\"\n        self.object_counts.clear()\n        self.tracked_objects.clear()\n        \n        # Count existing objects\n        for obj in gc.get_objects():\n            obj_type = type(obj).__name__\n            self.object_counts[obj_type] += 1\n    \n    def check_leaks(self):\n        \"\"\"Check for potential memory leaks\"\"\"\n        current_counts = defaultdict(int)\n        \n        # Count current objects\n        for obj in gc.get_objects():\n            obj_type = type(obj).__name__\n            current_counts[obj_type] += 1\n        \n        # Find objects that increased significantly\n        leaks = {}\n        for obj_type, current_count in current_counts.items():\n            initial_count = self.object_counts.get(obj_type, 0)\n            increase = current_count - initial_count\n            \n            # Consider it a potential leak if increase > 1000 objects\n            if increase > 1000:\n                leaks[obj_type] = {\n                    'initial': initial_count,\n                    'current': current_count,\n                    'increase': increase\n                }\n        \n        return leaks\n    \n    def track_object_lifecycle(self, obj):\n        \"\"\"Track specific object lifecycle\"\"\"\n        def cleanup_callback(ref):\n            print(f\"Object {ref} was garbage collected\")\n        \n        weak_ref = weakref.ref(obj, cleanup_callback)\n        self.tracked_objects.append(weak_ref)\n        return weak_ref\n    \n    def force_garbage_collection(self):\n        \"\"\"Force garbage collection and report\"\"\"\n        print(\"=== Garbage Collection Report ===\")\n        \n        # Get stats before collection\n        before_counts = [len(gc.get_objects(generation)) for generation in range(3)]\n        \n        # Force collection\n        collected = gc.collect()\n        \n        # Get stats after collection\n        after_counts = [len(gc.get_objects(generation)) for generation in range(3)]\n        \n        print(f\"Objects collected: {collected}\")\n        for i, (before, after) in enumerate(zip(before_counts, after_counts)):\n            print(f\"Generation {i}: {before} -> {after} (freed: {before - after})\")\n        \n        # Check for uncollectable objects\n        uncollectable = gc.garbage\n        if uncollectable:\n            print(f\"Uncollectable objects: {len(uncollectable)}\")\n            for obj in uncollectable[:5]:  # Show first 5\n                print(f\"  - {type(obj).__name__}: {repr(obj)[:100]}\")\n\n# Usage in views\nleak_detector = MemoryLeakDetector()\n\ndef memory_leak_test_view(request):\n    \"\"\"View to test for memory leaks\"\"\"\n    if request.GET.get('start_tracking'):\n        leak_detector.start_tracking()\n        return HttpResponse(\"Started memory leak tracking\")\n    \n    elif request.GET.get('check_leaks'):\n        leaks = leak_detector.check_leaks()\n        \n        if leaks:\n            response = \"Potential memory leaks detected:\\n\"\n            for obj_type, data in leaks.items():\n                response += f\"- {obj_type}: {data['increase']} new objects\\n\"\n        else:\n            response = \"No significant memory leaks detected\"\n        \n        return HttpResponse(response, content_type='text/plain')\n    \n    elif request.GET.get('gc_report'):\n        leak_detector.force_garbage_collection()\n        return HttpResponse(\"Garbage collection report printed to console\")\n    \n    # Regular view logic\n    return render(request, 'memory_test.html')\n",[1128,11390,11391,11398,11405,11417,11421,11430,11439,11443,11455,11475,11488,11492,11505,11514,11529,11543,11547,11552,11571,11590,11609,11613,11626,11635,11650,11654,11659,11675,11691,11706,11710,11715,11724,11747,11774,11788,11792,11797,11810,11825,11841,11857,11871,11876,11880,11887,11891,11909,11918,11933,11955,11959,11983,12002,12009,12013,12026,12035,12050,12054,12059,12101,12105,12110,12126,12130,12135,12174,12178,12200,12243,12297,12301,12306,12320,12329,12357,12377,12425,12429,12433,12444,12448,12461,12470,12495,12506,12523,12527,12553,12568,12572,12581,12596,12617,12661,12667,12680,12684,12711,12715,12740,12751,12768,12772,12777],{"__ignoreMap":1126},[1131,11392,11393,11395],{"class":1133,"line":1134},[1131,11394,2910],{"class":1673},[1131,11396,11397],{"class":1330}," gc\n",[1131,11399,11400,11402],{"class":1133,"line":1141},[1131,11401,2910],{"class":1673},[1131,11403,11404],{"class":1330}," weakref\n",[1131,11406,11407,11409,11412,11414],{"class":1133,"line":1155},[1131,11408,2894],{"class":1673},[1131,11410,11411],{"class":1330}," collections ",[1131,11413,2910],{"class":1673},[1131,11415,11416],{"class":1330}," defaultdict\n",[1131,11418,11419],{"class":1133,"line":1161},[1131,11420,1188],{"emptyLinePlaceholder":1187},[1131,11422,11423,11425,11428],{"class":1133,"line":1178},[1131,11424,3299],{"class":1313},[1131,11426,11427],{"class":3302}," MemoryLeakDetector",[1131,11429,1686],{"class":1148},[1131,11431,11432,11434,11437],{"class":1133,"line":1184},[1131,11433,1606],{"class":1605},[1131,11435,11436],{"class":1609},"Detect potential memory leaks in Django applications",[1131,11438,1613],{"class":1605},[1131,11440,11441],{"class":1133,"line":1191},[1131,11442,1653],{"class":1330},[1131,11444,11445,11447,11449,11451,11453],{"class":1133,"line":1201},[1131,11446,3375],{"class":1313},[1131,11448,6476],{"class":3967},[1131,11450,1594],{"class":1148},[1131,11452,3384],{"class":3383},[1131,11454,1600],{"class":1148},[1131,11456,11457,11459,11461,11464,11466,11469,11471,11473],{"class":1133,"line":1213},[1131,11458,6487],{"class":1144},[1131,11460,1333],{"class":1148},[1131,11462,11463],{"class":1336},"object_counts",[1131,11465,1149],{"class":1148},[1131,11467,11468],{"class":1639}," defaultdict",[1131,11470,1594],{"class":1148},[1131,11472,9767],{"class":1933},[1131,11474,1761],{"class":1148},[1131,11476,11477,11479,11481,11484,11486],{"class":1133,"line":1219},[1131,11478,6487],{"class":1144},[1131,11480,1333],{"class":1148},[1131,11482,11483],{"class":1336},"tracked_objects",[1131,11485,1149],{"class":1148},[1131,11487,1668],{"class":1148},[1131,11489,11490],{"class":1133,"line":1224},[1131,11491,1653],{"class":1330},[1131,11493,11494,11496,11499,11501,11503],{"class":1133,"line":1229},[1131,11495,3375],{"class":1313},[1131,11497,11498],{"class":1590}," start_tracking",[1131,11500,1594],{"class":1148},[1131,11502,3384],{"class":3383},[1131,11504,1600],{"class":1148},[1131,11506,11507,11509,11512],{"class":1133,"line":1235},[1131,11508,3391],{"class":1605},[1131,11510,11511],{"class":1609},"Start tracking object creation",[1131,11513,1613],{"class":1605},[1131,11515,11516,11518,11520,11522,11524,11527],{"class":1133,"line":1245},[1131,11517,6487],{"class":1144},[1131,11519,1333],{"class":1148},[1131,11521,11463],{"class":1336},[1131,11523,1333],{"class":1148},[1131,11525,11526],{"class":1639},"clear",[1131,11528,3873],{"class":1148},[1131,11530,11531,11533,11535,11537,11539,11541],{"class":1133,"line":1257},[1131,11532,6487],{"class":1144},[1131,11534,1333],{"class":1148},[1131,11536,11483],{"class":1336},[1131,11538,1333],{"class":1148},[1131,11540,11526],{"class":1639},[1131,11542,3873],{"class":1148},[1131,11544,11545],{"class":1133,"line":1273},[1131,11546,1784],{"class":1330},[1131,11548,11549],{"class":1133,"line":1278},[1131,11550,11551],{"class":1137},"        # Count existing objects\n",[1131,11553,11554,11556,11559,11561,11564,11566,11569],{"class":1133,"line":1283},[1131,11555,6792],{"class":1673},[1131,11557,11558],{"class":1330}," obj ",[1131,11560,1680],{"class":1673},[1131,11562,11563],{"class":1330}," gc",[1131,11565,1333],{"class":1148},[1131,11567,11568],{"class":1639},"get_objects",[1131,11570,4490],{"class":1148},[1131,11572,11573,11576,11578,11580,11582,11585,11587],{"class":1133,"line":1289},[1131,11574,11575],{"class":1330},"            obj_type ",[1131,11577,1626],{"class":1148},[1131,11579,9720],{"class":1933},[1131,11581,1594],{"class":1148},[1131,11583,11584],{"class":1639},"obj",[1131,11586,2092],{"class":1148},[1131,11588,11589],{"class":4037},"__name__\n",[1131,11591,11592,11594,11596,11598,11600,11603,11605,11607],{"class":1133,"line":1300},[1131,11593,9892],{"class":1144},[1131,11595,1333],{"class":1148},[1131,11597,11463],{"class":1336},[1131,11599,2282],{"class":1148},[1131,11601,11602],{"class":1336},"obj_type",[1131,11604,1776],{"class":1148},[1131,11606,7042],{"class":1148},[1131,11608,7045],{"class":1377},[1131,11610,11611],{"class":1133,"line":1347},[1131,11612,1653],{"class":1330},[1131,11614,11615,11617,11620,11622,11624],{"class":1133,"line":1365},[1131,11616,3375],{"class":1313},[1131,11618,11619],{"class":1590}," check_leaks",[1131,11621,1594],{"class":1148},[1131,11623,3384],{"class":3383},[1131,11625,1600],{"class":1148},[1131,11627,11628,11630,11633],{"class":1133,"line":1383},[1131,11629,3391],{"class":1605},[1131,11631,11632],{"class":1609},"Check for potential memory leaks",[1131,11634,1613],{"class":1605},[1131,11636,11637,11640,11642,11644,11646,11648],{"class":1133,"line":1389},[1131,11638,11639],{"class":1330},"        current_counts ",[1131,11641,1626],{"class":1148},[1131,11643,11468],{"class":1639},[1131,11645,1594],{"class":1148},[1131,11647,9767],{"class":1933},[1131,11649,1761],{"class":1148},[1131,11651,11652],{"class":1133,"line":1394},[1131,11653,1784],{"class":1330},[1131,11655,11656],{"class":1133,"line":1400},[1131,11657,11658],{"class":1137},"        # Count current objects\n",[1131,11660,11661,11663,11665,11667,11669,11671,11673],{"class":1133,"line":1410},[1131,11662,6792],{"class":1673},[1131,11664,11558],{"class":1330},[1131,11666,1680],{"class":1673},[1131,11668,11563],{"class":1330},[1131,11670,1333],{"class":1148},[1131,11672,11568],{"class":1639},[1131,11674,4490],{"class":1148},[1131,11676,11677,11679,11681,11683,11685,11687,11689],{"class":1133,"line":1422},[1131,11678,11575],{"class":1330},[1131,11680,1626],{"class":1148},[1131,11682,9720],{"class":1933},[1131,11684,1594],{"class":1148},[1131,11686,11584],{"class":1639},[1131,11688,2092],{"class":1148},[1131,11690,11589],{"class":4037},[1131,11692,11693,11696,11698,11700,11702,11704],{"class":1133,"line":1434},[1131,11694,11695],{"class":1330},"            current_counts",[1131,11697,2282],{"class":1148},[1131,11699,11602],{"class":1330},[1131,11701,1776],{"class":1148},[1131,11703,7042],{"class":1148},[1131,11705,7045],{"class":1377},[1131,11707,11708],{"class":1133,"line":1446},[1131,11709,1784],{"class":1330},[1131,11711,11712],{"class":1133,"line":1458},[1131,11713,11714],{"class":1137},"        # Find objects that increased significantly\n",[1131,11716,11717,11720,11722],{"class":1133,"line":1470},[1131,11718,11719],{"class":1330},"        leaks ",[1131,11721,1626],{"class":1148},[1131,11723,2248],{"class":1148},[1131,11725,11726,11728,11731,11733,11736,11738,11741,11743,11745],{"class":1133,"line":1482},[1131,11727,6792],{"class":1673},[1131,11729,11730],{"class":1330}," obj_type",[1131,11732,1267],{"class":1148},[1131,11734,11735],{"class":1330}," current_count ",[1131,11737,1680],{"class":1673},[1131,11739,11740],{"class":1330}," current_counts",[1131,11742,1333],{"class":1148},[1131,11744,7137],{"class":1639},[1131,11746,4490],{"class":1148},[1131,11748,11749,11752,11754,11756,11758,11760,11762,11764,11766,11768,11770,11772],{"class":1133,"line":1494},[1131,11750,11751],{"class":1330},"            initial_count ",[1131,11753,1626],{"class":1148},[1131,11755,6667],{"class":1144},[1131,11757,1333],{"class":1148},[1131,11759,11463],{"class":1336},[1131,11761,1333],{"class":1148},[1131,11763,2475],{"class":1639},[1131,11765,1594],{"class":1148},[1131,11767,11602],{"class":1639},[1131,11769,1267],{"class":1148},[1131,11771,3116],{"class":1377},[1131,11773,1761],{"class":1148},[1131,11775,11776,11779,11781,11783,11785],{"class":1133,"line":1506},[1131,11777,11778],{"class":1330},"            increase ",[1131,11780,1626],{"class":1148},[1131,11782,11735],{"class":1330},[1131,11784,4066],{"class":1326},[1131,11786,11787],{"class":1330}," initial_count\n",[1131,11789,11790],{"class":1133,"line":1518},[1131,11791,4734],{"class":1330},[1131,11793,11794],{"class":1133,"line":1530},[1131,11795,11796],{"class":1137},"            # Consider it a potential leak if increase > 1000 objects\n",[1131,11798,11799,11801,11804,11806,11808],{"class":1133,"line":1542},[1131,11800,5841],{"class":1673},[1131,11802,11803],{"class":1330}," increase ",[1131,11805,6303],{"class":1326},[1131,11807,9033],{"class":1377},[1131,11809,1686],{"class":1148},[1131,11811,11812,11815,11817,11819,11821,11823],{"class":1133,"line":1554},[1131,11813,11814],{"class":1330},"                leaks",[1131,11816,2282],{"class":1148},[1131,11818,11602],{"class":1330},[1131,11820,1776],{"class":1148},[1131,11822,1149],{"class":1148},[1131,11824,1297],{"class":1148},[1131,11826,11827,11829,11832,11834,11836,11839],{"class":1133,"line":1566},[1131,11828,6854],{"class":1164},[1131,11830,11831],{"class":1168},"initial",[1131,11833,1172],{"class":1164},[1131,11835,1310],{"class":1148},[1131,11837,11838],{"class":1330}," initial_count",[1131,11840,1175],{"class":1148},[1131,11842,11843,11845,11848,11850,11852,11855],{"class":1133,"line":2059},[1131,11844,6854],{"class":1164},[1131,11846,11847],{"class":1168},"current",[1131,11849,1172],{"class":1164},[1131,11851,1310],{"class":1148},[1131,11853,11854],{"class":1330}," current_count",[1131,11856,1175],{"class":1148},[1131,11858,11859,11861,11864,11866,11868],{"class":1133,"line":2065},[1131,11860,6854],{"class":1164},[1131,11862,11863],{"class":1168},"increase",[1131,11865,1172],{"class":1164},[1131,11867,1310],{"class":1148},[1131,11869,11870],{"class":1330}," increase\n",[1131,11872,11873],{"class":1133,"line":2100},[1131,11874,11875],{"class":1148},"                }\n",[1131,11877,11878],{"class":1133,"line":2110},[1131,11879,1784],{"class":1330},[1131,11881,11882,11884],{"class":1133,"line":2124},[1131,11883,3401],{"class":1673},[1131,11885,11886],{"class":1330}," leaks\n",[1131,11888,11889],{"class":1133,"line":2129},[1131,11890,1653],{"class":1330},[1131,11892,11893,11895,11898,11900,11902,11904,11907],{"class":1133,"line":2135},[1131,11894,3375],{"class":1313},[1131,11896,11897],{"class":1590}," track_object_lifecycle",[1131,11899,1594],{"class":1148},[1131,11901,3384],{"class":3383},[1131,11903,1267],{"class":1148},[1131,11905,11906],{"class":1317}," obj",[1131,11908,1600],{"class":1148},[1131,11910,11911,11913,11916],{"class":1133,"line":2151},[1131,11912,3391],{"class":1605},[1131,11914,11915],{"class":1609},"Track specific object lifecycle",[1131,11917,1613],{"class":1605},[1131,11919,11920,11923,11926,11928,11931],{"class":1133,"line":2172},[1131,11921,11922],{"class":1313},"        def",[1131,11924,11925],{"class":1590}," cleanup_callback",[1131,11927,1594],{"class":1148},[1131,11929,11930],{"class":1317},"ref",[1131,11932,1600],{"class":1148},[1131,11934,11935,11937,11939,11941,11944,11946,11948,11950,11953],{"class":1133,"line":2193},[1131,11936,4261],{"class":3967},[1131,11938,1594],{"class":1148},[1131,11940,4017],{"class":1313},[1131,11942,11943],{"class":1168},"\"Object ",[1131,11945,4030],{"class":4029},[1131,11947,11930],{"class":1639},[1131,11949,4041],{"class":4029},[1131,11951,11952],{"class":1168}," was garbage collected\"",[1131,11954,1761],{"class":1148},[1131,11956,11957],{"class":1133,"line":2199},[1131,11958,1784],{"class":1330},[1131,11960,11961,11964,11966,11969,11971,11973,11975,11977,11979,11981],{"class":1133,"line":2204},[1131,11962,11963],{"class":1330},"        weak_ref ",[1131,11965,1626],{"class":1148},[1131,11967,11968],{"class":1330}," weakref",[1131,11970,1333],{"class":1148},[1131,11972,11930],{"class":1639},[1131,11974,1594],{"class":1148},[1131,11976,11584],{"class":1639},[1131,11978,1267],{"class":1148},[1131,11980,11925],{"class":1639},[1131,11982,1761],{"class":1148},[1131,11984,11985,11987,11989,11991,11993,11995,11997,12000],{"class":1133,"line":2210},[1131,11986,6487],{"class":1144},[1131,11988,1333],{"class":1148},[1131,11990,11483],{"class":1336},[1131,11992,1333],{"class":1148},[1131,11994,1869],{"class":1639},[1131,11996,1594],{"class":1148},[1131,11998,11999],{"class":1639},"weak_ref",[1131,12001,1761],{"class":1148},[1131,12003,12004,12006],{"class":1133,"line":2240},[1131,12005,3401],{"class":1673},[1131,12007,12008],{"class":1330}," weak_ref\n",[1131,12010,12011],{"class":1133,"line":2251},[1131,12012,1653],{"class":1330},[1131,12014,12015,12017,12020,12022,12024],{"class":1133,"line":2256},[1131,12016,3375],{"class":1313},[1131,12018,12019],{"class":1590}," force_garbage_collection",[1131,12021,1594],{"class":1148},[1131,12023,3384],{"class":3383},[1131,12025,1600],{"class":1148},[1131,12027,12028,12030,12033],{"class":1133,"line":2276},[1131,12029,3391],{"class":1605},[1131,12031,12032],{"class":1609},"Force garbage collection and report",[1131,12034,1613],{"class":1605},[1131,12036,12037,12039,12041,12043,12046,12048],{"class":1133,"line":2295},[1131,12038,4012],{"class":3967},[1131,12040,1594],{"class":1148},[1131,12042,4020],{"class":1164},[1131,12044,12045],{"class":1168},"=== Garbage Collection Report ===",[1131,12047,4020],{"class":1164},[1131,12049,1761],{"class":1148},[1131,12051,12052],{"class":1133,"line":2319},[1131,12053,1784],{"class":1330},[1131,12055,12056],{"class":1133,"line":2356},[1131,12057,12058],{"class":1137},"        # Get stats before collection\n",[1131,12060,12061,12064,12066,12068,12070,12072,12075,12077,12079,12081,12084,12086,12088,12091,12093,12095,12097,12099],{"class":1133,"line":2362},[1131,12062,12063],{"class":1330},"        before_counts ",[1131,12065,1626],{"class":1148},[1131,12067,2218],{"class":1148},[1131,12069,4121],{"class":3967},[1131,12071,1594],{"class":1148},[1131,12073,12074],{"class":1639},"gc",[1131,12076,1333],{"class":1148},[1131,12078,11568],{"class":1639},[1131,12080,1594],{"class":1148},[1131,12082,12083],{"class":1639},"generation",[1131,12085,4169],{"class":1148},[1131,12087,2228],{"class":1673},[1131,12089,12090],{"class":1330}," generation ",[1131,12092,1680],{"class":1673},[1131,12094,5361],{"class":3967},[1131,12096,1594],{"class":1148},[1131,12098,8088],{"class":1377},[1131,12100,5369],{"class":1148},[1131,12102,12103],{"class":1133,"line":2367},[1131,12104,1784],{"class":1330},[1131,12106,12107],{"class":1133,"line":2373},[1131,12108,12109],{"class":1137},"        # Force collection\n",[1131,12111,12112,12115,12117,12119,12121,12124],{"class":1133,"line":2382},[1131,12113,12114],{"class":1330},"        collected ",[1131,12116,1626],{"class":1148},[1131,12118,11563],{"class":1330},[1131,12120,1333],{"class":1148},[1131,12122,12123],{"class":1639},"collect",[1131,12125,3873],{"class":1148},[1131,12127,12128],{"class":1133,"line":2395},[1131,12129,1784],{"class":1330},[1131,12131,12132],{"class":1133,"line":2406},[1131,12133,12134],{"class":1137},"        # Get stats after collection\n",[1131,12136,12137,12140,12142,12144,12146,12148,12150,12152,12154,12156,12158,12160,12162,12164,12166,12168,12170,12172],{"class":1133,"line":2421},[1131,12138,12139],{"class":1330},"        after_counts ",[1131,12141,1626],{"class":1148},[1131,12143,2218],{"class":1148},[1131,12145,4121],{"class":3967},[1131,12147,1594],{"class":1148},[1131,12149,12074],{"class":1639},[1131,12151,1333],{"class":1148},[1131,12153,11568],{"class":1639},[1131,12155,1594],{"class":1148},[1131,12157,12083],{"class":1639},[1131,12159,4169],{"class":1148},[1131,12161,2228],{"class":1673},[1131,12163,12090],{"class":1330},[1131,12165,1680],{"class":1673},[1131,12167,5361],{"class":3967},[1131,12169,1594],{"class":1148},[1131,12171,8088],{"class":1377},[1131,12173,5369],{"class":1148},[1131,12175,12176],{"class":1133,"line":2440},[1131,12177,1784],{"class":1330},[1131,12179,12180,12182,12184,12186,12189,12191,12194,12196,12198],{"class":1133,"line":2459},[1131,12181,4012],{"class":3967},[1131,12183,1594],{"class":1148},[1131,12185,4017],{"class":1313},[1131,12187,12188],{"class":1168},"\"Objects collected: ",[1131,12190,4030],{"class":4029},[1131,12192,12193],{"class":1639},"collected",[1131,12195,4041],{"class":4029},[1131,12197,4020],{"class":1168},[1131,12199,1761],{"class":1148},[1131,12201,12202,12204,12206,12208,12210,12213,12215,12218,12220,12223,12225,12227,12230,12232,12235,12237,12240],{"class":1133,"line":2491},[1131,12203,6792],{"class":1673},[1131,12205,4298],{"class":1330},[1131,12207,1267],{"class":1148},[1131,12209,4160],{"class":1148},[1131,12211,12212],{"class":1330},"before",[1131,12214,1267],{"class":1148},[1131,12216,12217],{"class":1330}," after",[1131,12219,4129],{"class":1148},[1131,12221,12222],{"class":1673}," in",[1131,12224,4308],{"class":3967},[1131,12226,1594],{"class":1148},[1131,12228,12229],{"class":3967},"zip",[1131,12231,1594],{"class":1148},[1131,12233,12234],{"class":1639},"before_counts",[1131,12236,1267],{"class":1148},[1131,12238,12239],{"class":1639}," after_counts",[1131,12241,12242],{"class":1148},")):\n",[1131,12244,12245,12247,12249,12251,12254,12256,12258,12260,12262,12264,12266,12268,12271,12273,12276,12278,12281,12283,12286,12288,12290,12292,12295],{"class":1133,"line":2496},[1131,12246,4261],{"class":3967},[1131,12248,1594],{"class":1148},[1131,12250,4017],{"class":1313},[1131,12252,12253],{"class":1168},"\"Generation ",[1131,12255,4030],{"class":4029},[1131,12257,4337],{"class":1639},[1131,12259,4041],{"class":4029},[1131,12261,9586],{"class":1168},[1131,12263,4030],{"class":4029},[1131,12265,12212],{"class":1639},[1131,12267,4041],{"class":4029},[1131,12269,12270],{"class":1168}," -> ",[1131,12272,4030],{"class":4029},[1131,12274,12275],{"class":1639},"after",[1131,12277,4041],{"class":4029},[1131,12279,12280],{"class":1168}," (freed: ",[1131,12282,4030],{"class":4029},[1131,12284,12285],{"class":1639},"before ",[1131,12287,4066],{"class":1326},[1131,12289,12217],{"class":1639},[1131,12291,4041],{"class":4029},[1131,12293,12294],{"class":1168},")\"",[1131,12296,1761],{"class":1148},[1131,12298,12299],{"class":1133,"line":2501},[1131,12300,1784],{"class":1330},[1131,12302,12303],{"class":1133,"line":2507},[1131,12304,12305],{"class":1137},"        # Check for uncollectable objects\n",[1131,12307,12308,12311,12313,12315,12317],{"class":1133,"line":2513},[1131,12309,12310],{"class":1330},"        uncollectable ",[1131,12312,1626],{"class":1148},[1131,12314,11563],{"class":1330},[1131,12316,1333],{"class":1148},[1131,12318,12319],{"class":1336},"garbage\n",[1131,12321,12322,12324,12327],{"class":1133,"line":2519},[1131,12323,4250],{"class":1673},[1131,12325,12326],{"class":1330}," uncollectable",[1131,12328,1686],{"class":1148},[1131,12330,12331,12333,12335,12337,12340,12342,12344,12346,12349,12351,12353,12355],{"class":1133,"line":2525},[1131,12332,4261],{"class":3967},[1131,12334,1594],{"class":1148},[1131,12336,4017],{"class":1313},[1131,12338,12339],{"class":1168},"\"Uncollectable objects: ",[1131,12341,4030],{"class":4029},[1131,12343,4121],{"class":3967},[1131,12345,1594],{"class":1148},[1131,12347,12348],{"class":1639},"uncollectable",[1131,12350,4129],{"class":1148},[1131,12352,4041],{"class":4029},[1131,12354,4020],{"class":1168},[1131,12356,1761],{"class":1148},[1131,12358,12359,12361,12363,12365,12367,12369,12371,12374],{"class":1133,"line":2530},[1131,12360,4295],{"class":1673},[1131,12362,11558],{"class":1330},[1131,12364,1680],{"class":1673},[1131,12366,12326],{"class":1330},[1131,12368,4315],{"class":1148},[1131,12370,1851],{"class":1377},[1131,12372,12373],{"class":1148},"]:",[1131,12375,12376],{"class":1137},"  # Show first 5\n",[1131,12378,12379,12381,12383,12385,12388,12390,12392,12394,12396,12398,12400,12402,12404,12406,12409,12411,12413,12415,12417,12419,12421,12423],{"class":1133,"line":2553},[1131,12380,4326],{"class":3967},[1131,12382,1594],{"class":1148},[1131,12384,4017],{"class":1313},[1131,12386,12387],{"class":1168},"\"  - ",[1131,12389,4030],{"class":4029},[1131,12391,8880],{"class":1933},[1131,12393,1594],{"class":1148},[1131,12395,11584],{"class":1639},[1131,12397,2092],{"class":1148},[1131,12399,4038],{"class":4037},[1131,12401,4041],{"class":4029},[1131,12403,9586],{"class":1168},[1131,12405,4030],{"class":4029},[1131,12407,12408],{"class":3967},"repr",[1131,12410,1594],{"class":1148},[1131,12412,11584],{"class":1639},[1131,12414,1848],{"class":1148},[1131,12416,4400],{"class":1377},[1131,12418,1776],{"class":1148},[1131,12420,4041],{"class":4029},[1131,12422,4020],{"class":1168},[1131,12424,1761],{"class":1148},[1131,12426,12427],{"class":1133,"line":2566},[1131,12428,1188],{"emptyLinePlaceholder":1187},[1131,12430,12431],{"class":1133,"line":3959},[1131,12432,8153],{"class":1137},[1131,12434,12435,12438,12440,12442],{"class":1133,"line":4004},[1131,12436,12437],{"class":1330},"leak_detector ",[1131,12439,1626],{"class":1148},[1131,12441,11427],{"class":1639},[1131,12443,3873],{"class":1148},[1131,12445,12446],{"class":1133,"line":4009},[1131,12447,1188],{"emptyLinePlaceholder":1187},[1131,12449,12450,12452,12455,12457,12459],{"class":1133,"line":4049},[1131,12451,1587],{"class":1313},[1131,12453,12454],{"class":1590}," memory_leak_test_view",[1131,12456,1594],{"class":1148},[1131,12458,1597],{"class":1317},[1131,12460,1600],{"class":1148},[1131,12462,12463,12465,12468],{"class":1133,"line":4082},[1131,12464,1606],{"class":1605},[1131,12466,12467],{"class":1609},"View to test for memory leaks",[1131,12469,1613],{"class":1605},[1131,12471,12472,12474,12476,12478,12480,12482,12484,12486,12488,12491,12493],{"class":1133,"line":4107},[1131,12473,9520],{"class":1673},[1131,12475,1318],{"class":1330},[1131,12477,1333],{"class":1148},[1131,12479,4670],{"class":3850},[1131,12481,1333],{"class":1148},[1131,12483,2475],{"class":1639},[1131,12485,1594],{"class":1148},[1131,12487,1172],{"class":1164},[1131,12489,12490],{"class":1168},"start_tracking",[1131,12492,1172],{"class":1164},[1131,12494,1600],{"class":1148},[1131,12496,12497,12500,12502,12504],{"class":1133,"line":4138},[1131,12498,12499],{"class":1330},"        leak_detector",[1131,12501,1333],{"class":1148},[1131,12503,12490],{"class":1639},[1131,12505,3873],{"class":1148},[1131,12507,12508,12510,12512,12514,12516,12519,12521],{"class":1133,"line":4186},[1131,12509,3401],{"class":1673},[1131,12511,4920],{"class":1639},[1131,12513,1594],{"class":1148},[1131,12515,4020],{"class":1164},[1131,12517,12518],{"class":1168},"Started memory leak tracking",[1131,12520,4020],{"class":1164},[1131,12522,1761],{"class":1148},[1131,12524,12525],{"class":1133,"line":4191},[1131,12526,1653],{"class":1330},[1131,12528,12529,12532,12534,12536,12538,12540,12542,12544,12546,12549,12551],{"class":1133,"line":4197},[1131,12530,12531],{"class":1673},"    elif",[1131,12533,1318],{"class":1330},[1131,12535,1333],{"class":1148},[1131,12537,4670],{"class":3850},[1131,12539,1333],{"class":1148},[1131,12541,2475],{"class":1639},[1131,12543,1594],{"class":1148},[1131,12545,1172],{"class":1164},[1131,12547,12548],{"class":1168},"check_leaks",[1131,12550,1172],{"class":1164},[1131,12552,1600],{"class":1148},[1131,12554,12555,12557,12559,12562,12564,12566],{"class":1133,"line":4247},[1131,12556,11719],{"class":1330},[1131,12558,1626],{"class":1148},[1131,12560,12561],{"class":1330}," leak_detector",[1131,12563,1333],{"class":1148},[1131,12565,12548],{"class":1639},[1131,12567,3873],{"class":1148},[1131,12569,12570],{"class":1133,"line":4258},[1131,12571,1784],{"class":1330},[1131,12573,12574,12576,12579],{"class":1133,"line":4292},[1131,12575,4250],{"class":1673},[1131,12577,12578],{"class":1330}," leaks",[1131,12580,1686],{"class":1148},[1131,12582,12583,12585,12587,12589,12592,12594],{"class":1133,"line":4323},[1131,12584,4756],{"class":1330},[1131,12586,1626],{"class":1148},[1131,12588,7560],{"class":1164},[1131,12590,12591],{"class":1168},"Potential memory leaks detected:",[1131,12593,4023],{"class":1144},[1131,12595,8556],{"class":1164},[1131,12597,12598,12600,12602,12604,12607,12609,12611,12613,12615],{"class":1133,"line":4372},[1131,12599,4295],{"class":1673},[1131,12601,11730],{"class":1330},[1131,12603,1267],{"class":1148},[1131,12605,12606],{"class":1330}," data ",[1131,12608,1680],{"class":1673},[1131,12610,12578],{"class":1330},[1131,12612,1333],{"class":1148},[1131,12614,7137],{"class":1639},[1131,12616,4490],{"class":1148},[1131,12618,12619,12622,12625,12627,12629,12631,12633,12635,12637,12639,12642,12644,12646,12648,12650,12652,12654,12657,12659],{"class":1133,"line":4412},[1131,12620,12621],{"class":1330},"                response ",[1131,12623,12624],{"class":1148},"+=",[1131,12626,6021],{"class":1313},[1131,12628,9566],{"class":1168},[1131,12630,4030],{"class":4029},[1131,12632,11602],{"class":1330},[1131,12634,4041],{"class":4029},[1131,12636,9586],{"class":1168},[1131,12638,4030],{"class":4029},[1131,12640,12641],{"class":1330},"data",[1131,12643,2282],{"class":1148},[1131,12645,1172],{"class":1164},[1131,12647,11863],{"class":1168},[1131,12649,1172],{"class":1164},[1131,12651,1776],{"class":1148},[1131,12653,4041],{"class":4029},[1131,12655,12656],{"class":1168}," new objects",[1131,12658,4023],{"class":1144},[1131,12660,8556],{"class":1168},[1131,12662,12663,12665],{"class":1133,"line":4417},[1131,12664,4966],{"class":1673},[1131,12666,1686],{"class":1148},[1131,12668,12669,12671,12673,12675,12678],{"class":1133,"line":4423},[1131,12670,4756],{"class":1330},[1131,12672,1626],{"class":1148},[1131,12674,7560],{"class":1164},[1131,12676,12677],{"class":1168},"No significant memory leaks detected",[1131,12679,8556],{"class":1164},[1131,12681,12682],{"class":1133,"line":4437},[1131,12683,1784],{"class":1330},[1131,12685,12686,12688,12690,12692,12695,12697,12700,12702,12704,12707,12709],{"class":1133,"line":4442},[1131,12687,3401],{"class":1673},[1131,12689,4920],{"class":1639},[1131,12691,1594],{"class":1148},[1131,12693,12694],{"class":1639},"response",[1131,12696,1267],{"class":1148},[1131,12698,12699],{"class":1743}," content_type",[1131,12701,1626],{"class":1148},[1131,12703,1172],{"class":1164},[1131,12705,12706],{"class":1168},"text/plain",[1131,12708,1172],{"class":1164},[1131,12710,1761],{"class":1148},[1131,12712,12713],{"class":1133,"line":4450},[1131,12714,1653],{"class":1330},[1131,12716,12717,12719,12721,12723,12725,12727,12729,12731,12733,12736,12738],{"class":1133,"line":4455},[1131,12718,12531],{"class":1673},[1131,12720,1318],{"class":1330},[1131,12722,1333],{"class":1148},[1131,12724,4670],{"class":3850},[1131,12726,1333],{"class":1148},[1131,12728,2475],{"class":1639},[1131,12730,1594],{"class":1148},[1131,12732,1172],{"class":1164},[1131,12734,12735],{"class":1168},"gc_report",[1131,12737,1172],{"class":1164},[1131,12739,1600],{"class":1148},[1131,12741,12742,12744,12746,12749],{"class":1133,"line":4463},[1131,12743,12499],{"class":1330},[1131,12745,1333],{"class":1148},[1131,12747,12748],{"class":1639},"force_garbage_collection",[1131,12750,3873],{"class":1148},[1131,12752,12753,12755,12757,12759,12761,12764,12766],{"class":1133,"line":4468},[1131,12754,3401],{"class":1673},[1131,12756,4920],{"class":1639},[1131,12758,1594],{"class":1148},[1131,12760,4020],{"class":1164},[1131,12762,12763],{"class":1168},"Garbage collection report printed to console",[1131,12765,4020],{"class":1164},[1131,12767,1761],{"class":1148},[1131,12769,12770],{"class":1133,"line":4474},[1131,12771,1653],{"class":1330},[1131,12773,12774],{"class":1133,"line":4482},[1131,12775,12776],{"class":1137},"    # Regular view logic\n",[1131,12778,12779,12781,12783,12785,12787,12789,12791,12794,12796],{"class":1133,"line":4493},[1131,12780,1984],{"class":1673},[1131,12782,1987],{"class":1639},[1131,12784,1594],{"class":1148},[1131,12786,1597],{"class":1639},[1131,12788,1267],{"class":1148},[1131,12790,1996],{"class":1164},[1131,12792,12793],{"class":1168},"memory_test.html",[1131,12795,1172],{"class":1164},[1131,12797,1761],{"class":1148},[1030,12799,12801],{"id":12800},"production-monitoring","Production Monitoring",[1038,12803,12805],{"id":12804},"application-performance-monitoring-apm","Application Performance Monitoring (APM)",[1121,12807,12809],{"className":1123,"code":12808,"language":1125,"meta":1126,"style":1126},"# Integration with APM services like New Relic, DataDog, or Sentry\n\n# New Relic integration\nimport newrelic.agent\n\n@newrelic.agent.function_trace()\ndef expensive_calculation():\n    \"\"\"Function traced by New Relic\"\"\"\n    # Your expensive code here\n    pass\n\n@newrelic.agent.background_task()\ndef background_task():\n    \"\"\"Background task traced by New Relic\"\"\"\n    # Your background task code here\n    pass\n\n# Custom metrics\ndef record_custom_metrics():\n    \"\"\"Record custom performance metrics\"\"\"\n    # Record response time\n    newrelic.agent.record_metric('Custom/ResponseTime', response_time)\n    \n    # Record business metrics\n    newrelic.agent.record_metric('Custom/OrdersProcessed', order_count)\n    \n    # Record database metrics\n    newrelic.agent.record_metric('Custom/DatabaseQueries', query_count)\n\n# Sentry performance monitoring\nimport sentry_sdk\nfrom sentry_sdk.integrations.django import DjangoIntegration\n\nsentry_sdk.init(\n    dsn=\"your-sentry-dsn\",\n    integrations=[DjangoIntegration()],\n    traces_sample_rate=0.1,  # 10% of transactions\n    send_default_pii=True,\n)\n\n# Custom transaction monitoring\ndef monitored_view(request):\n    \"\"\"View with custom Sentry monitoring\"\"\"\n    with sentry_sdk.start_transaction(op=\"view\", name=\"complex_dashboard\"):\n        # Database span\n        with sentry_sdk.start_span(op=\"db\", description=\"fetch user data\"):\n            user_data = get_user_data(request.user.id)\n        \n        # External API span\n        with sentry_sdk.start_span(op=\"http\", description=\"fetch recommendations\"):\n            recommendations = fetch_recommendations(request.user.id)\n        \n        # Template rendering span\n        with sentry_sdk.start_span(op=\"template\", description=\"render dashboard\"):\n            return render(request, 'dashboard.html', {\n                'user_data': user_data,\n                'recommendations': recommendations,\n            })\n",[1128,12810,12811,12816,12820,12825,12837,12841,12860,12869,12878,12883,12887,12891,12908,12917,12926,12931,12935,12939,12944,12953,12962,12967,12997,13001,13006,13034,13038,13043,13071,13075,13080,13087,13109,13113,13125,13141,13154,13169,13180,13184,13188,13193,13206,13215,13257,13262,13302,13326,13330,13335,13373,13397,13401,13406,13444,13466,13483,13497],{"__ignoreMap":1126},[1131,12812,12813],{"class":1133,"line":1134},[1131,12814,12815],{"class":1137},"# Integration with APM services like New Relic, DataDog, or Sentry\n",[1131,12817,12818],{"class":1133,"line":1141},[1131,12819,1188],{"emptyLinePlaceholder":1187},[1131,12821,12822],{"class":1133,"line":1155},[1131,12823,12824],{"class":1137},"# New Relic integration\n",[1131,12826,12827,12829,12832,12834],{"class":1133,"line":1161},[1131,12828,2910],{"class":1673},[1131,12830,12831],{"class":1330}," newrelic",[1131,12833,1333],{"class":1148},[1131,12835,12836],{"class":1336},"agent\n",[1131,12838,12839],{"class":1133,"line":1178},[1131,12840,1188],{"emptyLinePlaceholder":1187},[1131,12842,12843,12845,12848,12850,12853,12855,12858],{"class":1133,"line":1184},[1131,12844,2927],{"class":1148},[1131,12846,12847],{"class":1590},"newrelic",[1131,12849,1333],{"class":1148},[1131,12851,12852],{"class":1590},"agent",[1131,12854,1333],{"class":1148},[1131,12856,12857],{"class":1590},"function_trace",[1131,12859,3873],{"class":1148},[1131,12861,12862,12864,12867],{"class":1133,"line":1191},[1131,12863,1587],{"class":1313},[1131,12865,12866],{"class":1590}," expensive_calculation",[1131,12868,4490],{"class":1148},[1131,12870,12871,12873,12876],{"class":1133,"line":1201},[1131,12872,1606],{"class":1605},[1131,12874,12875],{"class":1609},"Function traced by New Relic",[1131,12877,1613],{"class":1605},[1131,12879,12880],{"class":1133,"line":1213},[1131,12881,12882],{"class":1137},"    # Your expensive code here\n",[1131,12884,12885],{"class":1133,"line":1219},[1131,12886,4512],{"class":1673},[1131,12888,12889],{"class":1133,"line":1224},[1131,12890,1188],{"emptyLinePlaceholder":1187},[1131,12892,12893,12895,12897,12899,12901,12903,12906],{"class":1133,"line":1229},[1131,12894,2927],{"class":1148},[1131,12896,12847],{"class":1590},[1131,12898,1333],{"class":1148},[1131,12900,12852],{"class":1590},[1131,12902,1333],{"class":1148},[1131,12904,12905],{"class":1590},"background_task",[1131,12907,3873],{"class":1148},[1131,12909,12910,12912,12915],{"class":1133,"line":1235},[1131,12911,1587],{"class":1313},[1131,12913,12914],{"class":1590}," background_task",[1131,12916,4490],{"class":1148},[1131,12918,12919,12921,12924],{"class":1133,"line":1245},[1131,12920,1606],{"class":1605},[1131,12922,12923],{"class":1609},"Background task traced by New Relic",[1131,12925,1613],{"class":1605},[1131,12927,12928],{"class":1133,"line":1257},[1131,12929,12930],{"class":1137},"    # Your background task code here\n",[1131,12932,12933],{"class":1133,"line":1273},[1131,12934,4512],{"class":1673},[1131,12936,12937],{"class":1133,"line":1278},[1131,12938,1188],{"emptyLinePlaceholder":1187},[1131,12940,12941],{"class":1133,"line":1283},[1131,12942,12943],{"class":1137},"# Custom metrics\n",[1131,12945,12946,12948,12951],{"class":1133,"line":1289},[1131,12947,1587],{"class":1313},[1131,12949,12950],{"class":1590}," record_custom_metrics",[1131,12952,4490],{"class":1148},[1131,12954,12955,12957,12960],{"class":1133,"line":1300},[1131,12956,1606],{"class":1605},[1131,12958,12959],{"class":1609},"Record custom performance metrics",[1131,12961,1613],{"class":1605},[1131,12963,12964],{"class":1133,"line":1347},[1131,12965,12966],{"class":1137},"    # Record response time\n",[1131,12968,12969,12972,12974,12976,12978,12981,12983,12985,12988,12990,12992,12995],{"class":1133,"line":1365},[1131,12970,12971],{"class":1330},"    newrelic",[1131,12973,1333],{"class":1148},[1131,12975,12852],{"class":1336},[1131,12977,1333],{"class":1148},[1131,12979,12980],{"class":1639},"record_metric",[1131,12982,1594],{"class":1148},[1131,12984,1172],{"class":1164},[1131,12986,12987],{"class":1168},"Custom/ResponseTime",[1131,12989,1172],{"class":1164},[1131,12991,1267],{"class":1148},[1131,12993,12994],{"class":1639}," response_time",[1131,12996,1761],{"class":1148},[1131,12998,12999],{"class":1133,"line":1383},[1131,13000,1653],{"class":1330},[1131,13002,13003],{"class":1133,"line":1389},[1131,13004,13005],{"class":1137},"    # Record business metrics\n",[1131,13007,13008,13010,13012,13014,13016,13018,13020,13022,13025,13027,13029,13032],{"class":1133,"line":1394},[1131,13009,12971],{"class":1330},[1131,13011,1333],{"class":1148},[1131,13013,12852],{"class":1336},[1131,13015,1333],{"class":1148},[1131,13017,12980],{"class":1639},[1131,13019,1594],{"class":1148},[1131,13021,1172],{"class":1164},[1131,13023,13024],{"class":1168},"Custom/OrdersProcessed",[1131,13026,1172],{"class":1164},[1131,13028,1267],{"class":1148},[1131,13030,13031],{"class":1639}," order_count",[1131,13033,1761],{"class":1148},[1131,13035,13036],{"class":1133,"line":1400},[1131,13037,1653],{"class":1330},[1131,13039,13040],{"class":1133,"line":1410},[1131,13041,13042],{"class":1137},"    # Record database metrics\n",[1131,13044,13045,13047,13049,13051,13053,13055,13057,13059,13062,13064,13066,13069],{"class":1133,"line":1422},[1131,13046,12971],{"class":1330},[1131,13048,1333],{"class":1148},[1131,13050,12852],{"class":1336},[1131,13052,1333],{"class":1148},[1131,13054,12980],{"class":1639},[1131,13056,1594],{"class":1148},[1131,13058,1172],{"class":1164},[1131,13060,13061],{"class":1168},"Custom/DatabaseQueries",[1131,13063,1172],{"class":1164},[1131,13065,1267],{"class":1148},[1131,13067,13068],{"class":1639}," query_count",[1131,13070,1761],{"class":1148},[1131,13072,13073],{"class":1133,"line":1434},[1131,13074,1188],{"emptyLinePlaceholder":1187},[1131,13076,13077],{"class":1133,"line":1446},[1131,13078,13079],{"class":1137},"# Sentry performance monitoring\n",[1131,13081,13082,13084],{"class":1133,"line":1458},[1131,13083,2910],{"class":1673},[1131,13085,13086],{"class":1330}," sentry_sdk\n",[1131,13088,13089,13091,13094,13096,13099,13101,13104,13106],{"class":1133,"line":1470},[1131,13090,2894],{"class":1673},[1131,13092,13093],{"class":1330}," sentry_sdk",[1131,13095,1333],{"class":1148},[1131,13097,13098],{"class":1330},"integrations",[1131,13100,1333],{"class":1148},[1131,13102,13103],{"class":1330},"django ",[1131,13105,2910],{"class":1673},[1131,13107,13108],{"class":1330}," DjangoIntegration\n",[1131,13110,13111],{"class":1133,"line":1482},[1131,13112,1188],{"emptyLinePlaceholder":1187},[1131,13114,13115,13118,13120,13123],{"class":1133,"line":1494},[1131,13116,13117],{"class":1330},"sentry_sdk",[1131,13119,1333],{"class":1148},[1131,13121,13122],{"class":1639},"init",[1131,13124,1738],{"class":1148},[1131,13126,13127,13130,13132,13134,13137,13139],{"class":1133,"line":1506},[1131,13128,13129],{"class":1743},"    dsn",[1131,13131,1626],{"class":1148},[1131,13133,4020],{"class":1164},[1131,13135,13136],{"class":1168},"your-sentry-dsn",[1131,13138,4020],{"class":1164},[1131,13140,1175],{"class":1148},[1131,13142,13143,13146,13148,13151],{"class":1133,"line":1518},[1131,13144,13145],{"class":1743},"    integrations",[1131,13147,2332],{"class":1148},[1131,13149,13150],{"class":1639},"DjangoIntegration",[1131,13152,13153],{"class":1148},"()],\n",[1131,13155,13156,13159,13161,13164,13166],{"class":1133,"line":1530},[1131,13157,13158],{"class":1743},"    traces_sample_rate",[1131,13160,1626],{"class":1148},[1131,13162,13163],{"class":1377},"0.1",[1131,13165,1267],{"class":1148},[1131,13167,13168],{"class":1137},"  # 10% of transactions\n",[1131,13170,13171,13174,13176,13178],{"class":1133,"line":1542},[1131,13172,13173],{"class":1743},"    send_default_pii",[1131,13175,1626],{"class":1148},[1131,13177,3449],{"class":1359},[1131,13179,1175],{"class":1148},[1131,13181,13182],{"class":1133,"line":1554},[1131,13183,1761],{"class":1148},[1131,13185,13186],{"class":1133,"line":1566},[1131,13187,1188],{"emptyLinePlaceholder":1187},[1131,13189,13190],{"class":1133,"line":2059},[1131,13191,13192],{"class":1137},"# Custom transaction monitoring\n",[1131,13194,13195,13197,13200,13202,13204],{"class":1133,"line":2065},[1131,13196,1587],{"class":1313},[1131,13198,13199],{"class":1590}," monitored_view",[1131,13201,1594],{"class":1148},[1131,13203,1597],{"class":1317},[1131,13205,1600],{"class":1148},[1131,13207,13208,13210,13213],{"class":1133,"line":2100},[1131,13209,1606],{"class":1605},[1131,13211,13212],{"class":1609},"View with custom Sentry monitoring",[1131,13214,1613],{"class":1605},[1131,13216,13217,13220,13222,13224,13227,13229,13232,13234,13236,13239,13241,13243,13246,13248,13250,13253,13255],{"class":1133,"line":2110},[1131,13218,13219],{"class":1673},"    with",[1131,13221,13093],{"class":1330},[1131,13223,1333],{"class":1148},[1131,13225,13226],{"class":1639},"start_transaction",[1131,13228,1594],{"class":1148},[1131,13230,13231],{"class":1743},"op",[1131,13233,1626],{"class":1148},[1131,13235,4020],{"class":1164},[1131,13237,13238],{"class":1168},"view",[1131,13240,4020],{"class":1164},[1131,13242,1267],{"class":1148},[1131,13244,13245],{"class":1743}," name",[1131,13247,1626],{"class":1148},[1131,13249,4020],{"class":1164},[1131,13251,13252],{"class":1168},"complex_dashboard",[1131,13254,4020],{"class":1164},[1131,13256,1600],{"class":1148},[1131,13258,13259],{"class":1133,"line":2124},[1131,13260,13261],{"class":1137},"        # Database span\n",[1131,13263,13264,13266,13268,13270,13273,13275,13277,13279,13281,13284,13286,13288,13291,13293,13295,13298,13300],{"class":1133,"line":2129},[1131,13265,8471],{"class":1673},[1131,13267,13093],{"class":1330},[1131,13269,1333],{"class":1148},[1131,13271,13272],{"class":1639},"start_span",[1131,13274,1594],{"class":1148},[1131,13276,13231],{"class":1743},[1131,13278,1626],{"class":1148},[1131,13280,4020],{"class":1164},[1131,13282,13283],{"class":1168},"db",[1131,13285,4020],{"class":1164},[1131,13287,1267],{"class":1148},[1131,13289,13290],{"class":1743}," description",[1131,13292,1626],{"class":1148},[1131,13294,4020],{"class":1164},[1131,13296,13297],{"class":1168},"fetch user data",[1131,13299,4020],{"class":1164},[1131,13301,1600],{"class":1148},[1131,13303,13304,13307,13309,13312,13314,13316,13318,13320,13322,13324],{"class":1133,"line":2135},[1131,13305,13306],{"class":1330},"            user_data ",[1131,13308,1626],{"class":1148},[1131,13310,13311],{"class":1639}," get_user_data",[1131,13313,1594],{"class":1148},[1131,13315,1597],{"class":1639},[1131,13317,1333],{"class":1148},[1131,13319,1337],{"class":1336},[1131,13321,1333],{"class":1148},[1131,13323,1837],{"class":1336},[1131,13325,1761],{"class":1148},[1131,13327,13328],{"class":1133,"line":2151},[1131,13329,1784],{"class":1330},[1131,13331,13332],{"class":1133,"line":2172},[1131,13333,13334],{"class":1137},"        # External API span\n",[1131,13336,13337,13339,13341,13343,13345,13347,13349,13351,13353,13356,13358,13360,13362,13364,13366,13369,13371],{"class":1133,"line":2193},[1131,13338,8471],{"class":1673},[1131,13340,13093],{"class":1330},[1131,13342,1333],{"class":1148},[1131,13344,13272],{"class":1639},[1131,13346,1594],{"class":1148},[1131,13348,13231],{"class":1743},[1131,13350,1626],{"class":1148},[1131,13352,4020],{"class":1164},[1131,13354,13355],{"class":1168},"http",[1131,13357,4020],{"class":1164},[1131,13359,1267],{"class":1148},[1131,13361,13290],{"class":1743},[1131,13363,1626],{"class":1148},[1131,13365,4020],{"class":1164},[1131,13367,13368],{"class":1168},"fetch recommendations",[1131,13370,4020],{"class":1164},[1131,13372,1600],{"class":1148},[1131,13374,13375,13378,13380,13383,13385,13387,13389,13391,13393,13395],{"class":1133,"line":2199},[1131,13376,13377],{"class":1330},"            recommendations ",[1131,13379,1626],{"class":1148},[1131,13381,13382],{"class":1639}," fetch_recommendations",[1131,13384,1594],{"class":1148},[1131,13386,1597],{"class":1639},[1131,13388,1333],{"class":1148},[1131,13390,1337],{"class":1336},[1131,13392,1333],{"class":1148},[1131,13394,1837],{"class":1336},[1131,13396,1761],{"class":1148},[1131,13398,13399],{"class":1133,"line":2204},[1131,13400,1784],{"class":1330},[1131,13402,13403],{"class":1133,"line":2210},[1131,13404,13405],{"class":1137},"        # Template rendering span\n",[1131,13407,13408,13410,13412,13414,13416,13418,13420,13422,13424,13427,13429,13431,13433,13435,13437,13440,13442],{"class":1133,"line":2240},[1131,13409,8471],{"class":1673},[1131,13411,13093],{"class":1330},[1131,13413,1333],{"class":1148},[1131,13415,13272],{"class":1639},[1131,13417,1594],{"class":1148},[1131,13419,13231],{"class":1743},[1131,13421,1626],{"class":1148},[1131,13423,4020],{"class":1164},[1131,13425,13426],{"class":1168},"template",[1131,13428,4020],{"class":1164},[1131,13430,1267],{"class":1148},[1131,13432,13290],{"class":1743},[1131,13434,1626],{"class":1148},[1131,13436,4020],{"class":1164},[1131,13438,13439],{"class":1168},"render dashboard",[1131,13441,4020],{"class":1164},[1131,13443,1600],{"class":1148},[1131,13445,13446,13448,13450,13452,13454,13456,13458,13460,13462,13464],{"class":1133,"line":2251},[1131,13447,4917],{"class":1673},[1131,13449,1987],{"class":1639},[1131,13451,1594],{"class":1148},[1131,13453,1597],{"class":1639},[1131,13455,1267],{"class":1148},[1131,13457,1996],{"class":1164},[1131,13459,5210],{"class":1168},[1131,13461,1172],{"class":1164},[1131,13463,1267],{"class":1148},[1131,13465,1297],{"class":1148},[1131,13467,13468,13471,13474,13476,13478,13481],{"class":1133,"line":2256},[1131,13469,13470],{"class":1164},"                '",[1131,13472,13473],{"class":1168},"user_data",[1131,13475,1172],{"class":1164},[1131,13477,1310],{"class":1148},[1131,13479,13480],{"class":1639}," user_data",[1131,13482,1175],{"class":1148},[1131,13484,13485,13487,13489,13491,13493,13495],{"class":1133,"line":2276},[1131,13486,13470],{"class":1164},[1131,13488,5176],{"class":1168},[1131,13490,1172],{"class":1164},[1131,13492,1310],{"class":1148},[1131,13494,5183],{"class":1639},[1131,13496,1175],{"class":1148},[1131,13498,13499],{"class":1133,"line":2295},[1131,13500,13501],{"class":1148},"            })\n",[1038,13503,13505],{"id":13504},"custom-performance-monitoring","Custom Performance Monitoring",[1121,13507,13509],{"className":1123,"code":13508,"language":1125,"meta":1126,"style":1126},"import time\nimport json\nfrom django.core.cache import cache\nfrom django.utils import timezone\nfrom datetime import timedelta\n\nclass PerformanceMonitor:\n    \"\"\"Custom performance monitoring system\"\"\"\n    \n    def __init__(self):\n        self.metrics = defaultdict(list)\n    \n    def record_metric(self, name, value, tags=None):\n        \"\"\"Record a performance metric\"\"\"\n        metric_data = {\n            'timestamp': timezone.now().isoformat(),\n            'value': value,\n            'tags': tags or {}\n        }\n        \n        # Store in cache for real-time access\n        cache_key = f\"metric_{name}\"\n        cached_metrics = cache.get(cache_key, [])\n        cached_metrics.append(metric_data)\n        \n        # Keep only last 1000 metrics\n        if len(cached_metrics) > 1000:\n            cached_metrics = cached_metrics[-1000:]\n        \n        cache.set(cache_key, cached_metrics, 3600)  # 1 hour\n    \n    def get_metrics(self, name, hours=1):\n        \"\"\"Get metrics for the last N hours\"\"\"\n        cache_key = f\"metric_{name}\"\n        cached_metrics = cache.get(cache_key, [])\n        \n        # Filter by time\n        cutoff_time = timezone.now() - timedelta(hours=hours)\n        recent_metrics = [\n            m for m in cached_metrics\n            if timezone.datetime.fromisoformat(m['timestamp']) > cutoff_time\n        ]\n        \n        return recent_metrics\n    \n    def calculate_percentiles(self, name, hours=1):\n        \"\"\"Calculate percentiles for a metric\"\"\"\n        metrics = self.get_metrics(name, hours)\n        values = [m['value'] for m in metrics]\n        \n        if not values:\n            return {}\n        \n        values.sort()\n        count = len(values)\n        \n        return {\n            'count': count,\n            'min': values[0],\n            'max': values[-1],\n            'median': values[count // 2],\n            'p95': values[int(count * 0.95)] if count > 20 else values[-1],\n            'p99': values[int(count * 0.99)] if count > 100 else values[-1],\n            'avg': sum(values) / count\n        }\n\n# Global monitor instance\nperformance_monitor = PerformanceMonitor()\n\n# Middleware for automatic monitoring\nclass PerformanceMonitoringMiddleware(MiddlewareMixin):\n    \"\"\"Middleware to automatically record performance metrics\"\"\"\n    \n    def process_request(self, request):\n        request.perf_start_time = time.time()\n        request.perf_start_queries = len(connection.queries) if settings.DEBUG else 0\n    \n    def process_response(self, request, response):\n        if hasattr(request, 'perf_start_time'):\n            # Calculate metrics\n            duration = time.time() - request.perf_start_time\n            \n            if settings.DEBUG:\n                query_count = len(connection.queries) - request.perf_start_queries\n                query_time = sum(\n                    float(q['time']) \n                    for q in connection.queries[request.perf_start_queries:]\n                )\n            else:\n                query_count = 0\n                query_time = 0\n            \n            # Record metrics\n            performance_monitor.record_metric('response_time', duration, {\n                'path': request.path,\n                'method': request.method,\n                'status_code': response.status_code\n            })\n            \n            performance_monitor.record_metric('database_queries', query_count, {\n                'path': request.path\n            })\n            \n            performance_monitor.record_metric('database_time', query_time, {\n                'path': request.path\n            })\n        \n        return response\n\n# Performance dashboard view\ndef performance_dashboard(request):\n    \"\"\"View to display performance metrics\"\"\"\n    hours = int(request.GET.get('hours', 1))\n    \n    # Get performance statistics\n    response_time_stats = performance_monitor.calculate_percentiles('response_time', hours)\n    query_count_stats = performance_monitor.calculate_percentiles('database_queries', hours)\n    \n    # Get recent slow requests\n    response_time_metrics = performance_monitor.get_metrics('response_time', hours)\n    slow_requests = [\n        m for m in response_time_metrics\n        if m['value'] > 1.0  # Slower than 1 second\n    ]\n    \n    context = {\n        'response_time_stats': response_time_stats,\n        'query_count_stats': query_count_stats,\n        'slow_requests': slow_requests[:20],  # Last 20 slow requests\n        'hours': hours,\n    }\n    \n    return render(request, 'performance_dashboard.html', context)\n",[1128,13510,13511,13517,13524,13544,13560,13572,13576,13585,13594,13598,13610,13630,13634,13666,13675,13684,13710,13725,13744,13748,13752,13757,13777,13801,13817,13821,13826,13845,13864,13868,13896,13900,13926,13935,13953,13973,13977,13982,14014,14023,14038,14074,14079,14083,14090,14094,14119,14128,14152,14184,14188,14199,14205,14209,14221,14236,14240,14246,14261,14281,14302,14327,14377,14425,14448,14452,14456,14461,14472,14476,14481,14494,14503,14507,14523,14542,14577,14581,14601,14621,14626,14649,14653,14665,14692,14702,14722,14746,14750,14756,14764,14772,14776,14781,14808,14826,14845,14863,14867,14871,14896,14913,14917,14921,14947,14963,14967,14971,14977,14981,14986,14999,15008,15045,15049,15054,15083,15110,15114,15119,15146,15155,15169,15193,15198,15202,15210,15226,15242,15268,15283,15288,15293],{"__ignoreMap":1126},[1131,13512,13513,13515],{"class":1133,"line":1134},[1131,13514,2910],{"class":1673},[1131,13516,5421],{"class":1330},[1131,13518,13519,13521],{"class":1133,"line":1141},[1131,13520,2910],{"class":1673},[1131,13522,13523],{"class":1330}," json\n",[1131,13525,13526,13528,13530,13532,13534,13536,13539,13541],{"class":1133,"line":1155},[1131,13527,2894],{"class":1673},[1131,13529,3795],{"class":1330},[1131,13531,1333],{"class":1148},[1131,13533,6422],{"class":1330},[1131,13535,1333],{"class":1148},[1131,13537,13538],{"class":1330},"cache ",[1131,13540,2910],{"class":1673},[1131,13542,13543],{"class":1330}," cache\n",[1131,13545,13546,13548,13550,13552,13555,13557],{"class":1133,"line":1161},[1131,13547,2894],{"class":1673},[1131,13549,3795],{"class":1330},[1131,13551,1333],{"class":1148},[1131,13553,13554],{"class":1330},"utils ",[1131,13556,2910],{"class":1673},[1131,13558,13559],{"class":1330}," timezone\n",[1131,13561,13562,13564,13567,13569],{"class":1133,"line":1178},[1131,13563,2894],{"class":1673},[1131,13565,13566],{"class":1330}," datetime ",[1131,13568,2910],{"class":1673},[1131,13570,13571],{"class":1330}," timedelta\n",[1131,13573,13574],{"class":1133,"line":1184},[1131,13575,1188],{"emptyLinePlaceholder":1187},[1131,13577,13578,13580,13583],{"class":1133,"line":1191},[1131,13579,3299],{"class":1313},[1131,13581,13582],{"class":3302}," PerformanceMonitor",[1131,13584,1686],{"class":1148},[1131,13586,13587,13589,13592],{"class":1133,"line":1201},[1131,13588,1606],{"class":1605},[1131,13590,13591],{"class":1609},"Custom performance monitoring system",[1131,13593,1613],{"class":1605},[1131,13595,13596],{"class":1133,"line":1213},[1131,13597,1653],{"class":1330},[1131,13599,13600,13602,13604,13606,13608],{"class":1133,"line":1219},[1131,13601,3375],{"class":1313},[1131,13603,6476],{"class":3967},[1131,13605,1594],{"class":1148},[1131,13607,3384],{"class":3383},[1131,13609,1600],{"class":1148},[1131,13611,13612,13614,13616,13619,13621,13623,13625,13628],{"class":1133,"line":1224},[1131,13613,6487],{"class":1144},[1131,13615,1333],{"class":1148},[1131,13617,13618],{"class":1336},"metrics",[1131,13620,1149],{"class":1148},[1131,13622,11468],{"class":1639},[1131,13624,1594],{"class":1148},[1131,13626,13627],{"class":1933},"list",[1131,13629,1761],{"class":1148},[1131,13631,13632],{"class":1133,"line":1229},[1131,13633,1653],{"class":1330},[1131,13635,13636,13638,13641,13643,13645,13647,13649,13651,13654,13656,13659,13661,13664],{"class":1133,"line":1235},[1131,13637,3375],{"class":1313},[1131,13639,13640],{"class":1590}," record_metric",[1131,13642,1594],{"class":1148},[1131,13644,3384],{"class":3383},[1131,13646,1267],{"class":1148},[1131,13648,13245],{"class":1317},[1131,13650,1267],{"class":1148},[1131,13652,13653],{"class":1317}," value",[1131,13655,1267],{"class":1148},[1131,13657,13658],{"class":1317}," tags",[1131,13660,1626],{"class":1326},[1131,13662,13663],{"class":1359},"None",[1131,13665,1600],{"class":1148},[1131,13667,13668,13670,13673],{"class":1133,"line":1245},[1131,13669,3391],{"class":1605},[1131,13671,13672],{"class":1609},"Record a performance metric",[1131,13674,1613],{"class":1605},[1131,13676,13677,13680,13682],{"class":1133,"line":1257},[1131,13678,13679],{"class":1330},"        metric_data ",[1131,13681,1626],{"class":1148},[1131,13683,1297],{"class":1148},[1131,13685,13686,13688,13691,13693,13695,13698,13700,13703,13705,13708],{"class":1133,"line":1273},[1131,13687,1877],{"class":1164},[1131,13689,13690],{"class":1168},"timestamp",[1131,13692,1172],{"class":1164},[1131,13694,1310],{"class":1148},[1131,13696,13697],{"class":1330}," timezone",[1131,13699,1333],{"class":1148},[1131,13701,13702],{"class":1639},"now",[1131,13704,3565],{"class":1148},[1131,13706,13707],{"class":1639},"isoformat",[1131,13709,3053],{"class":1148},[1131,13711,13712,13714,13717,13719,13721,13723],{"class":1133,"line":1278},[1131,13713,1877],{"class":1164},[1131,13715,13716],{"class":1168},"value",[1131,13718,1172],{"class":1164},[1131,13720,1310],{"class":1148},[1131,13722,13653],{"class":1330},[1131,13724,1175],{"class":1148},[1131,13726,13727,13729,13732,13734,13736,13739,13742],{"class":1133,"line":1283},[1131,13728,1877],{"class":1164},[1131,13730,13731],{"class":1168},"tags",[1131,13733,1172],{"class":1164},[1131,13735,1310],{"class":1148},[1131,13737,13738],{"class":1330}," tags ",[1131,13740,13741],{"class":1326},"or",[1131,13743,2248],{"class":1148},[1131,13745,13746],{"class":1133,"line":1289},[1131,13747,5619],{"class":1148},[1131,13749,13750],{"class":1133,"line":1300},[1131,13751,1784],{"class":1330},[1131,13753,13754],{"class":1133,"line":1347},[1131,13755,13756],{"class":1137},"        # Store in cache for real-time access\n",[1131,13758,13759,13762,13764,13766,13769,13771,13773,13775],{"class":1133,"line":1365},[1131,13760,13761],{"class":1330},"        cache_key ",[1131,13763,1626],{"class":1148},[1131,13765,6021],{"class":1313},[1131,13767,13768],{"class":1168},"\"metric_",[1131,13770,4030],{"class":4029},[1131,13772,2935],{"class":1330},[1131,13774,4041],{"class":4029},[1131,13776,8556],{"class":1168},[1131,13778,13779,13782,13784,13787,13789,13791,13793,13796,13798],{"class":1133,"line":1383},[1131,13780,13781],{"class":1330},"        cached_metrics ",[1131,13783,1626],{"class":1148},[1131,13785,13786],{"class":1330}," cache",[1131,13788,1333],{"class":1148},[1131,13790,2475],{"class":1639},[1131,13792,1594],{"class":1148},[1131,13794,13795],{"class":1639},"cache_key",[1131,13797,1267],{"class":1148},[1131,13799,13800],{"class":1148}," [])\n",[1131,13802,13803,13806,13808,13810,13812,13815],{"class":1133,"line":1389},[1131,13804,13805],{"class":1330},"        cached_metrics",[1131,13807,1333],{"class":1148},[1131,13809,1869],{"class":1639},[1131,13811,1594],{"class":1148},[1131,13813,13814],{"class":1639},"metric_data",[1131,13816,1761],{"class":1148},[1131,13818,13819],{"class":1133,"line":1394},[1131,13820,1784],{"class":1330},[1131,13822,13823],{"class":1133,"line":1400},[1131,13824,13825],{"class":1137},"        # Keep only last 1000 metrics\n",[1131,13827,13828,13830,13832,13834,13837,13839,13841,13843],{"class":1133,"line":1410},[1131,13829,4250],{"class":1673},[1131,13831,5587],{"class":3967},[1131,13833,1594],{"class":1148},[1131,13835,13836],{"class":1639},"cached_metrics",[1131,13838,4129],{"class":1148},[1131,13840,4239],{"class":1326},[1131,13842,9033],{"class":1377},[1131,13844,1686],{"class":1148},[1131,13846,13847,13850,13852,13855,13857,13859,13862],{"class":1133,"line":1422},[1131,13848,13849],{"class":1330},"            cached_metrics ",[1131,13851,1626],{"class":1148},[1131,13853,13854],{"class":1330}," cached_metrics",[1131,13856,2282],{"class":1148},[1131,13858,4066],{"class":1326},[1131,13860,13861],{"class":1377},"1000",[1131,13863,6637],{"class":1148},[1131,13865,13866],{"class":1133,"line":1434},[1131,13867,1784],{"class":1330},[1131,13869,13870,13873,13875,13878,13880,13882,13884,13886,13888,13891,13893],{"class":1133,"line":1446},[1131,13871,13872],{"class":1330},"        cache",[1131,13874,1333],{"class":1148},[1131,13876,13877],{"class":1639},"set",[1131,13879,1594],{"class":1148},[1131,13881,13795],{"class":1639},[1131,13883,1267],{"class":1148},[1131,13885,13854],{"class":1639},[1131,13887,1267],{"class":1148},[1131,13889,13890],{"class":1377}," 3600",[1131,13892,4129],{"class":1148},[1131,13894,13895],{"class":1137},"  # 1 hour\n",[1131,13897,13898],{"class":1133,"line":1458},[1131,13899,1653],{"class":1330},[1131,13901,13902,13904,13907,13909,13911,13913,13915,13917,13920,13922,13924],{"class":1133,"line":1470},[1131,13903,3375],{"class":1313},[1131,13905,13906],{"class":1590}," get_metrics",[1131,13908,1594],{"class":1148},[1131,13910,3384],{"class":3383},[1131,13912,1267],{"class":1148},[1131,13914,13245],{"class":1317},[1131,13916,1267],{"class":1148},[1131,13918,13919],{"class":1317}," hours",[1131,13921,1626],{"class":1326},[1131,13923,4343],{"class":1377},[1131,13925,1600],{"class":1148},[1131,13927,13928,13930,13933],{"class":1133,"line":1482},[1131,13929,3391],{"class":1605},[1131,13931,13932],{"class":1609},"Get metrics for the last N hours",[1131,13934,1613],{"class":1605},[1131,13936,13937,13939,13941,13943,13945,13947,13949,13951],{"class":1133,"line":1494},[1131,13938,13761],{"class":1330},[1131,13940,1626],{"class":1148},[1131,13942,6021],{"class":1313},[1131,13944,13768],{"class":1168},[1131,13946,4030],{"class":4029},[1131,13948,2935],{"class":1330},[1131,13950,4041],{"class":4029},[1131,13952,8556],{"class":1168},[1131,13954,13955,13957,13959,13961,13963,13965,13967,13969,13971],{"class":1133,"line":1506},[1131,13956,13781],{"class":1330},[1131,13958,1626],{"class":1148},[1131,13960,13786],{"class":1330},[1131,13962,1333],{"class":1148},[1131,13964,2475],{"class":1639},[1131,13966,1594],{"class":1148},[1131,13968,13795],{"class":1639},[1131,13970,1267],{"class":1148},[1131,13972,13800],{"class":1148},[1131,13974,13975],{"class":1133,"line":1518},[1131,13976,1784],{"class":1330},[1131,13978,13979],{"class":1133,"line":1530},[1131,13980,13981],{"class":1137},"        # Filter by time\n",[1131,13983,13984,13987,13989,13991,13993,13995,13997,14000,14003,14005,14008,14010,14012],{"class":1133,"line":1542},[1131,13985,13986],{"class":1330},"        cutoff_time ",[1131,13988,1626],{"class":1148},[1131,13990,13697],{"class":1330},[1131,13992,1333],{"class":1148},[1131,13994,13702],{"class":1639},[1131,13996,1714],{"class":1148},[1131,13998,13999],{"class":1326}," -",[1131,14001,14002],{"class":1639}," timedelta",[1131,14004,1594],{"class":1148},[1131,14006,14007],{"class":1743},"hours",[1131,14009,1626],{"class":1148},[1131,14011,14007],{"class":1639},[1131,14013,1761],{"class":1148},[1131,14015,14016,14019,14021],{"class":1133,"line":1554},[1131,14017,14018],{"class":1330},"        recent_metrics ",[1131,14020,1626],{"class":1148},[1131,14022,1152],{"class":1148},[1131,14024,14025,14028,14030,14033,14035],{"class":1133,"line":1566},[1131,14026,14027],{"class":1330},"            m ",[1131,14029,4210],{"class":1673},[1131,14031,14032],{"class":1330}," m ",[1131,14034,1680],{"class":1673},[1131,14036,14037],{"class":1330}," cached_metrics\n",[1131,14039,14040,14042,14044,14046,14049,14051,14054,14056,14059,14061,14063,14065,14067,14069,14071],{"class":1133,"line":2059},[1131,14041,5841],{"class":1673},[1131,14043,13697],{"class":1330},[1131,14045,1333],{"class":1148},[1131,14047,14048],{"class":1336},"datetime",[1131,14050,1333],{"class":1148},[1131,14052,14053],{"class":1639},"fromisoformat",[1131,14055,1594],{"class":1148},[1131,14057,14058],{"class":1639},"m",[1131,14060,2282],{"class":1148},[1131,14062,1172],{"class":1164},[1131,14064,13690],{"class":1168},[1131,14066,1172],{"class":1164},[1131,14068,3989],{"class":1148},[1131,14070,4239],{"class":1326},[1131,14072,14073],{"class":1330}," cutoff_time\n",[1131,14075,14076],{"class":1133,"line":2065},[1131,14077,14078],{"class":1148},"        ]\n",[1131,14080,14081],{"class":1133,"line":2100},[1131,14082,1784],{"class":1330},[1131,14084,14085,14087],{"class":1133,"line":2110},[1131,14086,3401],{"class":1673},[1131,14088,14089],{"class":1330}," recent_metrics\n",[1131,14091,14092],{"class":1133,"line":2124},[1131,14093,1653],{"class":1330},[1131,14095,14096,14098,14101,14103,14105,14107,14109,14111,14113,14115,14117],{"class":1133,"line":2129},[1131,14097,3375],{"class":1313},[1131,14099,14100],{"class":1590}," calculate_percentiles",[1131,14102,1594],{"class":1148},[1131,14104,3384],{"class":3383},[1131,14106,1267],{"class":1148},[1131,14108,13245],{"class":1317},[1131,14110,1267],{"class":1148},[1131,14112,13919],{"class":1317},[1131,14114,1626],{"class":1326},[1131,14116,4343],{"class":1377},[1131,14118,1600],{"class":1148},[1131,14120,14121,14123,14126],{"class":1133,"line":2135},[1131,14122,3391],{"class":1605},[1131,14124,14125],{"class":1609},"Calculate percentiles for a metric",[1131,14127,1613],{"class":1605},[1131,14129,14130,14133,14135,14137,14139,14142,14144,14146,14148,14150],{"class":1133,"line":2151},[1131,14131,14132],{"class":1330},"        metrics ",[1131,14134,1626],{"class":1148},[1131,14136,6667],{"class":1144},[1131,14138,1333],{"class":1148},[1131,14140,14141],{"class":1639},"get_metrics",[1131,14143,1594],{"class":1148},[1131,14145,2935],{"class":1639},[1131,14147,1267],{"class":1148},[1131,14149,13919],{"class":1639},[1131,14151,1761],{"class":1148},[1131,14153,14154,14157,14159,14161,14163,14165,14167,14169,14171,14173,14175,14177,14179,14182],{"class":1133,"line":2172},[1131,14155,14156],{"class":1330},"        values ",[1131,14158,1626],{"class":1148},[1131,14160,2218],{"class":1148},[1131,14162,14058],{"class":1330},[1131,14164,2282],{"class":1148},[1131,14166,1172],{"class":1164},[1131,14168,13716],{"class":1168},[1131,14170,1172],{"class":1164},[1131,14172,1776],{"class":1148},[1131,14174,2228],{"class":1673},[1131,14176,14032],{"class":1330},[1131,14178,1680],{"class":1673},[1131,14180,14181],{"class":1330}," metrics",[1131,14183,1181],{"class":1148},[1131,14185,14186],{"class":1133,"line":2193},[1131,14187,1784],{"class":1330},[1131,14189,14190,14192,14194,14197],{"class":1133,"line":2199},[1131,14191,4250],{"class":1673},[1131,14193,2844],{"class":1326},[1131,14195,14196],{"class":1330}," values",[1131,14198,1686],{"class":1148},[1131,14200,14201,14203],{"class":1133,"line":2204},[1131,14202,4917],{"class":1673},[1131,14204,2248],{"class":1148},[1131,14206,14207],{"class":1133,"line":2210},[1131,14208,1784],{"class":1330},[1131,14210,14211,14214,14216,14219],{"class":1133,"line":2240},[1131,14212,14213],{"class":1330},"        values",[1131,14215,1333],{"class":1148},[1131,14217,14218],{"class":1639},"sort",[1131,14220,3873],{"class":1148},[1131,14222,14223,14226,14228,14230,14232,14234],{"class":1133,"line":2251},[1131,14224,14225],{"class":1330},"        count ",[1131,14227,1626],{"class":1148},[1131,14229,5587],{"class":3967},[1131,14231,1594],{"class":1148},[1131,14233,3206],{"class":1639},[1131,14235,1761],{"class":1148},[1131,14237,14238],{"class":1133,"line":2256},[1131,14239,1784],{"class":1330},[1131,14241,14242,14244],{"class":1133,"line":2276},[1131,14243,3401],{"class":1673},[1131,14245,1297],{"class":1148},[1131,14247,14248,14250,14252,14254,14256,14259],{"class":1133,"line":2295},[1131,14249,1877],{"class":1164},[1131,14251,1711],{"class":1168},[1131,14253,1172],{"class":1164},[1131,14255,1310],{"class":1148},[1131,14257,14258],{"class":1330}," count",[1131,14260,1175],{"class":1148},[1131,14262,14263,14265,14268,14270,14272,14274,14276,14278],{"class":1133,"line":2319},[1131,14264,1877],{"class":1164},[1131,14266,14267],{"class":1168},"min",[1131,14269,1172],{"class":1164},[1131,14271,1310],{"class":1148},[1131,14273,14196],{"class":1330},[1131,14275,2282],{"class":1148},[1131,14277,7391],{"class":1377},[1131,14279,14280],{"class":1148},"],\n",[1131,14282,14283,14285,14288,14290,14292,14294,14296,14298,14300],{"class":1133,"line":2356},[1131,14284,1877],{"class":1164},[1131,14286,14287],{"class":1168},"max",[1131,14289,1172],{"class":1164},[1131,14291,1310],{"class":1148},[1131,14293,14196],{"class":1330},[1131,14295,2282],{"class":1148},[1131,14297,4066],{"class":1326},[1131,14299,4343],{"class":1377},[1131,14301,14280],{"class":1148},[1131,14303,14304,14306,14309,14311,14313,14315,14317,14320,14323,14325],{"class":1133,"line":2362},[1131,14305,1877],{"class":1164},[1131,14307,14308],{"class":1168},"median",[1131,14310,1172],{"class":1164},[1131,14312,1310],{"class":1148},[1131,14314,14196],{"class":1330},[1131,14316,2282],{"class":1148},[1131,14318,14319],{"class":1330},"count ",[1131,14321,14322],{"class":1326},"//",[1131,14324,5386],{"class":1377},[1131,14326,14280],{"class":1148},[1131,14328,14329,14331,14334,14336,14338,14340,14342,14344,14346,14348,14350,14353,14356,14358,14360,14362,14365,14367,14369,14371,14373,14375],{"class":1133,"line":2367},[1131,14330,1877],{"class":1164},[1131,14332,14333],{"class":1168},"p95",[1131,14335,1172],{"class":1164},[1131,14337,1310],{"class":1148},[1131,14339,14196],{"class":1330},[1131,14341,2282],{"class":1148},[1131,14343,9767],{"class":1933},[1131,14345,1594],{"class":1148},[1131,14347,14319],{"class":1639},[1131,14349,3776],{"class":1326},[1131,14351,14352],{"class":1377}," 0.95",[1131,14354,14355],{"class":1148},")]",[1131,14357,5601],{"class":1673},[1131,14359,7111],{"class":1330},[1131,14361,6303],{"class":1326},[1131,14363,14364],{"class":1377}," 20",[1131,14366,5610],{"class":1673},[1131,14368,14196],{"class":1330},[1131,14370,2282],{"class":1148},[1131,14372,4066],{"class":1326},[1131,14374,4343],{"class":1377},[1131,14376,14280],{"class":1148},[1131,14378,14379,14381,14384,14386,14388,14390,14392,14394,14396,14398,14400,14403,14405,14407,14409,14411,14413,14415,14417,14419,14421,14423],{"class":1133,"line":2373},[1131,14380,1877],{"class":1164},[1131,14382,14383],{"class":1168},"p99",[1131,14385,1172],{"class":1164},[1131,14387,1310],{"class":1148},[1131,14389,14196],{"class":1330},[1131,14391,2282],{"class":1148},[1131,14393,9767],{"class":1933},[1131,14395,1594],{"class":1148},[1131,14397,14319],{"class":1639},[1131,14399,3776],{"class":1326},[1131,14401,14402],{"class":1377}," 0.99",[1131,14404,14355],{"class":1148},[1131,14406,5601],{"class":1673},[1131,14408,7111],{"class":1330},[1131,14410,6303],{"class":1326},[1131,14412,2824],{"class":1377},[1131,14414,5610],{"class":1673},[1131,14416,14196],{"class":1330},[1131,14418,2282],{"class":1148},[1131,14420,4066],{"class":1326},[1131,14422,4343],{"class":1377},[1131,14424,14280],{"class":1148},[1131,14426,14427,14429,14431,14433,14435,14437,14439,14441,14443,14445],{"class":1133,"line":2382},[1131,14428,1877],{"class":1164},[1131,14430,1771],{"class":1168},[1131,14432,1172],{"class":1164},[1131,14434,1310],{"class":1148},[1131,14436,3968],{"class":3967},[1131,14438,1594],{"class":1148},[1131,14440,3206],{"class":1639},[1131,14442,4129],{"class":1148},[1131,14444,7751],{"class":1326},[1131,14446,14447],{"class":1330}," count\n",[1131,14449,14450],{"class":1133,"line":2395},[1131,14451,5619],{"class":1148},[1131,14453,14454],{"class":1133,"line":2406},[1131,14455,1188],{"emptyLinePlaceholder":1187},[1131,14457,14458],{"class":1133,"line":2421},[1131,14459,14460],{"class":1137},"# Global monitor instance\n",[1131,14462,14463,14466,14468,14470],{"class":1133,"line":2440},[1131,14464,14465],{"class":1330},"performance_monitor ",[1131,14467,1626],{"class":1148},[1131,14469,13582],{"class":1639},[1131,14471,3873],{"class":1148},[1131,14473,14474],{"class":1133,"line":2459},[1131,14475,1188],{"emptyLinePlaceholder":1187},[1131,14477,14478],{"class":1133,"line":2491},[1131,14479,14480],{"class":1137},"# Middleware for automatic monitoring\n",[1131,14482,14483,14485,14488,14490,14492],{"class":1133,"line":2496},[1131,14484,3299],{"class":1313},[1131,14486,14487],{"class":3302}," PerformanceMonitoringMiddleware",[1131,14489,1594],{"class":1148},[1131,14491,5503],{"class":3308},[1131,14493,1600],{"class":1148},[1131,14495,14496,14498,14501],{"class":1133,"line":2501},[1131,14497,1606],{"class":1605},[1131,14499,14500],{"class":1609},"Middleware to automatically record performance metrics",[1131,14502,1613],{"class":1605},[1131,14504,14505],{"class":1133,"line":2507},[1131,14506,1653],{"class":1330},[1131,14508,14509,14511,14513,14515,14517,14519,14521],{"class":1133,"line":2513},[1131,14510,3375],{"class":1313},[1131,14512,5525],{"class":1590},[1131,14514,1594],{"class":1148},[1131,14516,3384],{"class":3383},[1131,14518,1267],{"class":1148},[1131,14520,1318],{"class":1317},[1131,14522,1600],{"class":1148},[1131,14524,14525,14527,14529,14532,14534,14536,14538,14540],{"class":1133,"line":2519},[1131,14526,5545],{"class":1330},[1131,14528,1333],{"class":1148},[1131,14530,14531],{"class":1336},"perf_start_time",[1131,14533,1149],{"class":1148},[1131,14535,3887],{"class":1330},[1131,14537,1333],{"class":1148},[1131,14539,3892],{"class":1639},[1131,14541,3873],{"class":1148},[1131,14543,14544,14546,14548,14551,14553,14555,14557,14559,14561,14563,14565,14567,14569,14571,14573,14575],{"class":1133,"line":2525},[1131,14545,5545],{"class":1330},[1131,14547,1333],{"class":1148},[1131,14549,14550],{"class":1336},"perf_start_queries",[1131,14552,1149],{"class":1148},[1131,14554,5587],{"class":3967},[1131,14556,1594],{"class":1148},[1131,14558,5592],{"class":1639},[1131,14560,1333],{"class":1148},[1131,14562,4126],{"class":1336},[1131,14564,4129],{"class":1148},[1131,14566,5601],{"class":1673},[1131,14568,3845],{"class":1330},[1131,14570,1333],{"class":1148},[1131,14572,3861],{"class":3850},[1131,14574,5610],{"class":1673},[1131,14576,5983],{"class":1377},[1131,14578,14579],{"class":1133,"line":2530},[1131,14580,1653],{"class":1330},[1131,14582,14583,14585,14587,14589,14591,14593,14595,14597,14599],{"class":1133,"line":2553},[1131,14584,3375],{"class":1313},[1131,14586,5743],{"class":1590},[1131,14588,1594],{"class":1148},[1131,14590,3384],{"class":3383},[1131,14592,1267],{"class":1148},[1131,14594,1318],{"class":1317},[1131,14596,1267],{"class":1148},[1131,14598,5756],{"class":1317},[1131,14600,1600],{"class":1148},[1131,14602,14603,14605,14607,14609,14611,14613,14615,14617,14619],{"class":1133,"line":2566},[1131,14604,4250],{"class":1673},[1131,14606,5765],{"class":3967},[1131,14608,1594],{"class":1148},[1131,14610,1597],{"class":1639},[1131,14612,1267],{"class":1148},[1131,14614,1996],{"class":1164},[1131,14616,14531],{"class":1168},[1131,14618,1172],{"class":1164},[1131,14620,1600],{"class":1148},[1131,14622,14623],{"class":1133,"line":3959},[1131,14624,14625],{"class":1137},"            # Calculate metrics\n",[1131,14627,14628,14630,14632,14634,14636,14638,14640,14642,14644,14646],{"class":1133,"line":4004},[1131,14629,5804],{"class":1330},[1131,14631,1626],{"class":1148},[1131,14633,3887],{"class":1330},[1131,14635,1333],{"class":1148},[1131,14637,3892],{"class":1639},[1131,14639,1714],{"class":1148},[1131,14641,13999],{"class":1326},[1131,14643,1318],{"class":1330},[1131,14645,1333],{"class":1148},[1131,14647,14648],{"class":1336},"perf_start_time\n",[1131,14650,14651],{"class":1133,"line":4009},[1131,14652,4734],{"class":1330},[1131,14654,14655,14657,14659,14661,14663],{"class":1133,"line":4049},[1131,14656,5841],{"class":1673},[1131,14658,3845],{"class":1330},[1131,14660,1333],{"class":1148},[1131,14662,3861],{"class":3850},[1131,14664,1686],{"class":1148},[1131,14666,14667,14669,14671,14673,14675,14677,14679,14681,14683,14685,14687,14689],{"class":1133,"line":4082},[1131,14668,5873],{"class":1330},[1131,14670,1626],{"class":1148},[1131,14672,5587],{"class":3967},[1131,14674,1594],{"class":1148},[1131,14676,5592],{"class":1639},[1131,14678,1333],{"class":1148},[1131,14680,4126],{"class":1336},[1131,14682,4129],{"class":1148},[1131,14684,13999],{"class":1326},[1131,14686,1318],{"class":1330},[1131,14688,1333],{"class":1148},[1131,14690,14691],{"class":1336},"perf_start_queries\n",[1131,14693,14694,14696,14698,14700],{"class":1133,"line":4107},[1131,14695,5901],{"class":1330},[1131,14697,1626],{"class":1148},[1131,14699,3968],{"class":3967},[1131,14701,1738],{"class":1148},[1131,14703,14704,14706,14708,14710,14712,14714,14716,14718,14720],{"class":1133,"line":4138},[1131,14705,5912],{"class":1933},[1131,14707,1594],{"class":1148},[1131,14709,3978],{"class":1639},[1131,14711,2282],{"class":1148},[1131,14713,1172],{"class":1164},[1131,14715,3892],{"class":1168},[1131,14717,1172],{"class":1164},[1131,14719,3989],{"class":1148},[1131,14721,5668],{"class":1639},[1131,14723,14724,14726,14728,14730,14732,14734,14736,14738,14740,14742,14744],{"class":1133,"line":4186},[1131,14725,5933],{"class":1673},[1131,14727,3994],{"class":1639},[1131,14729,1680],{"class":1673},[1131,14731,3805],{"class":1639},[1131,14733,1333],{"class":1148},[1131,14735,4126],{"class":1336},[1131,14737,2282],{"class":1148},[1131,14739,1597],{"class":1336},[1131,14741,1333],{"class":1148},[1131,14743,14550],{"class":1336},[1131,14745,6637],{"class":1148},[1131,14747,14748],{"class":1133,"line":4191},[1131,14749,5967],{"class":1148},[1131,14751,14752,14754],{"class":1133,"line":4197},[1131,14753,5972],{"class":1673},[1131,14755,1686],{"class":1148},[1131,14757,14758,14760,14762],{"class":1133,"line":4247},[1131,14759,5873],{"class":1330},[1131,14761,1626],{"class":1148},[1131,14763,5983],{"class":1377},[1131,14765,14766,14768,14770],{"class":1133,"line":4258},[1131,14767,5901],{"class":1330},[1131,14769,1626],{"class":1148},[1131,14771,5983],{"class":1377},[1131,14773,14774],{"class":1133,"line":4292},[1131,14775,4734],{"class":1330},[1131,14777,14778],{"class":1133,"line":4323},[1131,14779,14780],{"class":1137},"            # Record metrics\n",[1131,14782,14783,14786,14788,14790,14792,14794,14797,14799,14801,14804,14806],{"class":1133,"line":4372},[1131,14784,14785],{"class":1330},"            performance_monitor",[1131,14787,1333],{"class":1148},[1131,14789,12980],{"class":1639},[1131,14791,1594],{"class":1148},[1131,14793,1172],{"class":1164},[1131,14795,14796],{"class":1168},"response_time",[1131,14798,1172],{"class":1164},[1131,14800,1267],{"class":1148},[1131,14802,14803],{"class":1639}," duration",[1131,14805,1267],{"class":1148},[1131,14807,1297],{"class":1148},[1131,14809,14810,14812,14814,14816,14818,14820,14822,14824],{"class":1133,"line":4412},[1131,14811,13470],{"class":1164},[1131,14813,6336],{"class":1168},[1131,14815,1172],{"class":1164},[1131,14817,1310],{"class":1148},[1131,14819,1318],{"class":1639},[1131,14821,1333],{"class":1148},[1131,14823,6336],{"class":1336},[1131,14825,1175],{"class":1148},[1131,14827,14828,14830,14833,14835,14837,14839,14841,14843],{"class":1133,"line":4417},[1131,14829,13470],{"class":1164},[1131,14831,14832],{"class":1168},"method",[1131,14834,1172],{"class":1164},[1131,14836,1310],{"class":1148},[1131,14838,1318],{"class":1639},[1131,14840,1333],{"class":1148},[1131,14842,14832],{"class":1336},[1131,14844,1175],{"class":1148},[1131,14846,14847,14849,14852,14854,14856,14858,14860],{"class":1133,"line":4423},[1131,14848,13470],{"class":1164},[1131,14850,14851],{"class":1168},"status_code",[1131,14853,1172],{"class":1164},[1131,14855,1310],{"class":1148},[1131,14857,5756],{"class":1639},[1131,14859,1333],{"class":1148},[1131,14861,14862],{"class":1336},"status_code\n",[1131,14864,14865],{"class":1133,"line":4437},[1131,14866,13501],{"class":1148},[1131,14868,14869],{"class":1133,"line":4442},[1131,14870,4734],{"class":1330},[1131,14872,14873,14875,14877,14879,14881,14883,14886,14888,14890,14892,14894],{"class":1133,"line":4450},[1131,14874,14785],{"class":1330},[1131,14876,1333],{"class":1148},[1131,14878,12980],{"class":1639},[1131,14880,1594],{"class":1148},[1131,14882,1172],{"class":1164},[1131,14884,14885],{"class":1168},"database_queries",[1131,14887,1172],{"class":1164},[1131,14889,1267],{"class":1148},[1131,14891,13068],{"class":1639},[1131,14893,1267],{"class":1148},[1131,14895,1297],{"class":1148},[1131,14897,14898,14900,14902,14904,14906,14908,14910],{"class":1133,"line":4455},[1131,14899,13470],{"class":1164},[1131,14901,6336],{"class":1168},[1131,14903,1172],{"class":1164},[1131,14905,1310],{"class":1148},[1131,14907,1318],{"class":1639},[1131,14909,1333],{"class":1148},[1131,14911,14912],{"class":1336},"path\n",[1131,14914,14915],{"class":1133,"line":4463},[1131,14916,13501],{"class":1148},[1131,14918,14919],{"class":1133,"line":4468},[1131,14920,4734],{"class":1330},[1131,14922,14923,14925,14927,14929,14931,14933,14936,14938,14940,14943,14945],{"class":1133,"line":4474},[1131,14924,14785],{"class":1330},[1131,14926,1333],{"class":1148},[1131,14928,12980],{"class":1639},[1131,14930,1594],{"class":1148},[1131,14932,1172],{"class":1164},[1131,14934,14935],{"class":1168},"database_time",[1131,14937,1172],{"class":1164},[1131,14939,1267],{"class":1148},[1131,14941,14942],{"class":1639}," query_time",[1131,14944,1267],{"class":1148},[1131,14946,1297],{"class":1148},[1131,14948,14949,14951,14953,14955,14957,14959,14961],{"class":1133,"line":4482},[1131,14950,13470],{"class":1164},[1131,14952,6336],{"class":1168},[1131,14954,1172],{"class":1164},[1131,14956,1310],{"class":1148},[1131,14958,1318],{"class":1639},[1131,14960,1333],{"class":1148},[1131,14962,14912],{"class":1336},[1131,14964,14965],{"class":1133,"line":4493},[1131,14966,13501],{"class":1148},[1131,14968,14969],{"class":1133,"line":4503},[1131,14970,1784],{"class":1330},[1131,14972,14973,14975],{"class":1133,"line":4509},[1131,14974,3401],{"class":1673},[1131,14976,6383],{"class":1330},[1131,14978,14979],{"class":1133,"line":8189},[1131,14980,1188],{"emptyLinePlaceholder":1187},[1131,14982,14983],{"class":1133,"line":8194},[1131,14984,14985],{"class":1137},"# Performance dashboard view\n",[1131,14987,14988,14990,14993,14995,14997],{"class":1133,"line":8200},[1131,14989,1587],{"class":1313},[1131,14991,14992],{"class":1590}," performance_dashboard",[1131,14994,1594],{"class":1148},[1131,14996,1597],{"class":1317},[1131,14998,1600],{"class":1148},[1131,15000,15001,15003,15006],{"class":1133,"line":8223},[1131,15002,1606],{"class":1605},[1131,15004,15005],{"class":1609},"View to display performance metrics",[1131,15007,1613],{"class":1605},[1131,15009,15010,15013,15015,15018,15020,15022,15024,15026,15028,15030,15032,15034,15036,15038,15040,15043],{"class":1133,"line":8228},[1131,15011,15012],{"class":1330},"    hours ",[1131,15014,1626],{"class":1148},[1131,15016,15017],{"class":1933}," int",[1131,15019,1594],{"class":1148},[1131,15021,1597],{"class":1639},[1131,15023,1333],{"class":1148},[1131,15025,4670],{"class":3850},[1131,15027,1333],{"class":1148},[1131,15029,2475],{"class":1639},[1131,15031,1594],{"class":1148},[1131,15033,1172],{"class":1164},[1131,15035,14007],{"class":1168},[1131,15037,1172],{"class":1164},[1131,15039,1267],{"class":1148},[1131,15041,15042],{"class":1377}," 1",[1131,15044,3242],{"class":1148},[1131,15046,15047],{"class":1133,"line":8234},[1131,15048,1653],{"class":1330},[1131,15050,15051],{"class":1133,"line":8247},[1131,15052,15053],{"class":1137},"    # Get performance statistics\n",[1131,15055,15056,15059,15061,15064,15066,15069,15071,15073,15075,15077,15079,15081],{"class":1133,"line":8268},[1131,15057,15058],{"class":1330},"    response_time_stats ",[1131,15060,1626],{"class":1148},[1131,15062,15063],{"class":1330}," performance_monitor",[1131,15065,1333],{"class":1148},[1131,15067,15068],{"class":1639},"calculate_percentiles",[1131,15070,1594],{"class":1148},[1131,15072,1172],{"class":1164},[1131,15074,14796],{"class":1168},[1131,15076,1172],{"class":1164},[1131,15078,1267],{"class":1148},[1131,15080,13919],{"class":1639},[1131,15082,1761],{"class":1148},[1131,15084,15085,15088,15090,15092,15094,15096,15098,15100,15102,15104,15106,15108],{"class":1133,"line":8273},[1131,15086,15087],{"class":1330},"    query_count_stats ",[1131,15089,1626],{"class":1148},[1131,15091,15063],{"class":1330},[1131,15093,1333],{"class":1148},[1131,15095,15068],{"class":1639},[1131,15097,1594],{"class":1148},[1131,15099,1172],{"class":1164},[1131,15101,14885],{"class":1168},[1131,15103,1172],{"class":1164},[1131,15105,1267],{"class":1148},[1131,15107,13919],{"class":1639},[1131,15109,1761],{"class":1148},[1131,15111,15112],{"class":1133,"line":8279},[1131,15113,1653],{"class":1330},[1131,15115,15116],{"class":1133,"line":8297},[1131,15117,15118],{"class":1137},"    # Get recent slow requests\n",[1131,15120,15121,15124,15126,15128,15130,15132,15134,15136,15138,15140,15142,15144],{"class":1133,"line":8314},[1131,15122,15123],{"class":1330},"    response_time_metrics ",[1131,15125,1626],{"class":1148},[1131,15127,15063],{"class":1330},[1131,15129,1333],{"class":1148},[1131,15131,14141],{"class":1639},[1131,15133,1594],{"class":1148},[1131,15135,1172],{"class":1164},[1131,15137,14796],{"class":1168},[1131,15139,1172],{"class":1164},[1131,15141,1267],{"class":1148},[1131,15143,13919],{"class":1639},[1131,15145,1761],{"class":1148},[1131,15147,15148,15151,15153],{"class":1133,"line":8319},[1131,15149,15150],{"class":1330},"    slow_requests ",[1131,15152,1626],{"class":1148},[1131,15154,1152],{"class":1148},[1131,15156,15157,15160,15162,15164,15166],{"class":1133,"line":10087},[1131,15158,15159],{"class":1330},"        m ",[1131,15161,4210],{"class":1673},[1131,15163,14032],{"class":1330},[1131,15165,1680],{"class":1673},[1131,15167,15168],{"class":1330}," response_time_metrics\n",[1131,15170,15171,15173,15176,15178,15180,15182,15184,15186,15188,15190],{"class":1133,"line":10107},[1131,15172,4250],{"class":1673},[1131,15174,15175],{"class":1330}," m",[1131,15177,2282],{"class":1148},[1131,15179,1172],{"class":1164},[1131,15181,13716],{"class":1168},[1131,15183,1172],{"class":1164},[1131,15185,1776],{"class":1148},[1131,15187,4239],{"class":1326},[1131,15189,6306],{"class":1377},[1131,15191,15192],{"class":1137},"  # Slower than 1 second\n",[1131,15194,15195],{"class":1133,"line":10126},[1131,15196,15197],{"class":1148},"    ]\n",[1131,15199,15200],{"class":1133,"line":10131},[1131,15201,1653],{"class":1330},[1131,15203,15204,15206,15208],{"class":1133,"line":10140},[1131,15205,5133],{"class":1330},[1131,15207,1626],{"class":1148},[1131,15209,1297],{"class":1148},[1131,15211,15212,15214,15217,15219,15221,15224],{"class":1133,"line":10166},[1131,15213,2010],{"class":1164},[1131,15215,15216],{"class":1168},"response_time_stats",[1131,15218,1172],{"class":1164},[1131,15220,1310],{"class":1148},[1131,15222,15223],{"class":1330}," response_time_stats",[1131,15225,1175],{"class":1148},[1131,15227,15228,15230,15233,15235,15237,15240],{"class":1133,"line":10179},[1131,15229,2010],{"class":1164},[1131,15231,15232],{"class":1168},"query_count_stats",[1131,15234,1172],{"class":1164},[1131,15236,1310],{"class":1148},[1131,15238,15239],{"class":1330}," query_count_stats",[1131,15241,1175],{"class":1148},[1131,15243,15245,15247,15250,15252,15254,15257,15259,15262,15265],{"class":1133,"line":15244},129,[1131,15246,2010],{"class":1164},[1131,15248,15249],{"class":1168},"slow_requests",[1131,15251,1172],{"class":1164},[1131,15253,1310],{"class":1148},[1131,15255,15256],{"class":1330}," slow_requests",[1131,15258,4315],{"class":1148},[1131,15260,15261],{"class":1377},"20",[1131,15263,15264],{"class":1148},"],",[1131,15266,15267],{"class":1137},"  # Last 20 slow requests\n",[1131,15269,15271,15273,15275,15277,15279,15281],{"class":1133,"line":15270},130,[1131,15272,2010],{"class":1164},[1131,15274,14007],{"class":1168},[1131,15276,1172],{"class":1164},[1131,15278,1310],{"class":1148},[1131,15280,13919],{"class":1330},[1131,15282,1175],{"class":1148},[1131,15284,15286],{"class":1133,"line":15285},131,[1131,15287,3274],{"class":1148},[1131,15289,15291],{"class":1133,"line":15290},132,[1131,15292,1653],{"class":1330},[1131,15294,15296,15298,15300,15302,15304,15306,15308,15311,15313,15315,15317],{"class":1133,"line":15295},133,[1131,15297,1984],{"class":1673},[1131,15299,1987],{"class":1639},[1131,15301,1594],{"class":1148},[1131,15303,1597],{"class":1639},[1131,15305,1267],{"class":1148},[1131,15307,1996],{"class":1164},[1131,15309,15310],{"class":1168},"performance_dashboard.html",[1131,15312,1172],{"class":1164},[1131,15314,1267],{"class":1148},[1131,15316,5217],{"class":1639},[1131,15318,1761],{"class":1148},[1030,15320,15322],{"id":15321},"performance-testing-and-benchmarking","Performance Testing and Benchmarking",[1038,15324,15326],{"id":15325},"load-testing-with-locust","Load Testing with Locust",[1121,15328,15330],{"className":1123,"code":15329,"language":1125,"meta":1126,"style":1126},"# locustfile.py\nfrom locust import HttpUser, task, between\nimport random\n\nclass DjangoUser(HttpUser):\n    wait_time = between(1, 3)\n    \n    def on_start(self):\n        \"\"\"Login user at start\"\"\"\n        response = self.client.post(\"/login/\", {\n            \"username\": \"testuser\",\n            \"password\": \"testpass\"\n        })\n        \n        if response.status_code != 200:\n            print(f\"Login failed: {response.status_code}\")\n    \n    @task(3)\n    def view_homepage(self):\n        \"\"\"Test homepage performance\"\"\"\n        with self.client.get(\"/\", catch_response=True) as response:\n            if response.status_code == 200:\n                if response.elapsed.total_seconds() > 2.0:\n                    response.failure(f\"Homepage too slow: {response.elapsed.total_seconds()}s\")\n            else:\n                response.failure(f\"Homepage failed: {response.status_code}\")\n    \n    @task(2)\n    def view_product_list(self):\n        \"\"\"Test product list performance\"\"\"\n        page = random.randint(1, 10)\n        with self.client.get(f\"/products/?page={page}\", catch_response=True) as response:\n            if response.status_code == 200:\n                # Check for performance indicators\n                if \"X-DB-Queries\" in response.headers:\n                    query_count = int(response.headers[\"X-DB-Queries\"])\n                    if query_count > 20:\n                        response.failure(f\"Too many queries: {query_count}\")\n                \n                if response.elapsed.total_seconds() > 1.0:\n                    response.failure(f\"Product list too slow: {response.elapsed.total_seconds()}s\")\n            else:\n                response.failure(f\"Product list failed: {response.status_code}\")\n    \n    @task(1)\n    def view_product_detail(self):\n        \"\"\"Test product detail performance\"\"\"\n        product_id = random.randint(1, 1000)\n        with self.client.get(f\"/products/{product_id}/\", catch_response=True) as response:\n            if response.status_code == 200:\n                if response.elapsed.total_seconds() > 0.5:\n                    response.failure(f\"Product detail too slow: {response.elapsed.total_seconds()}s\")\n            elif response.status_code == 404:\n                # 404 is acceptable for random product IDs\n                pass\n            else:\n                response.failure(f\"Product detail failed: {response.status_code}\")\n    \n    @task(1)\n    def search_products(self):\n        \"\"\"Test search performance\"\"\"\n        search_terms = [\"laptop\", \"phone\", \"book\", \"shirt\", \"shoes\"]\n        term = random.choice(search_terms)\n        \n        with self.client.get(f\"/search/?q={term}\", catch_response=True) as response:\n            if response.status_code == 200:\n                if response.elapsed.total_seconds() > 1.5:\n                    response.failure(f\"Search too slow: {response.elapsed.total_seconds()}s\")\n            else:\n                response.failure(f\"Search failed: {response.status_code}\")\n\n# Run with: locust -f locustfile.py --host=http://localhost:8000\n",[1128,15331,15332,15337,15359,15366,15370,15384,15405,15409,15422,15431,15463,15484,15502,15506,15510,15527,15552,15556,15569,15582,15591,15630,15646,15672,15709,15715,15745,15749,15762,15775,15784,15809,15855,15871,15876,15897,15924,15938,15964,15968,15990,16025,16031,16060,16064,16076,16089,16098,16121,16168,16184,16207,16242,16259,16264,16269,16275,16304,16308,16320,16333,16342,16396,16417,16421,16467,16483,16506,16541,16547,16576,16580],{"__ignoreMap":1126},[1131,15333,15334],{"class":1133,"line":1134},[1131,15335,15336],{"class":1137},"# locustfile.py\n",[1131,15338,15339,15341,15344,15346,15349,15351,15354,15356],{"class":1133,"line":1141},[1131,15340,2894],{"class":1673},[1131,15342,15343],{"class":1330}," locust ",[1131,15345,2910],{"class":1673},[1131,15347,15348],{"class":1330}," HttpUser",[1131,15350,1267],{"class":1148},[1131,15352,15353],{"class":1330}," task",[1131,15355,1267],{"class":1148},[1131,15357,15358],{"class":1330}," between\n",[1131,15360,15361,15363],{"class":1133,"line":1155},[1131,15362,2910],{"class":1673},[1131,15364,15365],{"class":1330}," random\n",[1131,15367,15368],{"class":1133,"line":1161},[1131,15369,1188],{"emptyLinePlaceholder":1187},[1131,15371,15372,15374,15377,15379,15382],{"class":1133,"line":1178},[1131,15373,3299],{"class":1313},[1131,15375,15376],{"class":3302}," DjangoUser",[1131,15378,1594],{"class":1148},[1131,15380,15381],{"class":3308},"HttpUser",[1131,15383,1600],{"class":1148},[1131,15385,15386,15389,15391,15394,15396,15398,15400,15403],{"class":1133,"line":1184},[1131,15387,15388],{"class":1330},"    wait_time ",[1131,15390,1626],{"class":1148},[1131,15392,15393],{"class":1639}," between",[1131,15395,1594],{"class":1148},[1131,15397,4343],{"class":1377},[1131,15399,1267],{"class":1148},[1131,15401,15402],{"class":1377}," 3",[1131,15404,1761],{"class":1148},[1131,15406,15407],{"class":1133,"line":1191},[1131,15408,1653],{"class":1330},[1131,15410,15411,15413,15416,15418,15420],{"class":1133,"line":1201},[1131,15412,3375],{"class":1313},[1131,15414,15415],{"class":1590}," on_start",[1131,15417,1594],{"class":1148},[1131,15419,3384],{"class":3383},[1131,15421,1600],{"class":1148},[1131,15423,15424,15426,15429],{"class":1133,"line":1213},[1131,15425,3391],{"class":1605},[1131,15427,15428],{"class":1609},"Login user at start",[1131,15430,1613],{"class":1605},[1131,15432,15433,15436,15438,15440,15442,15445,15447,15450,15452,15454,15457,15459,15461],{"class":1133,"line":1219},[1131,15434,15435],{"class":1330},"        response ",[1131,15437,1626],{"class":1148},[1131,15439,6667],{"class":1144},[1131,15441,1333],{"class":1148},[1131,15443,15444],{"class":1336},"client",[1131,15446,1333],{"class":1148},[1131,15448,15449],{"class":1639},"post",[1131,15451,1594],{"class":1148},[1131,15453,4020],{"class":1164},[1131,15455,15456],{"class":1168},"/login/",[1131,15458,4020],{"class":1164},[1131,15460,1267],{"class":1148},[1131,15462,1297],{"class":1148},[1131,15464,15465,15468,15471,15473,15475,15477,15480,15482],{"class":1133,"line":1224},[1131,15466,15467],{"class":1164},"            \"",[1131,15469,15470],{"class":1168},"username",[1131,15472,4020],{"class":1164},[1131,15474,1310],{"class":1148},[1131,15476,7560],{"class":1164},[1131,15478,15479],{"class":1168},"testuser",[1131,15481,4020],{"class":1164},[1131,15483,1175],{"class":1148},[1131,15485,15486,15488,15491,15493,15495,15497,15500],{"class":1133,"line":1229},[1131,15487,15467],{"class":1164},[1131,15489,15490],{"class":1168},"password",[1131,15492,4020],{"class":1164},[1131,15494,1310],{"class":1148},[1131,15496,7560],{"class":1164},[1131,15498,15499],{"class":1168},"testpass",[1131,15501,8556],{"class":1164},[1131,15503,15504],{"class":1133,"line":1235},[1131,15505,1946],{"class":1148},[1131,15507,15508],{"class":1133,"line":1245},[1131,15509,1784],{"class":1330},[1131,15511,15512,15514,15516,15518,15520,15523,15525],{"class":1133,"line":1257},[1131,15513,4250],{"class":1673},[1131,15515,5756],{"class":1330},[1131,15517,1333],{"class":1148},[1131,15519,14851],{"class":1336},[1131,15521,15522],{"class":1326}," !=",[1131,15524,6938],{"class":1377},[1131,15526,1686],{"class":1148},[1131,15528,15529,15531,15533,15535,15538,15540,15542,15544,15546,15548,15550],{"class":1133,"line":1273},[1131,15530,4261],{"class":3967},[1131,15532,1594],{"class":1148},[1131,15534,4017],{"class":1313},[1131,15536,15537],{"class":1168},"\"Login failed: ",[1131,15539,4030],{"class":4029},[1131,15541,12694],{"class":1639},[1131,15543,1333],{"class":1148},[1131,15545,14851],{"class":1336},[1131,15547,4041],{"class":4029},[1131,15549,4020],{"class":1168},[1131,15551,1761],{"class":1148},[1131,15553,15554],{"class":1133,"line":1278},[1131,15555,1653],{"class":1330},[1131,15557,15558,15560,15563,15565,15567],{"class":1133,"line":1283},[1131,15559,3353],{"class":1148},[1131,15561,15562],{"class":1590},"task",[1131,15564,1594],{"class":1148},[1131,15566,8088],{"class":1377},[1131,15568,1761],{"class":1148},[1131,15570,15571,15573,15576,15578,15580],{"class":1133,"line":1289},[1131,15572,3375],{"class":1313},[1131,15574,15575],{"class":1590}," view_homepage",[1131,15577,1594],{"class":1148},[1131,15579,3384],{"class":3383},[1131,15581,1600],{"class":1148},[1131,15583,15584,15586,15589],{"class":1133,"line":1300},[1131,15585,3391],{"class":1605},[1131,15587,15588],{"class":1609},"Test homepage performance",[1131,15590,1613],{"class":1605},[1131,15592,15593,15595,15597,15599,15601,15603,15605,15607,15609,15611,15613,15615,15618,15620,15622,15624,15626,15628],{"class":1133,"line":1347},[1131,15594,8471],{"class":1673},[1131,15596,6667],{"class":1144},[1131,15598,1333],{"class":1148},[1131,15600,15444],{"class":1336},[1131,15602,1333],{"class":1148},[1131,15604,2475],{"class":1639},[1131,15606,1594],{"class":1148},[1131,15608,4020],{"class":1164},[1131,15610,4157],{"class":1168},[1131,15612,4020],{"class":1164},[1131,15614,1267],{"class":1148},[1131,15616,15617],{"class":1743}," catch_response",[1131,15619,1626],{"class":1148},[1131,15621,3449],{"class":1359},[1131,15623,4129],{"class":1148},[1131,15625,8483],{"class":1673},[1131,15627,5756],{"class":1330},[1131,15629,1686],{"class":1148},[1131,15631,15632,15634,15636,15638,15640,15642,15644],{"class":1133,"line":1365},[1131,15633,5841],{"class":1673},[1131,15635,5756],{"class":1330},[1131,15637,1333],{"class":1148},[1131,15639,14851],{"class":1336},[1131,15641,4687],{"class":1326},[1131,15643,6938],{"class":1377},[1131,15645,1686],{"class":1148},[1131,15647,15648,15651,15653,15655,15658,15660,15663,15665,15667,15670],{"class":1133,"line":1383},[1131,15649,15650],{"class":1673},"                if",[1131,15652,5756],{"class":1330},[1131,15654,1333],{"class":1148},[1131,15656,15657],{"class":1336},"elapsed",[1131,15659,1333],{"class":1148},[1131,15661,15662],{"class":1639},"total_seconds",[1131,15664,1714],{"class":1148},[1131,15666,4239],{"class":1326},[1131,15668,15669],{"class":1377}," 2.0",[1131,15671,1686],{"class":1148},[1131,15673,15674,15677,15679,15682,15684,15686,15689,15691,15693,15695,15697,15699,15701,15703,15705,15707],{"class":1133,"line":1389},[1131,15675,15676],{"class":1330},"                    response",[1131,15678,1333],{"class":1148},[1131,15680,15681],{"class":1639},"failure",[1131,15683,1594],{"class":1148},[1131,15685,4017],{"class":1313},[1131,15687,15688],{"class":1168},"\"Homepage too slow: ",[1131,15690,4030],{"class":4029},[1131,15692,12694],{"class":1639},[1131,15694,1333],{"class":1148},[1131,15696,15657],{"class":1336},[1131,15698,1333],{"class":1148},[1131,15700,15662],{"class":1639},[1131,15702,1714],{"class":1148},[1131,15704,4041],{"class":4029},[1131,15706,4077],{"class":1168},[1131,15708,1761],{"class":1148},[1131,15710,15711,15713],{"class":1133,"line":1394},[1131,15712,5972],{"class":1673},[1131,15714,1686],{"class":1148},[1131,15716,15717,15720,15722,15724,15726,15728,15731,15733,15735,15737,15739,15741,15743],{"class":1133,"line":1400},[1131,15718,15719],{"class":1330},"                response",[1131,15721,1333],{"class":1148},[1131,15723,15681],{"class":1639},[1131,15725,1594],{"class":1148},[1131,15727,4017],{"class":1313},[1131,15729,15730],{"class":1168},"\"Homepage failed: ",[1131,15732,4030],{"class":4029},[1131,15734,12694],{"class":1639},[1131,15736,1333],{"class":1148},[1131,15738,14851],{"class":1336},[1131,15740,4041],{"class":4029},[1131,15742,4020],{"class":1168},[1131,15744,1761],{"class":1148},[1131,15746,15747],{"class":1133,"line":1410},[1131,15748,1653],{"class":1330},[1131,15750,15751,15753,15755,15757,15760],{"class":1133,"line":1422},[1131,15752,3353],{"class":1148},[1131,15754,15562],{"class":1590},[1131,15756,1594],{"class":1148},[1131,15758,15759],{"class":1377},"2",[1131,15761,1761],{"class":1148},[1131,15763,15764,15766,15769,15771,15773],{"class":1133,"line":1434},[1131,15765,3375],{"class":1313},[1131,15767,15768],{"class":1590}," view_product_list",[1131,15770,1594],{"class":1148},[1131,15772,3384],{"class":3383},[1131,15774,1600],{"class":1148},[1131,15776,15777,15779,15782],{"class":1133,"line":1446},[1131,15778,3391],{"class":1605},[1131,15780,15781],{"class":1609},"Test product list performance",[1131,15783,1613],{"class":1605},[1131,15785,15786,15789,15791,15794,15796,15799,15801,15803,15805,15807],{"class":1133,"line":1458},[1131,15787,15788],{"class":1330},"        page ",[1131,15790,1626],{"class":1148},[1131,15792,15793],{"class":1330}," random",[1131,15795,1333],{"class":1148},[1131,15797,15798],{"class":1639},"randint",[1131,15800,1594],{"class":1148},[1131,15802,4343],{"class":1377},[1131,15804,1267],{"class":1148},[1131,15806,1378],{"class":1377},[1131,15808,1761],{"class":1148},[1131,15810,15811,15813,15815,15817,15819,15821,15823,15825,15827,15830,15832,15835,15837,15839,15841,15843,15845,15847,15849,15851,15853],{"class":1133,"line":1470},[1131,15812,8471],{"class":1673},[1131,15814,6667],{"class":1144},[1131,15816,1333],{"class":1148},[1131,15818,15444],{"class":1336},[1131,15820,1333],{"class":1148},[1131,15822,2475],{"class":1639},[1131,15824,1594],{"class":1148},[1131,15826,4017],{"class":1313},[1131,15828,15829],{"class":1168},"\"/products/?page=",[1131,15831,4030],{"class":4029},[1131,15833,15834],{"class":1639},"page",[1131,15836,4041],{"class":4029},[1131,15838,4020],{"class":1168},[1131,15840,1267],{"class":1148},[1131,15842,15617],{"class":1743},[1131,15844,1626],{"class":1148},[1131,15846,3449],{"class":1359},[1131,15848,4129],{"class":1148},[1131,15850,8483],{"class":1673},[1131,15852,5756],{"class":1330},[1131,15854,1686],{"class":1148},[1131,15856,15857,15859,15861,15863,15865,15867,15869],{"class":1133,"line":1482},[1131,15858,5841],{"class":1673},[1131,15860,5756],{"class":1330},[1131,15862,1333],{"class":1148},[1131,15864,14851],{"class":1336},[1131,15866,4687],{"class":1326},[1131,15868,6938],{"class":1377},[1131,15870,1686],{"class":1148},[1131,15872,15873],{"class":1133,"line":1494},[1131,15874,15875],{"class":1137},"                # Check for performance indicators\n",[1131,15877,15878,15880,15882,15884,15886,15888,15890,15892,15895],{"class":1133,"line":1506},[1131,15879,15650],{"class":1673},[1131,15881,7560],{"class":1164},[1131,15883,6046],{"class":1168},[1131,15885,4020],{"class":1164},[1131,15887,12222],{"class":1326},[1131,15889,5756],{"class":1330},[1131,15891,1333],{"class":1148},[1131,15893,15894],{"class":1336},"headers",[1131,15896,1686],{"class":1148},[1131,15898,15899,15902,15904,15906,15908,15910,15912,15914,15916,15918,15920,15922],{"class":1133,"line":1518},[1131,15900,15901],{"class":1330},"                    query_count ",[1131,15903,1626],{"class":1148},[1131,15905,15017],{"class":1933},[1131,15907,1594],{"class":1148},[1131,15909,12694],{"class":1639},[1131,15911,1333],{"class":1148},[1131,15913,15894],{"class":1336},[1131,15915,2282],{"class":1148},[1131,15917,4020],{"class":1164},[1131,15919,6046],{"class":1168},[1131,15921,4020],{"class":1164},[1131,15923,7217],{"class":1148},[1131,15925,15926,15929,15932,15934,15936],{"class":1133,"line":1530},[1131,15927,15928],{"class":1673},"                    if",[1131,15930,15931],{"class":1330}," query_count ",[1131,15933,6303],{"class":1326},[1131,15935,14364],{"class":1377},[1131,15937,1686],{"class":1148},[1131,15939,15940,15943,15945,15947,15949,15951,15954,15956,15958,15960,15962],{"class":1133,"line":1542},[1131,15941,15942],{"class":1330},"                        response",[1131,15944,1333],{"class":1148},[1131,15946,15681],{"class":1639},[1131,15948,1594],{"class":1148},[1131,15950,4017],{"class":1313},[1131,15952,15953],{"class":1168},"\"Too many queries: ",[1131,15955,4030],{"class":4029},[1131,15957,6060],{"class":1639},[1131,15959,4041],{"class":4029},[1131,15961,4020],{"class":1168},[1131,15963,1761],{"class":1148},[1131,15965,15966],{"class":1133,"line":1554},[1131,15967,6143],{"class":1330},[1131,15969,15970,15972,15974,15976,15978,15980,15982,15984,15986,15988],{"class":1133,"line":1566},[1131,15971,15650],{"class":1673},[1131,15973,5756],{"class":1330},[1131,15975,1333],{"class":1148},[1131,15977,15657],{"class":1336},[1131,15979,1333],{"class":1148},[1131,15981,15662],{"class":1639},[1131,15983,1714],{"class":1148},[1131,15985,4239],{"class":1326},[1131,15987,6306],{"class":1377},[1131,15989,1686],{"class":1148},[1131,15991,15992,15994,15996,15998,16000,16002,16005,16007,16009,16011,16013,16015,16017,16019,16021,16023],{"class":1133,"line":2059},[1131,15993,15676],{"class":1330},[1131,15995,1333],{"class":1148},[1131,15997,15681],{"class":1639},[1131,15999,1594],{"class":1148},[1131,16001,4017],{"class":1313},[1131,16003,16004],{"class":1168},"\"Product list too slow: ",[1131,16006,4030],{"class":4029},[1131,16008,12694],{"class":1639},[1131,16010,1333],{"class":1148},[1131,16012,15657],{"class":1336},[1131,16014,1333],{"class":1148},[1131,16016,15662],{"class":1639},[1131,16018,1714],{"class":1148},[1131,16020,4041],{"class":4029},[1131,16022,4077],{"class":1168},[1131,16024,1761],{"class":1148},[1131,16026,16027,16029],{"class":1133,"line":2065},[1131,16028,5972],{"class":1673},[1131,16030,1686],{"class":1148},[1131,16032,16033,16035,16037,16039,16041,16043,16046,16048,16050,16052,16054,16056,16058],{"class":1133,"line":2100},[1131,16034,15719],{"class":1330},[1131,16036,1333],{"class":1148},[1131,16038,15681],{"class":1639},[1131,16040,1594],{"class":1148},[1131,16042,4017],{"class":1313},[1131,16044,16045],{"class":1168},"\"Product list failed: ",[1131,16047,4030],{"class":4029},[1131,16049,12694],{"class":1639},[1131,16051,1333],{"class":1148},[1131,16053,14851],{"class":1336},[1131,16055,4041],{"class":4029},[1131,16057,4020],{"class":1168},[1131,16059,1761],{"class":1148},[1131,16061,16062],{"class":1133,"line":2110},[1131,16063,1653],{"class":1330},[1131,16065,16066,16068,16070,16072,16074],{"class":1133,"line":2124},[1131,16067,3353],{"class":1148},[1131,16069,15562],{"class":1590},[1131,16071,1594],{"class":1148},[1131,16073,4343],{"class":1377},[1131,16075,1761],{"class":1148},[1131,16077,16078,16080,16083,16085,16087],{"class":1133,"line":2129},[1131,16079,3375],{"class":1313},[1131,16081,16082],{"class":1590}," view_product_detail",[1131,16084,1594],{"class":1148},[1131,16086,3384],{"class":3383},[1131,16088,1600],{"class":1148},[1131,16090,16091,16093,16096],{"class":1133,"line":2135},[1131,16092,3391],{"class":1605},[1131,16094,16095],{"class":1609},"Test product detail performance",[1131,16097,1613],{"class":1605},[1131,16099,16100,16103,16105,16107,16109,16111,16113,16115,16117,16119],{"class":1133,"line":2151},[1131,16101,16102],{"class":1330},"        product_id ",[1131,16104,1626],{"class":1148},[1131,16106,15793],{"class":1330},[1131,16108,1333],{"class":1148},[1131,16110,15798],{"class":1639},[1131,16112,1594],{"class":1148},[1131,16114,4343],{"class":1377},[1131,16116,1267],{"class":1148},[1131,16118,9033],{"class":1377},[1131,16120,1761],{"class":1148},[1131,16122,16123,16125,16127,16129,16131,16133,16135,16137,16139,16142,16144,16147,16149,16152,16154,16156,16158,16160,16162,16164,16166],{"class":1133,"line":2172},[1131,16124,8471],{"class":1673},[1131,16126,6667],{"class":1144},[1131,16128,1333],{"class":1148},[1131,16130,15444],{"class":1336},[1131,16132,1333],{"class":1148},[1131,16134,2475],{"class":1639},[1131,16136,1594],{"class":1148},[1131,16138,4017],{"class":1313},[1131,16140,16141],{"class":1168},"\"/products/",[1131,16143,4030],{"class":4029},[1131,16145,16146],{"class":1639},"product_id",[1131,16148,4041],{"class":4029},[1131,16150,16151],{"class":1168},"/\"",[1131,16153,1267],{"class":1148},[1131,16155,15617],{"class":1743},[1131,16157,1626],{"class":1148},[1131,16159,3449],{"class":1359},[1131,16161,4129],{"class":1148},[1131,16163,8483],{"class":1673},[1131,16165,5756],{"class":1330},[1131,16167,1686],{"class":1148},[1131,16169,16170,16172,16174,16176,16178,16180,16182],{"class":1133,"line":2193},[1131,16171,5841],{"class":1673},[1131,16173,5756],{"class":1330},[1131,16175,1333],{"class":1148},[1131,16177,14851],{"class":1336},[1131,16179,4687],{"class":1326},[1131,16181,6938],{"class":1377},[1131,16183,1686],{"class":1148},[1131,16185,16186,16188,16190,16192,16194,16196,16198,16200,16202,16205],{"class":1133,"line":2199},[1131,16187,15650],{"class":1673},[1131,16189,5756],{"class":1330},[1131,16191,1333],{"class":1148},[1131,16193,15657],{"class":1336},[1131,16195,1333],{"class":1148},[1131,16197,15662],{"class":1639},[1131,16199,1714],{"class":1148},[1131,16201,4239],{"class":1326},[1131,16203,16204],{"class":1377}," 0.5",[1131,16206,1686],{"class":1148},[1131,16208,16209,16211,16213,16215,16217,16219,16222,16224,16226,16228,16230,16232,16234,16236,16238,16240],{"class":1133,"line":2204},[1131,16210,15676],{"class":1330},[1131,16212,1333],{"class":1148},[1131,16214,15681],{"class":1639},[1131,16216,1594],{"class":1148},[1131,16218,4017],{"class":1313},[1131,16220,16221],{"class":1168},"\"Product detail too slow: ",[1131,16223,4030],{"class":4029},[1131,16225,12694],{"class":1639},[1131,16227,1333],{"class":1148},[1131,16229,15657],{"class":1336},[1131,16231,1333],{"class":1148},[1131,16233,15662],{"class":1639},[1131,16235,1714],{"class":1148},[1131,16237,4041],{"class":4029},[1131,16239,4077],{"class":1168},[1131,16241,1761],{"class":1148},[1131,16243,16244,16246,16248,16250,16252,16254,16257],{"class":1133,"line":2210},[1131,16245,8609],{"class":1673},[1131,16247,5756],{"class":1330},[1131,16249,1333],{"class":1148},[1131,16251,14851],{"class":1336},[1131,16253,4687],{"class":1326},[1131,16255,16256],{"class":1377}," 404",[1131,16258,1686],{"class":1148},[1131,16260,16261],{"class":1133,"line":2240},[1131,16262,16263],{"class":1137},"                # 404 is acceptable for random product IDs\n",[1131,16265,16266],{"class":1133,"line":2251},[1131,16267,16268],{"class":1673},"                pass\n",[1131,16270,16271,16273],{"class":1133,"line":2256},[1131,16272,5972],{"class":1673},[1131,16274,1686],{"class":1148},[1131,16276,16277,16279,16281,16283,16285,16287,16290,16292,16294,16296,16298,16300,16302],{"class":1133,"line":2276},[1131,16278,15719],{"class":1330},[1131,16280,1333],{"class":1148},[1131,16282,15681],{"class":1639},[1131,16284,1594],{"class":1148},[1131,16286,4017],{"class":1313},[1131,16288,16289],{"class":1168},"\"Product detail failed: ",[1131,16291,4030],{"class":4029},[1131,16293,12694],{"class":1639},[1131,16295,1333],{"class":1148},[1131,16297,14851],{"class":1336},[1131,16299,4041],{"class":4029},[1131,16301,4020],{"class":1168},[1131,16303,1761],{"class":1148},[1131,16305,16306],{"class":1133,"line":2295},[1131,16307,1653],{"class":1330},[1131,16309,16310,16312,16314,16316,16318],{"class":1133,"line":2319},[1131,16311,3353],{"class":1148},[1131,16313,15562],{"class":1590},[1131,16315,1594],{"class":1148},[1131,16317,4343],{"class":1377},[1131,16319,1761],{"class":1148},[1131,16321,16322,16324,16327,16329,16331],{"class":1133,"line":2356},[1131,16323,3375],{"class":1313},[1131,16325,16326],{"class":1590}," search_products",[1131,16328,1594],{"class":1148},[1131,16330,3384],{"class":3383},[1131,16332,1600],{"class":1148},[1131,16334,16335,16337,16340],{"class":1133,"line":2362},[1131,16336,3391],{"class":1605},[1131,16338,16339],{"class":1609},"Test search performance",[1131,16341,1613],{"class":1605},[1131,16343,16344,16347,16349,16351,16353,16356,16358,16360,16362,16365,16367,16369,16371,16374,16376,16378,16380,16383,16385,16387,16389,16392,16394],{"class":1133,"line":2367},[1131,16345,16346],{"class":1330},"        search_terms ",[1131,16348,1626],{"class":1148},[1131,16350,2218],{"class":1148},[1131,16352,4020],{"class":1164},[1131,16354,16355],{"class":1168},"laptop",[1131,16357,4020],{"class":1164},[1131,16359,1267],{"class":1148},[1131,16361,7560],{"class":1164},[1131,16363,16364],{"class":1168},"phone",[1131,16366,4020],{"class":1164},[1131,16368,1267],{"class":1148},[1131,16370,7560],{"class":1164},[1131,16372,16373],{"class":1168},"book",[1131,16375,4020],{"class":1164},[1131,16377,1267],{"class":1148},[1131,16379,7560],{"class":1164},[1131,16381,16382],{"class":1168},"shirt",[1131,16384,4020],{"class":1164},[1131,16386,1267],{"class":1148},[1131,16388,7560],{"class":1164},[1131,16390,16391],{"class":1168},"shoes",[1131,16393,4020],{"class":1164},[1131,16395,1181],{"class":1148},[1131,16397,16398,16401,16403,16405,16407,16410,16412,16415],{"class":1133,"line":2373},[1131,16399,16400],{"class":1330},"        term ",[1131,16402,1626],{"class":1148},[1131,16404,15793],{"class":1330},[1131,16406,1333],{"class":1148},[1131,16408,16409],{"class":1639},"choice",[1131,16411,1594],{"class":1148},[1131,16413,16414],{"class":1639},"search_terms",[1131,16416,1761],{"class":1148},[1131,16418,16419],{"class":1133,"line":2382},[1131,16420,1784],{"class":1330},[1131,16422,16423,16425,16427,16429,16431,16433,16435,16437,16439,16442,16444,16447,16449,16451,16453,16455,16457,16459,16461,16463,16465],{"class":1133,"line":2395},[1131,16424,8471],{"class":1673},[1131,16426,6667],{"class":1144},[1131,16428,1333],{"class":1148},[1131,16430,15444],{"class":1336},[1131,16432,1333],{"class":1148},[1131,16434,2475],{"class":1639},[1131,16436,1594],{"class":1148},[1131,16438,4017],{"class":1313},[1131,16440,16441],{"class":1168},"\"/search/?q=",[1131,16443,4030],{"class":4029},[1131,16445,16446],{"class":1639},"term",[1131,16448,4041],{"class":4029},[1131,16450,4020],{"class":1168},[1131,16452,1267],{"class":1148},[1131,16454,15617],{"class":1743},[1131,16456,1626],{"class":1148},[1131,16458,3449],{"class":1359},[1131,16460,4129],{"class":1148},[1131,16462,8483],{"class":1673},[1131,16464,5756],{"class":1330},[1131,16466,1686],{"class":1148},[1131,16468,16469,16471,16473,16475,16477,16479,16481],{"class":1133,"line":2406},[1131,16470,5841],{"class":1673},[1131,16472,5756],{"class":1330},[1131,16474,1333],{"class":1148},[1131,16476,14851],{"class":1336},[1131,16478,4687],{"class":1326},[1131,16480,6938],{"class":1377},[1131,16482,1686],{"class":1148},[1131,16484,16485,16487,16489,16491,16493,16495,16497,16499,16501,16504],{"class":1133,"line":2421},[1131,16486,15650],{"class":1673},[1131,16488,5756],{"class":1330},[1131,16490,1333],{"class":1148},[1131,16492,15657],{"class":1336},[1131,16494,1333],{"class":1148},[1131,16496,15662],{"class":1639},[1131,16498,1714],{"class":1148},[1131,16500,4239],{"class":1326},[1131,16502,16503],{"class":1377}," 1.5",[1131,16505,1686],{"class":1148},[1131,16507,16508,16510,16512,16514,16516,16518,16521,16523,16525,16527,16529,16531,16533,16535,16537,16539],{"class":1133,"line":2440},[1131,16509,15676],{"class":1330},[1131,16511,1333],{"class":1148},[1131,16513,15681],{"class":1639},[1131,16515,1594],{"class":1148},[1131,16517,4017],{"class":1313},[1131,16519,16520],{"class":1168},"\"Search too slow: ",[1131,16522,4030],{"class":4029},[1131,16524,12694],{"class":1639},[1131,16526,1333],{"class":1148},[1131,16528,15657],{"class":1336},[1131,16530,1333],{"class":1148},[1131,16532,15662],{"class":1639},[1131,16534,1714],{"class":1148},[1131,16536,4041],{"class":4029},[1131,16538,4077],{"class":1168},[1131,16540,1761],{"class":1148},[1131,16542,16543,16545],{"class":1133,"line":2459},[1131,16544,5972],{"class":1673},[1131,16546,1686],{"class":1148},[1131,16548,16549,16551,16553,16555,16557,16559,16562,16564,16566,16568,16570,16572,16574],{"class":1133,"line":2491},[1131,16550,15719],{"class":1330},[1131,16552,1333],{"class":1148},[1131,16554,15681],{"class":1639},[1131,16556,1594],{"class":1148},[1131,16558,4017],{"class":1313},[1131,16560,16561],{"class":1168},"\"Search failed: ",[1131,16563,4030],{"class":4029},[1131,16565,12694],{"class":1639},[1131,16567,1333],{"class":1148},[1131,16569,14851],{"class":1336},[1131,16571,4041],{"class":4029},[1131,16573,4020],{"class":1168},[1131,16575,1761],{"class":1148},[1131,16577,16578],{"class":1133,"line":2496},[1131,16579,1188],{"emptyLinePlaceholder":1187},[1131,16581,16582],{"class":1133,"line":2501},[1131,16583,16584],{"class":1137},"# Run with: locust -f locustfile.py --host=http://localhost:8000\n",[1038,16586,16588],{"id":16587},"benchmark-management-command","Benchmark Management Command",[1121,16590,16592],{"className":1123,"code":16591,"language":1125,"meta":1126,"style":1126},"# management/commands/benchmark.py\nfrom django.core.management.base import BaseCommand\nfrom django.test import Client\nfrom django.contrib.auth.models import User\nimport time\nimport statistics\n\nclass Command(BaseCommand):\n    help = 'Benchmark Django application performance'\n    \n    def add_arguments(self, parser):\n        parser.add_argument('--requests', type=int, default=100, help='Number of requests')\n        parser.add_argument('--url', type=str, default='/', help='URL to benchmark')\n        parser.add_argument('--warmup', type=int, default=10, help='Warmup requests')\n    \n    def handle(self, *args, **options):\n        client = Client()\n        \n        # Login if needed\n        try:\n            user = User.objects.get(username='testuser')\n            client.force_login(user)\n        except User.DoesNotExist:\n            pass\n        \n        url = options['url']\n        num_requests = options['requests']\n        warmup_requests = options['warmup']\n        \n        self.stdout.write(f\"Benchmarking {url} with {num_requests} requests...\")\n        \n        # Warmup\n        self.stdout.write(f\"Warming up with {warmup_requests} requests...\")\n        for _ in range(warmup_requests):\n            client.get(url)\n        \n        # Benchmark\n        response_times = []\n        successful_requests = 0\n        \n        start_time = time.time()\n        \n        for i in range(num_requests):\n            request_start = time.time()\n            response = client.get(url)\n            request_end = time.time()\n            \n            response_time = request_end - request_start\n            response_times.append(response_time)\n            \n            if response.status_code == 200:\n                successful_requests += 1\n            \n            if (i + 1) % 10 == 0:\n                self.stdout.write(f\"Completed {i + 1}/{num_requests} requests\")\n        \n        end_time = time.time()\n        total_time = end_time - start_time\n        \n        # Calculate statistics\n        avg_response_time = statistics.mean(response_times)\n        median_response_time = statistics.median(response_times)\n        min_response_time = min(response_times)\n        max_response_time = max(response_times)\n        \n        if len(response_times) > 1:\n            stdev_response_time = statistics.stdev(response_times)\n            p95_response_time = sorted(response_times)[int(len(response_times) * 0.95)]\n            p99_response_time = sorted(response_times)[int(len(response_times) * 0.99)]\n        else:\n            stdev_response_time = 0\n            p95_response_time = max_response_time\n            p99_response_time = max_response_time\n        \n        requests_per_second = num_requests / total_time\n        success_rate = (successful_requests / num_requests) * 100\n        \n        # Print results\n        self.stdout.write(self.style.SUCCESS(\"\\n=== Benchmark Results ===\"))\n        self.stdout.write(f\"URL: {url}\")\n        self.stdout.write(f\"Total requests: {num_requests}\")\n        self.stdout.write(f\"Successful requests: {successful_requests}\")\n        self.stdout.write(f\"Success rate: {success_rate:.1f}%\")\n        self.stdout.write(f\"Total time: {total_time:.2f}s\")\n        self.stdout.write(f\"Requests per second: {requests_per_second:.2f}\")\n        self.stdout.write(f\"\\n--- Response Times ---\")\n        self.stdout.write(f\"Average: {avg_response_time:.3f}s\")\n        self.stdout.write(f\"Median: {median_response_time:.3f}s\")\n        self.stdout.write(f\"Min: {min_response_time:.3f}s\")\n        self.stdout.write(f\"Max: {max_response_time:.3f}s\")\n        self.stdout.write(f\"Standard deviation: {stdev_response_time:.3f}s\")\n        self.stdout.write(f\"95th percentile: {p95_response_time:.3f}s\")\n        self.stdout.write(f\"99th percentile: {p99_response_time:.3f}s\")\n",[1128,16593,16594,16599,16621,16637,16663,16669,16676,16680,16692,16705,16709,16725,16773,16825,16873,16877,16901,16913,16917,16922,16928,16959,16975,16988,16993,16997,17018,17038,17058,17062,17102,17106,17111,17141,17158,17172,17176,17181,17190,17199,17203,17217,17221,17237,17252,17271,17286,17290,17305,17320,17324,17340,17349,17353,17378,17420,17424,17438,17451,17455,17460,17482,17501,17517,17533,17537,17555,17575,17610,17643,17649,17657,17666,17674,17678,17693,17717,17721,17726,17764,17793,17822,17852,17884,17916,17948,17973,18005,18037,18069,18101,18133,18165],{"__ignoreMap":1126},[1131,16595,16596],{"class":1133,"line":1134},[1131,16597,16598],{"class":1137},"# management/commands/benchmark.py\n",[1131,16600,16601,16603,16605,16607,16609,16611,16613,16615,16617,16619],{"class":1133,"line":1141},[1131,16602,2894],{"class":1673},[1131,16604,3795],{"class":1330},[1131,16606,1333],{"class":1148},[1131,16608,6422],{"class":1330},[1131,16610,1333],{"class":1148},[1131,16612,6427],{"class":1330},[1131,16614,1333],{"class":1148},[1131,16616,6432],{"class":1330},[1131,16618,2910],{"class":1673},[1131,16620,6437],{"class":1330},[1131,16622,16623,16625,16627,16629,16632,16634],{"class":1133,"line":1155},[1131,16624,2894],{"class":1673},[1131,16626,3795],{"class":1330},[1131,16628,1333],{"class":1148},[1131,16630,16631],{"class":1330},"test ",[1131,16633,2910],{"class":1673},[1131,16635,16636],{"class":1330}," Client\n",[1131,16638,16639,16641,16643,16645,16648,16650,16653,16655,16658,16660],{"class":1133,"line":1161},[1131,16640,2894],{"class":1673},[1131,16642,3795],{"class":1330},[1131,16644,1333],{"class":1148},[1131,16646,16647],{"class":1330},"contrib",[1131,16649,1333],{"class":1148},[1131,16651,16652],{"class":1330},"auth",[1131,16654,1333],{"class":1148},[1131,16656,16657],{"class":1330},"models ",[1131,16659,2910],{"class":1673},[1131,16661,16662],{"class":1330}," User\n",[1131,16664,16665,16667],{"class":1133,"line":1178},[1131,16666,2910],{"class":1673},[1131,16668,5421],{"class":1330},[1131,16670,16671,16673],{"class":1133,"line":1184},[1131,16672,2910],{"class":1673},[1131,16674,16675],{"class":1330}," statistics\n",[1131,16677,16678],{"class":1133,"line":1191},[1131,16679,1188],{"emptyLinePlaceholder":1187},[1131,16681,16682,16684,16686,16688,16690],{"class":1133,"line":1201},[1131,16683,3299],{"class":1313},[1131,16685,9644],{"class":3302},[1131,16687,1594],{"class":1148},[1131,16689,9649],{"class":3308},[1131,16691,1600],{"class":1148},[1131,16693,16694,16696,16698,16700,16703],{"class":1133,"line":1213},[1131,16695,9665],{"class":3967},[1131,16697,1149],{"class":1148},[1131,16699,1996],{"class":1164},[1131,16701,16702],{"class":1168},"Benchmark Django application performance",[1131,16704,2107],{"class":1164},[1131,16706,16707],{"class":1133,"line":1219},[1131,16708,1653],{"class":1330},[1131,16710,16711,16713,16715,16717,16719,16721,16723],{"class":1133,"line":1224},[1131,16712,3375],{"class":1313},[1131,16714,9685],{"class":1590},[1131,16716,1594],{"class":1148},[1131,16718,3384],{"class":3383},[1131,16720,1267],{"class":1148},[1131,16722,9694],{"class":1317},[1131,16724,1600],{"class":1148},[1131,16726,16727,16729,16731,16733,16735,16737,16740,16742,16744,16746,16748,16750,16752,16754,16756,16758,16760,16762,16764,16766,16769,16771],{"class":1133,"line":1229},[1131,16728,9701],{"class":1330},[1131,16730,1333],{"class":1148},[1131,16732,9706],{"class":1639},[1131,16734,1594],{"class":1148},[1131,16736,1172],{"class":1164},[1131,16738,16739],{"class":1168},"--requests",[1131,16741,1172],{"class":1164},[1131,16743,1267],{"class":1148},[1131,16745,9720],{"class":1743},[1131,16747,1626],{"class":1148},[1131,16749,9767],{"class":1933},[1131,16751,1267],{"class":1148},[1131,16753,9772],{"class":1743},[1131,16755,1626],{"class":1148},[1131,16757,4400],{"class":1377},[1131,16759,1267],{"class":1148},[1131,16761,9730],{"class":1743},[1131,16763,1626],{"class":1148},[1131,16765,1172],{"class":1164},[1131,16767,16768],{"class":1168},"Number of requests",[1131,16770,1172],{"class":1164},[1131,16772,1761],{"class":1148},[1131,16774,16775,16777,16779,16781,16783,16785,16788,16790,16792,16794,16796,16798,16800,16802,16804,16806,16808,16810,16812,16814,16816,16818,16821,16823],{"class":1133,"line":1235},[1131,16776,9701],{"class":1330},[1131,16778,1333],{"class":1148},[1131,16780,9706],{"class":1639},[1131,16782,1594],{"class":1148},[1131,16784,1172],{"class":1164},[1131,16786,16787],{"class":1168},"--url",[1131,16789,1172],{"class":1164},[1131,16791,1267],{"class":1148},[1131,16793,9720],{"class":1743},[1131,16795,1626],{"class":1148},[1131,16797,9725],{"class":1933},[1131,16799,1267],{"class":1148},[1131,16801,9772],{"class":1743},[1131,16803,1626],{"class":1148},[1131,16805,1172],{"class":1164},[1131,16807,4157],{"class":1168},[1131,16809,1172],{"class":1164},[1131,16811,1267],{"class":1148},[1131,16813,9730],{"class":1743},[1131,16815,1626],{"class":1148},[1131,16817,1172],{"class":1164},[1131,16819,16820],{"class":1168},"URL to benchmark",[1131,16822,1172],{"class":1164},[1131,16824,1761],{"class":1148},[1131,16826,16827,16829,16831,16833,16835,16837,16840,16842,16844,16846,16848,16850,16852,16854,16856,16858,16860,16862,16864,16866,16869,16871],{"class":1133,"line":1245},[1131,16828,9701],{"class":1330},[1131,16830,1333],{"class":1148},[1131,16832,9706],{"class":1639},[1131,16834,1594],{"class":1148},[1131,16836,1172],{"class":1164},[1131,16838,16839],{"class":1168},"--warmup",[1131,16841,1172],{"class":1164},[1131,16843,1267],{"class":1148},[1131,16845,9720],{"class":1743},[1131,16847,1626],{"class":1148},[1131,16849,9767],{"class":1933},[1131,16851,1267],{"class":1148},[1131,16853,9772],{"class":1743},[1131,16855,1626],{"class":1148},[1131,16857,7815],{"class":1377},[1131,16859,1267],{"class":1148},[1131,16861,9730],{"class":1743},[1131,16863,1626],{"class":1148},[1131,16865,1172],{"class":1164},[1131,16867,16868],{"class":1168},"Warmup requests",[1131,16870,1172],{"class":1164},[1131,16872,1761],{"class":1148},[1131,16874,16875],{"class":1133,"line":1257},[1131,16876,1653],{"class":1330},[1131,16878,16879,16881,16883,16885,16887,16889,16891,16893,16895,16897,16899],{"class":1133,"line":1273},[1131,16880,3375],{"class":1313},[1131,16882,9802],{"class":1590},[1131,16884,1594],{"class":1148},[1131,16886,3384],{"class":3383},[1131,16888,1267],{"class":1148},[1131,16890,2794],{"class":1326},[1131,16892,3779],{"class":1317},[1131,16894,1267],{"class":1148},[1131,16896,3538],{"class":1326},[1131,16898,9819],{"class":1317},[1131,16900,1600],{"class":1148},[1131,16902,16903,16906,16908,16911],{"class":1133,"line":1278},[1131,16904,16905],{"class":1330},"        client ",[1131,16907,1626],{"class":1148},[1131,16909,16910],{"class":1639}," Client",[1131,16912,3873],{"class":1148},[1131,16914,16915],{"class":1133,"line":1283},[1131,16916,1784],{"class":1330},[1131,16918,16919],{"class":1133,"line":1289},[1131,16920,16921],{"class":1137},"        # Login if needed\n",[1131,16923,16924,16926],{"class":1133,"line":1300},[1131,16925,9846],{"class":1673},[1131,16927,1686],{"class":1148},[1131,16929,16930,16933,16935,16937,16939,16941,16943,16945,16947,16949,16951,16953,16955,16957],{"class":1133,"line":1347},[1131,16931,16932],{"class":1330},"            user ",[1131,16934,1626],{"class":1148},[1131,16936,2979],{"class":1330},[1131,16938,1333],{"class":1148},[1131,16940,1634],{"class":1336},[1131,16942,1333],{"class":1148},[1131,16944,2475],{"class":1639},[1131,16946,1594],{"class":1148},[1131,16948,15470],{"class":1743},[1131,16950,1626],{"class":1148},[1131,16952,1172],{"class":1164},[1131,16954,15479],{"class":1168},[1131,16956,1172],{"class":1164},[1131,16958,1761],{"class":1148},[1131,16960,16961,16964,16966,16969,16971,16973],{"class":1133,"line":1365},[1131,16962,16963],{"class":1330},"            client",[1131,16965,1333],{"class":1148},[1131,16967,16968],{"class":1639},"force_login",[1131,16970,1594],{"class":1148},[1131,16972,1337],{"class":1639},[1131,16974,1761],{"class":1148},[1131,16976,16977,16979,16981,16983,16986],{"class":1133,"line":1383},[1131,16978,9882],{"class":1673},[1131,16980,2979],{"class":1330},[1131,16982,1333],{"class":1148},[1131,16984,16985],{"class":1336},"DoesNotExist",[1131,16987,1686],{"class":1148},[1131,16989,16990],{"class":1133,"line":1389},[1131,16991,16992],{"class":1673},"            pass\n",[1131,16994,16995],{"class":1133,"line":1394},[1131,16996,1784],{"class":1330},[1131,16998,16999,17002,17004,17007,17009,17011,17014,17016],{"class":1133,"line":1400},[1131,17000,17001],{"class":1330},"        url ",[1131,17003,1626],{"class":1148},[1131,17005,17006],{"class":1330}," options",[1131,17008,2282],{"class":1148},[1131,17010,1172],{"class":1164},[1131,17012,17013],{"class":1168},"url",[1131,17015,1172],{"class":1164},[1131,17017,1181],{"class":1148},[1131,17019,17020,17023,17025,17027,17029,17031,17034,17036],{"class":1133,"line":1410},[1131,17021,17022],{"class":1330},"        num_requests ",[1131,17024,1626],{"class":1148},[1131,17026,17006],{"class":1330},[1131,17028,2282],{"class":1148},[1131,17030,1172],{"class":1164},[1131,17032,17033],{"class":1168},"requests",[1131,17035,1172],{"class":1164},[1131,17037,1181],{"class":1148},[1131,17039,17040,17043,17045,17047,17049,17051,17054,17056],{"class":1133,"line":1422},[1131,17041,17042],{"class":1330},"        warmup_requests ",[1131,17044,1626],{"class":1148},[1131,17046,17006],{"class":1330},[1131,17048,2282],{"class":1148},[1131,17050,1172],{"class":1164},[1131,17052,17053],{"class":1168},"warmup",[1131,17055,1172],{"class":1164},[1131,17057,1181],{"class":1148},[1131,17059,17060],{"class":1133,"line":1434},[1131,17061,1784],{"class":1330},[1131,17063,17064,17066,17068,17070,17072,17074,17076,17078,17081,17083,17085,17087,17090,17092,17095,17097,17100],{"class":1133,"line":1446},[1131,17065,6487],{"class":1144},[1131,17067,1333],{"class":1148},[1131,17069,9897],{"class":1336},[1131,17071,1333],{"class":1148},[1131,17073,9902],{"class":1639},[1131,17075,1594],{"class":1148},[1131,17077,4017],{"class":1313},[1131,17079,17080],{"class":1168},"\"Benchmarking ",[1131,17082,4030],{"class":4029},[1131,17084,17013],{"class":1639},[1131,17086,4041],{"class":4029},[1131,17088,17089],{"class":1168}," with ",[1131,17091,4030],{"class":4029},[1131,17093,17094],{"class":1639},"num_requests",[1131,17096,4041],{"class":4029},[1131,17098,17099],{"class":1168}," requests...\"",[1131,17101,1761],{"class":1148},[1131,17103,17104],{"class":1133,"line":1458},[1131,17105,1784],{"class":1330},[1131,17107,17108],{"class":1133,"line":1470},[1131,17109,17110],{"class":1137},"        # Warmup\n",[1131,17112,17113,17115,17117,17119,17121,17123,17125,17127,17130,17132,17135,17137,17139],{"class":1133,"line":1482},[1131,17114,6487],{"class":1144},[1131,17116,1333],{"class":1148},[1131,17118,9897],{"class":1336},[1131,17120,1333],{"class":1148},[1131,17122,9902],{"class":1639},[1131,17124,1594],{"class":1148},[1131,17126,4017],{"class":1313},[1131,17128,17129],{"class":1168},"\"Warming up with ",[1131,17131,4030],{"class":4029},[1131,17133,17134],{"class":1639},"warmup_requests",[1131,17136,4041],{"class":4029},[1131,17138,17099],{"class":1168},[1131,17140,1761],{"class":1148},[1131,17142,17143,17145,17148,17150,17152,17154,17156],{"class":1133,"line":1494},[1131,17144,6792],{"class":1673},[1131,17146,17147],{"class":1330}," _ ",[1131,17149,1680],{"class":1673},[1131,17151,5361],{"class":3967},[1131,17153,1594],{"class":1148},[1131,17155,17134],{"class":1639},[1131,17157,1600],{"class":1148},[1131,17159,17160,17162,17164,17166,17168,17170],{"class":1133,"line":1506},[1131,17161,16963],{"class":1330},[1131,17163,1333],{"class":1148},[1131,17165,2475],{"class":1639},[1131,17167,1594],{"class":1148},[1131,17169,17013],{"class":1639},[1131,17171,1761],{"class":1148},[1131,17173,17174],{"class":1133,"line":1518},[1131,17175,1784],{"class":1330},[1131,17177,17178],{"class":1133,"line":1530},[1131,17179,17180],{"class":1137},"        # Benchmark\n",[1131,17182,17183,17186,17188],{"class":1133,"line":1542},[1131,17184,17185],{"class":1330},"        response_times ",[1131,17187,1626],{"class":1148},[1131,17189,1668],{"class":1148},[1131,17191,17192,17195,17197],{"class":1133,"line":1554},[1131,17193,17194],{"class":1330},"        successful_requests ",[1131,17196,1626],{"class":1148},[1131,17198,5983],{"class":1377},[1131,17200,17201],{"class":1133,"line":1566},[1131,17202,1784],{"class":1330},[1131,17204,17205,17207,17209,17211,17213,17215],{"class":1133,"line":2059},[1131,17206,3882],{"class":1330},[1131,17208,1626],{"class":1148},[1131,17210,3887],{"class":1330},[1131,17212,1333],{"class":1148},[1131,17214,3892],{"class":1639},[1131,17216,3873],{"class":1148},[1131,17218,17219],{"class":1133,"line":2065},[1131,17220,1784],{"class":1330},[1131,17222,17223,17225,17227,17229,17231,17233,17235],{"class":1133,"line":2100},[1131,17224,6792],{"class":1673},[1131,17226,5356],{"class":1330},[1131,17228,1680],{"class":1673},[1131,17230,5361],{"class":3967},[1131,17232,1594],{"class":1148},[1131,17234,17094],{"class":1639},[1131,17236,1600],{"class":1148},[1131,17238,17239,17242,17244,17246,17248,17250],{"class":1133,"line":2110},[1131,17240,17241],{"class":1330},"            request_start ",[1131,17243,1626],{"class":1148},[1131,17245,3887],{"class":1330},[1131,17247,1333],{"class":1148},[1131,17249,3892],{"class":1639},[1131,17251,3873],{"class":1148},[1131,17253,17254,17256,17258,17261,17263,17265,17267,17269],{"class":1133,"line":2124},[1131,17255,4756],{"class":1330},[1131,17257,1626],{"class":1148},[1131,17259,17260],{"class":1330}," client",[1131,17262,1333],{"class":1148},[1131,17264,2475],{"class":1639},[1131,17266,1594],{"class":1148},[1131,17268,17013],{"class":1639},[1131,17270,1761],{"class":1148},[1131,17272,17273,17276,17278,17280,17282,17284],{"class":1133,"line":2129},[1131,17274,17275],{"class":1330},"            request_end ",[1131,17277,1626],{"class":1148},[1131,17279,3887],{"class":1330},[1131,17281,1333],{"class":1148},[1131,17283,3892],{"class":1639},[1131,17285,3873],{"class":1148},[1131,17287,17288],{"class":1133,"line":2135},[1131,17289,4734],{"class":1330},[1131,17291,17292,17295,17297,17300,17302],{"class":1133,"line":2151},[1131,17293,17294],{"class":1330},"            response_time ",[1131,17296,1626],{"class":1148},[1131,17298,17299],{"class":1330}," request_end ",[1131,17301,4066],{"class":1326},[1131,17303,17304],{"class":1330}," request_start\n",[1131,17306,17307,17310,17312,17314,17316,17318],{"class":1133,"line":2172},[1131,17308,17309],{"class":1330},"            response_times",[1131,17311,1333],{"class":1148},[1131,17313,1869],{"class":1639},[1131,17315,1594],{"class":1148},[1131,17317,14796],{"class":1639},[1131,17319,1761],{"class":1148},[1131,17321,17322],{"class":1133,"line":2193},[1131,17323,4734],{"class":1330},[1131,17325,17326,17328,17330,17332,17334,17336,17338],{"class":1133,"line":2199},[1131,17327,5841],{"class":1673},[1131,17329,5756],{"class":1330},[1131,17331,1333],{"class":1148},[1131,17333,14851],{"class":1336},[1131,17335,4687],{"class":1326},[1131,17337,6938],{"class":1377},[1131,17339,1686],{"class":1148},[1131,17341,17342,17345,17347],{"class":1133,"line":2204},[1131,17343,17344],{"class":1330},"                successful_requests ",[1131,17346,12624],{"class":1148},[1131,17348,7045],{"class":1377},[1131,17350,17351],{"class":1133,"line":2210},[1131,17352,4734],{"class":1330},[1131,17354,17355,17357,17359,17361,17363,17365,17367,17370,17372,17374,17376],{"class":1133,"line":2240},[1131,17356,5841],{"class":1673},[1131,17358,4160],{"class":1148},[1131,17360,5351],{"class":1330},[1131,17362,4340],{"class":1326},[1131,17364,15042],{"class":1377},[1131,17366,4129],{"class":1148},[1131,17368,17369],{"class":1326}," %",[1131,17371,1378],{"class":1377},[1131,17373,4687],{"class":1326},[1131,17375,3116],{"class":1377},[1131,17377,1686],{"class":1148},[1131,17379,17380,17382,17384,17386,17388,17390,17392,17394,17397,17399,17401,17403,17405,17407,17409,17411,17413,17415,17418],{"class":1133,"line":2251},[1131,17381,9909],{"class":1144},[1131,17383,1333],{"class":1148},[1131,17385,9897],{"class":1336},[1131,17387,1333],{"class":1148},[1131,17389,9902],{"class":1639},[1131,17391,1594],{"class":1148},[1131,17393,4017],{"class":1313},[1131,17395,17396],{"class":1168},"\"Completed ",[1131,17398,4030],{"class":4029},[1131,17400,5351],{"class":1639},[1131,17402,4340],{"class":1326},[1131,17404,15042],{"class":1377},[1131,17406,4041],{"class":4029},[1131,17408,4157],{"class":1168},[1131,17410,4030],{"class":4029},[1131,17412,17094],{"class":1639},[1131,17414,4041],{"class":4029},[1131,17416,17417],{"class":1168}," requests\"",[1131,17419,1761],{"class":1148},[1131,17421,17422],{"class":1133,"line":2256},[1131,17423,1784],{"class":1330},[1131,17425,17426,17428,17430,17432,17434,17436],{"class":1133,"line":2276},[1131,17427,3923],{"class":1330},[1131,17429,1626],{"class":1148},[1131,17431,3887],{"class":1330},[1131,17433,1333],{"class":1148},[1131,17435,3892],{"class":1639},[1131,17437,3873],{"class":1148},[1131,17439,17440,17442,17444,17446,17448],{"class":1133,"line":2295},[1131,17441,3962],{"class":1330},[1131,17443,1626],{"class":1148},[1131,17445,5809],{"class":1330},[1131,17447,4066],{"class":1326},[1131,17449,17450],{"class":1330}," start_time\n",[1131,17452,17453],{"class":1133,"line":2319},[1131,17454,1784],{"class":1330},[1131,17456,17457],{"class":1133,"line":2356},[1131,17458,17459],{"class":1137},"        # Calculate statistics\n",[1131,17461,17462,17465,17467,17470,17472,17475,17477,17480],{"class":1133,"line":2362},[1131,17463,17464],{"class":1330},"        avg_response_time ",[1131,17466,1626],{"class":1148},[1131,17468,17469],{"class":1330}," statistics",[1131,17471,1333],{"class":1148},[1131,17473,17474],{"class":1639},"mean",[1131,17476,1594],{"class":1148},[1131,17478,17479],{"class":1639},"response_times",[1131,17481,1761],{"class":1148},[1131,17483,17484,17487,17489,17491,17493,17495,17497,17499],{"class":1133,"line":2367},[1131,17485,17486],{"class":1330},"        median_response_time ",[1131,17488,1626],{"class":1148},[1131,17490,17469],{"class":1330},[1131,17492,1333],{"class":1148},[1131,17494,14308],{"class":1639},[1131,17496,1594],{"class":1148},[1131,17498,17479],{"class":1639},[1131,17500,1761],{"class":1148},[1131,17502,17503,17506,17508,17511,17513,17515],{"class":1133,"line":2373},[1131,17504,17505],{"class":1330},"        min_response_time ",[1131,17507,1626],{"class":1148},[1131,17509,17510],{"class":3967}," min",[1131,17512,1594],{"class":1148},[1131,17514,17479],{"class":1639},[1131,17516,1761],{"class":1148},[1131,17518,17519,17522,17524,17527,17529,17531],{"class":1133,"line":2382},[1131,17520,17521],{"class":1330},"        max_response_time ",[1131,17523,1626],{"class":1148},[1131,17525,17526],{"class":3967}," max",[1131,17528,1594],{"class":1148},[1131,17530,17479],{"class":1639},[1131,17532,1761],{"class":1148},[1131,17534,17535],{"class":1133,"line":2395},[1131,17536,1784],{"class":1330},[1131,17538,17539,17541,17543,17545,17547,17549,17551,17553],{"class":1133,"line":2406},[1131,17540,4250],{"class":1673},[1131,17542,5587],{"class":3967},[1131,17544,1594],{"class":1148},[1131,17546,17479],{"class":1639},[1131,17548,4129],{"class":1148},[1131,17550,4239],{"class":1326},[1131,17552,15042],{"class":1377},[1131,17554,1686],{"class":1148},[1131,17556,17557,17560,17562,17564,17566,17569,17571,17573],{"class":1133,"line":2421},[1131,17558,17559],{"class":1330},"            stdev_response_time ",[1131,17561,1626],{"class":1148},[1131,17563,17469],{"class":1330},[1131,17565,1333],{"class":1148},[1131,17567,17568],{"class":1639},"stdev",[1131,17570,1594],{"class":1148},[1131,17572,17479],{"class":1639},[1131,17574,1761],{"class":1148},[1131,17576,17577,17580,17582,17585,17587,17589,17592,17594,17596,17598,17600,17602,17604,17606,17608],{"class":1133,"line":2440},[1131,17578,17579],{"class":1330},"            p95_response_time ",[1131,17581,1626],{"class":1148},[1131,17583,17584],{"class":3967}," sorted",[1131,17586,1594],{"class":1148},[1131,17588,17479],{"class":1639},[1131,17590,17591],{"class":1148},")[",[1131,17593,9767],{"class":1933},[1131,17595,1594],{"class":1148},[1131,17597,4121],{"class":3967},[1131,17599,1594],{"class":1148},[1131,17601,17479],{"class":1639},[1131,17603,4129],{"class":1148},[1131,17605,2794],{"class":1326},[1131,17607,14352],{"class":1377},[1131,17609,5369],{"class":1148},[1131,17611,17612,17615,17617,17619,17621,17623,17625,17627,17629,17631,17633,17635,17637,17639,17641],{"class":1133,"line":2459},[1131,17613,17614],{"class":1330},"            p99_response_time ",[1131,17616,1626],{"class":1148},[1131,17618,17584],{"class":3967},[1131,17620,1594],{"class":1148},[1131,17622,17479],{"class":1639},[1131,17624,17591],{"class":1148},[1131,17626,9767],{"class":1933},[1131,17628,1594],{"class":1148},[1131,17630,4121],{"class":3967},[1131,17632,1594],{"class":1148},[1131,17634,17479],{"class":1639},[1131,17636,4129],{"class":1148},[1131,17638,2794],{"class":1326},[1131,17640,14402],{"class":1377},[1131,17642,5369],{"class":1148},[1131,17644,17645,17647],{"class":1133,"line":2491},[1131,17646,4966],{"class":1673},[1131,17648,1686],{"class":1148},[1131,17650,17651,17653,17655],{"class":1133,"line":2496},[1131,17652,17559],{"class":1330},[1131,17654,1626],{"class":1148},[1131,17656,5983],{"class":1377},[1131,17658,17659,17661,17663],{"class":1133,"line":2501},[1131,17660,17579],{"class":1330},[1131,17662,1626],{"class":1148},[1131,17664,17665],{"class":1330}," max_response_time\n",[1131,17667,17668,17670,17672],{"class":1133,"line":2507},[1131,17669,17614],{"class":1330},[1131,17671,1626],{"class":1148},[1131,17673,17665],{"class":1330},[1131,17675,17676],{"class":1133,"line":2513},[1131,17677,1784],{"class":1330},[1131,17679,17680,17683,17685,17688,17690],{"class":1133,"line":2519},[1131,17681,17682],{"class":1330},"        requests_per_second ",[1131,17684,1626],{"class":1148},[1131,17686,17687],{"class":1330}," num_requests ",[1131,17689,4157],{"class":1326},[1131,17691,17692],{"class":1330}," total_time\n",[1131,17694,17695,17698,17700,17702,17705,17707,17710,17712,17714],{"class":1133,"line":2525},[1131,17696,17697],{"class":1330},"        success_rate ",[1131,17699,1626],{"class":1148},[1131,17701,4160],{"class":1148},[1131,17703,17704],{"class":1330},"successful_requests ",[1131,17706,4157],{"class":1326},[1131,17708,17709],{"class":1330}," num_requests",[1131,17711,4129],{"class":1148},[1131,17713,2794],{"class":1326},[1131,17715,17716],{"class":1377}," 100\n",[1131,17718,17719],{"class":1133,"line":2530},[1131,17720,1784],{"class":1330},[1131,17722,17723],{"class":1133,"line":2553},[1131,17724,17725],{"class":1137},"        # Print results\n",[1131,17727,17728,17730,17732,17734,17736,17738,17740,17742,17744,17746,17748,17751,17753,17755,17757,17760,17762],{"class":1133,"line":2566},[1131,17729,6487],{"class":1144},[1131,17731,1333],{"class":1148},[1131,17733,9897],{"class":1336},[1131,17735,1333],{"class":1148},[1131,17737,9902],{"class":1639},[1131,17739,1594],{"class":1148},[1131,17741,3384],{"class":1144},[1131,17743,1333],{"class":1148},[1131,17745,9914],{"class":1336},[1131,17747,1333],{"class":1148},[1131,17749,17750],{"class":1639},"SUCCESS",[1131,17752,1594],{"class":1148},[1131,17754,4020],{"class":1164},[1131,17756,4023],{"class":1144},[1131,17758,17759],{"class":1168},"=== Benchmark Results ===",[1131,17761,4020],{"class":1164},[1131,17763,3242],{"class":1148},[1131,17765,17766,17768,17770,17772,17774,17776,17778,17780,17783,17785,17787,17789,17791],{"class":1133,"line":3959},[1131,17767,6487],{"class":1144},[1131,17769,1333],{"class":1148},[1131,17771,9897],{"class":1336},[1131,17773,1333],{"class":1148},[1131,17775,9902],{"class":1639},[1131,17777,1594],{"class":1148},[1131,17779,4017],{"class":1313},[1131,17781,17782],{"class":1168},"\"URL: ",[1131,17784,4030],{"class":4029},[1131,17786,17013],{"class":1639},[1131,17788,4041],{"class":4029},[1131,17790,4020],{"class":1168},[1131,17792,1761],{"class":1148},[1131,17794,17795,17797,17799,17801,17803,17805,17807,17809,17812,17814,17816,17818,17820],{"class":1133,"line":4004},[1131,17796,6487],{"class":1144},[1131,17798,1333],{"class":1148},[1131,17800,9897],{"class":1336},[1131,17802,1333],{"class":1148},[1131,17804,9902],{"class":1639},[1131,17806,1594],{"class":1148},[1131,17808,4017],{"class":1313},[1131,17810,17811],{"class":1168},"\"Total requests: ",[1131,17813,4030],{"class":4029},[1131,17815,17094],{"class":1639},[1131,17817,4041],{"class":4029},[1131,17819,4020],{"class":1168},[1131,17821,1761],{"class":1148},[1131,17823,17824,17826,17828,17830,17832,17834,17836,17838,17841,17843,17846,17848,17850],{"class":1133,"line":4009},[1131,17825,6487],{"class":1144},[1131,17827,1333],{"class":1148},[1131,17829,9897],{"class":1336},[1131,17831,1333],{"class":1148},[1131,17833,9902],{"class":1639},[1131,17835,1594],{"class":1148},[1131,17837,4017],{"class":1313},[1131,17839,17840],{"class":1168},"\"Successful requests: ",[1131,17842,4030],{"class":4029},[1131,17844,17845],{"class":1639},"successful_requests",[1131,17847,4041],{"class":4029},[1131,17849,4020],{"class":1168},[1131,17851,1761],{"class":1148},[1131,17853,17854,17856,17858,17860,17862,17864,17866,17868,17871,17873,17876,17878,17880,17882],{"class":1133,"line":4049},[1131,17855,6487],{"class":1144},[1131,17857,1333],{"class":1148},[1131,17859,9897],{"class":1336},[1131,17861,1333],{"class":1148},[1131,17863,9902],{"class":1639},[1131,17865,1594],{"class":1148},[1131,17867,4017],{"class":1313},[1131,17869,17870],{"class":1168},"\"Success rate: ",[1131,17872,4030],{"class":4029},[1131,17874,17875],{"class":1639},"success_rate",[1131,17877,4176],{"class":1313},[1131,17879,4041],{"class":4029},[1131,17881,4181],{"class":1168},[1131,17883,1761],{"class":1148},[1131,17885,17886,17888,17890,17892,17894,17896,17898,17900,17903,17905,17907,17910,17912,17914],{"class":1133,"line":4082},[1131,17887,6487],{"class":1144},[1131,17889,1333],{"class":1148},[1131,17891,9897],{"class":1336},[1131,17893,1333],{"class":1148},[1131,17895,9902],{"class":1639},[1131,17897,1594],{"class":1148},[1131,17899,4017],{"class":1313},[1131,17901,17902],{"class":1168},"\"Total time: ",[1131,17904,4030],{"class":4029},[1131,17906,4096],{"class":1639},[1131,17908,17909],{"class":1313},":.2f",[1131,17911,4041],{"class":4029},[1131,17913,4077],{"class":1168},[1131,17915,1761],{"class":1148},[1131,17917,17918,17920,17922,17924,17926,17928,17930,17932,17935,17937,17940,17942,17944,17946],{"class":1133,"line":4107},[1131,17919,6487],{"class":1144},[1131,17921,1333],{"class":1148},[1131,17923,9897],{"class":1336},[1131,17925,1333],{"class":1148},[1131,17927,9902],{"class":1639},[1131,17929,1594],{"class":1148},[1131,17931,4017],{"class":1313},[1131,17933,17934],{"class":1168},"\"Requests per second: ",[1131,17936,4030],{"class":4029},[1131,17938,17939],{"class":1639},"requests_per_second",[1131,17941,17909],{"class":1313},[1131,17943,4041],{"class":4029},[1131,17945,4020],{"class":1168},[1131,17947,1761],{"class":1148},[1131,17949,17950,17952,17954,17956,17958,17960,17962,17964,17966,17968,17971],{"class":1133,"line":4138},[1131,17951,6487],{"class":1144},[1131,17953,1333],{"class":1148},[1131,17955,9897],{"class":1336},[1131,17957,1333],{"class":1148},[1131,17959,9902],{"class":1639},[1131,17961,1594],{"class":1148},[1131,17963,4017],{"class":1313},[1131,17965,4020],{"class":1168},[1131,17967,4023],{"class":1144},[1131,17969,17970],{"class":1168},"--- Response Times ---\"",[1131,17972,1761],{"class":1148},[1131,17974,17975,17977,17979,17981,17983,17985,17987,17989,17992,17994,17997,17999,18001,18003],{"class":1133,"line":4186},[1131,17976,6487],{"class":1144},[1131,17978,1333],{"class":1148},[1131,17980,9897],{"class":1336},[1131,17982,1333],{"class":1148},[1131,17984,9902],{"class":1639},[1131,17986,1594],{"class":1148},[1131,17988,4017],{"class":1313},[1131,17990,17991],{"class":1168},"\"Average: ",[1131,17993,4030],{"class":4029},[1131,17995,17996],{"class":1639},"avg_response_time",[1131,17998,6031],{"class":1313},[1131,18000,4041],{"class":4029},[1131,18002,4077],{"class":1168},[1131,18004,1761],{"class":1148},[1131,18006,18007,18009,18011,18013,18015,18017,18019,18021,18024,18026,18029,18031,18033,18035],{"class":1133,"line":4191},[1131,18008,6487],{"class":1144},[1131,18010,1333],{"class":1148},[1131,18012,9897],{"class":1336},[1131,18014,1333],{"class":1148},[1131,18016,9902],{"class":1639},[1131,18018,1594],{"class":1148},[1131,18020,4017],{"class":1313},[1131,18022,18023],{"class":1168},"\"Median: ",[1131,18025,4030],{"class":4029},[1131,18027,18028],{"class":1639},"median_response_time",[1131,18030,6031],{"class":1313},[1131,18032,4041],{"class":4029},[1131,18034,4077],{"class":1168},[1131,18036,1761],{"class":1148},[1131,18038,18039,18041,18043,18045,18047,18049,18051,18053,18056,18058,18061,18063,18065,18067],{"class":1133,"line":4197},[1131,18040,6487],{"class":1144},[1131,18042,1333],{"class":1148},[1131,18044,9897],{"class":1336},[1131,18046,1333],{"class":1148},[1131,18048,9902],{"class":1639},[1131,18050,1594],{"class":1148},[1131,18052,4017],{"class":1313},[1131,18054,18055],{"class":1168},"\"Min: ",[1131,18057,4030],{"class":4029},[1131,18059,18060],{"class":1639},"min_response_time",[1131,18062,6031],{"class":1313},[1131,18064,4041],{"class":4029},[1131,18066,4077],{"class":1168},[1131,18068,1761],{"class":1148},[1131,18070,18071,18073,18075,18077,18079,18081,18083,18085,18088,18090,18093,18095,18097,18099],{"class":1133,"line":4247},[1131,18072,6487],{"class":1144},[1131,18074,1333],{"class":1148},[1131,18076,9897],{"class":1336},[1131,18078,1333],{"class":1148},[1131,18080,9902],{"class":1639},[1131,18082,1594],{"class":1148},[1131,18084,4017],{"class":1313},[1131,18086,18087],{"class":1168},"\"Max: ",[1131,18089,4030],{"class":4029},[1131,18091,18092],{"class":1639},"max_response_time",[1131,18094,6031],{"class":1313},[1131,18096,4041],{"class":4029},[1131,18098,4077],{"class":1168},[1131,18100,1761],{"class":1148},[1131,18102,18103,18105,18107,18109,18111,18113,18115,18117,18120,18122,18125,18127,18129,18131],{"class":1133,"line":4258},[1131,18104,6487],{"class":1144},[1131,18106,1333],{"class":1148},[1131,18108,9897],{"class":1336},[1131,18110,1333],{"class":1148},[1131,18112,9902],{"class":1639},[1131,18114,1594],{"class":1148},[1131,18116,4017],{"class":1313},[1131,18118,18119],{"class":1168},"\"Standard deviation: ",[1131,18121,4030],{"class":4029},[1131,18123,18124],{"class":1639},"stdev_response_time",[1131,18126,6031],{"class":1313},[1131,18128,4041],{"class":4029},[1131,18130,4077],{"class":1168},[1131,18132,1761],{"class":1148},[1131,18134,18135,18137,18139,18141,18143,18145,18147,18149,18152,18154,18157,18159,18161,18163],{"class":1133,"line":4292},[1131,18136,6487],{"class":1144},[1131,18138,1333],{"class":1148},[1131,18140,9897],{"class":1336},[1131,18142,1333],{"class":1148},[1131,18144,9902],{"class":1639},[1131,18146,1594],{"class":1148},[1131,18148,4017],{"class":1313},[1131,18150,18151],{"class":1168},"\"95th percentile: ",[1131,18153,4030],{"class":4029},[1131,18155,18156],{"class":1639},"p95_response_time",[1131,18158,6031],{"class":1313},[1131,18160,4041],{"class":4029},[1131,18162,4077],{"class":1168},[1131,18164,1761],{"class":1148},[1131,18166,18167,18169,18171,18173,18175,18177,18179,18181,18184,18186,18189,18191,18193,18195],{"class":1133,"line":4323},[1131,18168,6487],{"class":1144},[1131,18170,1333],{"class":1148},[1131,18172,9897],{"class":1336},[1131,18174,1333],{"class":1148},[1131,18176,9902],{"class":1639},[1131,18178,1594],{"class":1148},[1131,18180,4017],{"class":1313},[1131,18182,18183],{"class":1168},"\"99th percentile: ",[1131,18185,4030],{"class":4029},[1131,18187,18188],{"class":1639},"p99_response_time",[1131,18190,6031],{"class":1313},[1131,18192,4041],{"class":4029},[1131,18194,4077],{"class":1168},[1131,18196,1761],{"class":1148},[1030,18198,18200],{"id":18199},"profiling-best-practices","Profiling Best Practices",[1038,18202,18204],{"id":18203},"development-workflow","Development Workflow",[18206,18207,18208,18224,18240,18259],"ol",{},[1052,18209,18210,18213],{},[1045,18211,18212],{},"Profile Early and Often",[1049,18214,18215,18218,18221],{},[1052,18216,18217],{},"Use Django Debug Toolbar during development",[1052,18219,18220],{},"Profile new features before deployment",[1052,18222,18223],{},"Set performance budgets for critical paths",[1052,18225,18226,18229],{},[1045,18227,18228],{},"Focus on High-Impact Areas",[1049,18230,18231,18234,18237],{},[1052,18232,18233],{},"Profile user-facing endpoints first",[1052,18235,18236],{},"Identify the slowest 20% of requests",[1052,18238,18239],{},"Optimize database queries before code",[1052,18241,18242,18245],{},[1045,18243,18244],{},"Use Multiple Profiling Tools",[1049,18246,18247,18250,18253,18256],{},[1052,18248,18249],{},"Debug Toolbar for quick insights",[1052,18251,18252],{},"Silk for detailed production profiling",[1052,18254,18255],{},"cProfile for CPU-intensive operations",[1052,18257,18258],{},"Memory profilers for memory issues",[1052,18260,18261,18264],{},[1045,18262,18263],{},"Establish Baselines",[1049,18265,18266,18269,18272],{},[1052,18267,18268],{},"Measure performance before optimization",[1052,18270,18271],{},"Track improvements over time",[1052,18273,18274],{},"Monitor regression in CI/CD",[1038,18276,12801],{"id":18277},"production-monitoring-1",[18206,18279,18280,18296,18312],{},[1052,18281,18282,18285],{},[1045,18283,18284],{},"Continuous Monitoring",[1049,18286,18287,18290,18293],{},[1052,18288,18289],{},"Monitor key performance metrics",[1052,18291,18292],{},"Set up alerts for performance degradation",[1052,18294,18295],{},"Track performance trends over time",[1052,18297,18298,18301],{},[1045,18299,18300],{},"Error Tracking",[1049,18302,18303,18306,18309],{},[1052,18304,18305],{},"Monitor error rates and types",[1052,18307,18308],{},"Track slow query patterns",[1052,18310,18311],{},"Identify performance regressions",[1052,18313,18314,18317],{},[1045,18315,18316],{},"Capacity Planning",[1049,18318,18319,18322,18325],{},[1052,18320,18321],{},"Monitor resource utilization",[1052,18323,18324],{},"Plan for traffic growth",[1052,18326,18327],{},"Identify scaling bottlenecks",[1026,18329,18330],{},"Effective profiling transforms Django applications from slow, resource-hungry systems into efficient, scalable platforms. By combining development profiling tools with production monitoring, you can maintain optimal performance while continuously improving your application's efficiency.",[1026,18332,18333],{},"The key is to profile systematically, focus on high-impact optimizations, and maintain performance awareness throughout the development lifecycle. With proper profiling practices, you can build Django applications that perform excellently under real-world conditions.",[9914,18335,18336],{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRJPX, html code.shiki .sRJPX{--shiki-light:#91B859;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sGuSu, html code.shiki .sGuSu{--shiki-light:#39ADB5;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s27EL, html code.shiki .s27EL{--shiki-light:#91B859;--shiki-default:#AB5E3F;--shiki-dark:#C4704F}html pre.shiki code .sETVe, html code.shiki .sETVe{--shiki-light:#39ADB5;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":1126,"searchDepth":1134,"depth":1141,"links":18338},[18339,18342,18346,18350,18354,18358,18362,18366,18370],{"id":1032,"depth":1141,"text":1033,"children":18340},[18341],{"id":1040,"depth":1155,"text":1041},{"id":1111,"depth":1141,"text":1112,"children":18343},[18344,18345],{"id":1118,"depth":1155,"text":1119},{"id":1571,"depth":1155,"text":1572},{"id":2571,"depth":1141,"text":2572,"children":18347},[18348,18349],{"id":2578,"depth":1155,"text":2579},{"id":2883,"depth":1155,"text":2884},{"id":4515,"depth":1141,"text":4516,"children":18351},[18352,18353],{"id":4519,"depth":1155,"text":4520},{"id":5408,"depth":1155,"text":5409},{"id":6386,"depth":1141,"text":6387,"children":18355},[18356,18357],{"id":6390,"depth":1155,"text":6391},{"id":8357,"depth":1155,"text":8358},{"id":10218,"depth":1141,"text":1081,"children":18359},[18360,18361],{"id":10221,"depth":1155,"text":10222},{"id":11384,"depth":1155,"text":11385},{"id":12800,"depth":1141,"text":12801,"children":18363},[18364,18365],{"id":12804,"depth":1155,"text":12805},{"id":13504,"depth":1155,"text":13505},{"id":15321,"depth":1141,"text":15322,"children":18367},[18368,18369],{"id":15325,"depth":1155,"text":15326},{"id":16587,"depth":1155,"text":16588},{"id":18199,"depth":1141,"text":18200,"children":18371},[18372,18373],{"id":18203,"depth":1155,"text":18204},{"id":18277,"depth":1155,"text":12801},"md",null,{},{"title":797,"description":1028},"5kfW2kJQEeZSRjgFMbo6sdH0r0RjYRL841ryTzU66yQ",[18380,18382],{"title":793,"path":794,"stem":795,"description":18381,"children":-1},"Caching is one of the most effective performance optimization techniques in Django applications. By storing frequently accessed data in fast storage systems, you can dramatically reduce database load, improve response times, and enhance user experience. This comprehensive guide covers multi-level caching strategies, cache backends, invalidation patterns, and advanced caching techniques.",{"title":801,"path":802,"stem":803,"description":18383,"children":-1},"This comprehensive guide explores advanced Django concepts and expert-level techniques for building enterprise-scale applications. These topics represent the pinnacle of Django development, covering system architecture patterns, domain-driven design, large-scale project organization, and advanced customization techniques that separate expert developers from intermediate practitioners.",1772474956745]