- Home
- Skills
- Venkateshvenki404224
- Frappe Apps Manager
- Frappe Performance Optimizer
frappe-performance-optimizer_skill
7
GitHub Stars
1
Bundled Files
2 months ago
Catalog Refreshed
4 months ago
First Indexed
Readme & install
Copy the install command, review bundled files from the catalogue, and read any extended description pulled from the listing source.
Installation
Preview and clipboard use veilstrat where the catalogue uses aiagentskills.
npx veilstrat add skill venkateshvenki404224/frappe-apps-manager --skill frappe-performance-optimizer- SKILL.md2.8 KB
Overview
This skill generates performance-optimized code, queries, caching patterns, and index recommendations tailored for Frappe applications. It focuses on eliminating slow queries, preventing N+1 patterns, and applying practical caching and bulk-operation strategies. The goal is measurable speed-ups with minimal disruption to existing code.
How this skill works
The skill inspects reported slow queries, schema usage, and common access patterns to propose optimized SQL, appropriate database indexes, and caching layers. It produces concrete code snippets for Frappe: efficient JOIN queries, cache wrappers using frappe.cache(), and bulk update patterns with single SQL operations. It can also recommend index definitions and where to place caches (in-memory vs. TTL).
When to use it
- When users report slow page loads or reports tied to database queries
- When audit or profiler shows N+1 queries or repeated lookups
- Before deploying reports or heavy-reporting views to production
- When implementing expensive calculations that can be reused
- When preparing bulk data migrations or updates
Best practices
- Prefer SELECT with JOINs and GROUP BY instead of per-row queries to avoid N+1 issues
- Add composite indexes that match WHERE and ORDER BY columns used by heavy queries
- Cache idempotent, read-heavy computations with explicit TTL and cache keys tied to relevant records
- Use bulk SQL updates/inserts for large batches and call frappe.db.commit() once after the batch
- Measure performance before and after changes using query profiling or explain plans
Example use cases
- Optimize a slow sales summary report by replacing per-invoice loops with a single aggregated JOIN and adding an index on (customer, posting_date, docstatus)
- Cache item price lookups per price list and customer using frappe.cache() with a 1-hour TTL
- Implement bulk activation/deactivation of Item records using a single UPDATE WHERE name IN (...) to reduce round-trips
- Add indexes and rewrite queries for stock ledger or other report-generating modules to drop execution time from minutes to seconds
- Detect and rewrite code paths that fetch child records in loops into batched queries
FAQ
No. Indexes speed reads but add overhead to writes and increase storage. Add indexes targeted to heavy read queries and monitor write latency and index size.
How do I choose what to cache and for how long?
Cache read-heavy, expensive-to-compute values that change infrequently. Use short TTLs for frequently changing data and invalidate caches when related records change.