Joomla Performance: Cache, DB, CDN – 2-3x Speedup

Slow page loading eats up leads: visitors leave before receiving a response. We speed up Joomla sites end to end — from diagnosing bottlenecks to control measurements — and in typical projects response times are cut by two to three times. Let's discuss your task and come back with an estimate and a plan.

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Frequently Asked Questions

Why Joomla slows down: where acceleration begins

A Joomla site rarely slows down on its own: with a single visitor the page is served instantly, but under load the response time grows several times over and timeout errors appear.

The reason is that every page request performs a fixed amount of work that does not depend on the number of visitors — and that work is made up of several layers.

The first layer is the database. Typical database bottlenecks for a site: queries without indexes, module queries inside the content output loop, fetching an entire table where a single record is needed.

One page view of a catalog turns into dozens of database calls instead of one prepared result set, and at peak the connections queue up — the page response time under load grows, not just its weight.

The second layer is caching. It is often disabled or only partially enabled: individual components are cached, while the template and modules are rebuilt on every request.

If the cache overflows or is flushed on any content change, visitors trigger the same set of heavy queries again and again. Logged-in users and dynamic blocks bypass the cache, and they account for the bulk of repeated requests.

The third layer is processing on every request: the page is assembled in full rather than incrementally, and static files are served by the same process as the markup.

Speeding up Joomla starts not with installing extensions but with profiling: you need to see how much time the database takes, how much the template assembly takes, and how much file delivery takes. Let's break down how this gets resolved.

What clearing bottlenecks delivers: measurable effects

The first measurable effect is a reduction in server response time. While a noticeable part of the work goes into repeated database calls and rebuilding the same blocks, the response takes considerably longer than it needs to.

After clearing the bottlenecks, the same scenario is served 2–3 times faster, and this applies not only to light pages but also to heavy sections with filters, sorting and pagination.

The second benchmark is the share of failures caused by timeouts. It is directly tied to how long the server holds a connection under load: while requests are queued, some visitors and search engine crawlers get an error instead of a page.

In practice this share drops from a few percent to tenths of a percent — on the same server and with the same traffic volume.

The third effect is reduced database load. When repeated queries, menus, counters and recommendation blocks are served from the cache using a precomputed key, the number of database calls drops several times over, and the query queue stops growing with every new visitor.

This removes the main cause of degradation: the database stops being the point where all requests converge at once.

The fourth is performance under peak traffic. We measure it with a load scenario before and after the changes: you can see that the ceiling for concurrent visitors rises several times over, while speed at peak stays close to normal.

Such numbers come from measurement, not from a feeling — a profile before, a repeat of the same scenario after, a comparison of the numbers, and a decision on what to clean up next.

Approaches to speeding up Joomla: cache, database, content delivery

Speeding up Joomla does not come down to a single switch: every site has its own bottleneck — heavy database queries, full page assembly on every request, static files served from the same server as dynamic content.

We start with measurement: we take a load profile and look at what share of time goes into request processing, database calls and file delivery. The option is chosen based on that profile, not by "turning everything on at once".

The four areas below solve different tasks and behave differently when applied incorrectly. In practice they are combined, but the order of implementation depends on where exactly the seconds are lost.

Option When it fits Limitations
Page and fragment caching Catalog, blog, reference sections: content is read more often than changed Personal accounts and carts require exclusions — otherwise a visitor will see someone else's page
Query and index optimization Filters and the admin panel are slow, the database keeps the CPU busy Requires access to the schema and a test environment: an extra index slows down writes
Static delivery through an intermediary The audience is geographically distributed, lots of images and scripts Without a cache invalidation strategy on release, visitors get outdated files
Dedicated environment for load Traffic peaks, heavy extensions, not enough memory and processes Resources grow linearly and mask the problem until the first three items are resolved

Order of work: from diagnostics to control measurements

The order of work is the same for any Joomla project: first we record the facts, then we change the configuration — otherwise it is impossible to prove what exactly produced the speedup. Below are six stages, each leaving the client with a ready artifact.

  1. Taking baseline measurements. We collect objective metrics: response time of typical pages, number of database queries, cache hit rate, weight of delivered resources. We measure on a copy of the production environment — otherwise the numbers after the changes are not comparable.
  2. Site performance diagnostics. We profile the key scenarios — catalog, product page, search, login — and break the response time down by layer. The output is a bottleneck map: where the bulk of the time is lost and which changes will give the maximum effect.
  3. Setting up server cache and database. We enable page and query caching, fix indexes and heavy queries, and move static files to a CDN. We apply changes one at a time so that the contribution of each to the overall result is visible.
  4. Correctness check after optimization. We run through registration, checkout, forms, access rights and the admin panel: the cache must not serve outdated data or break scenarios. We look separately at behavior under load and after a cache flush.
  5. Control measurements. We repeat the same set of metrics on the same environment and traffic profile, comparing before and after for each page type, not just the home page.
  6. Handover of documentation. We provide a map of settings, cache invalidation rules, a pre-release checklist and a rollback procedure — your team maintains the result on its own.

What remains in the project after handover

After handover, your team should not be left with a "black box". The set of artifacts below covers three situations: another contractor makes a change, the environment needs to be built from scratch, or a release went wrong and has to be reverted.

For Joomla projects where we sped up page delivery this is especially important — the effect holds only with clear cache settings.

  • Environment configurations — settings files for the development, test and production environments: they differ in addresses and credentials, not in hidden "in-place" edits.
  • Environment diagram — which nodes are responsible for what: application, database, static delivery layer, background job queue and backups, with failure points marked.
  • Caching and invalidation rules — what is cached on the application side, what at the server level, and by which event a record is invalidated; the cache behavior during bulk editing of catalog and prices is described separately.
  • Site maintenance regulations — how often the platform and extensions are updated, log checks, monitoring of database growth and index rebuilds, and the thresholds at which intervention is needed.
  • Change rollback procedure — how to return to the previous version in a single operation, what happens to the database and uploaded files during that, and who confirms the rollback.
  • Instructions for the team — where the repository and branches live, how to ship a change and raise a local copy for testing without risk to the production environment.
  • Accesses and accounts — handed over in a closed form with a list of owners; we remain a backup point of support until your team reaches an independent cycle.

Case: a loaded catalog — what changed after the work

A catalog on Joomla with tens of thousands of items, parameter filters and a personal account held up on normal days, but broke down during a sale: the number of concurrent visitors grew several times over, and not only product pages fell but also the cart and checkout.

Measurements before the work: catalog page response — 4–7 seconds, at peak about a quarter of requests returned a server error, and the share of visitors leaving at the parameter selection step reached 40%.

We counted by the 95th percentile, not the average — the average was precisely what masked the heavy tail. The problem was not server capacity: the page was assembled from scratch for every anonymous visitor, and the filters were recalculated on every request.

What was changed

We separated the caching levels: full-page cache for anonymous visitors and a separate one for blocks with prices and stock so that outdated data is not served.

Heavy filter queries were moved into a scheduled precomputation, composite indexes were added for real parameter combinations, and static files and images were moved to a CDN. Database connections were switched to a pool so that peaks do not hit the connection limit.

What the result was

Catalog response — 0.9–1.4 seconds on the same pages, no failures at peak, and the system got through the sale without manual interventions or night shifts. Pages viewed per session roughly doubled, and the share of abandoned carts at the filter step dropped from 40% to 12%.

The measurements were repeated at the next peak: the numbers were confirmed, and no additional tuning was needed. Headroom remained — the configuration withstands roughly twice as many concurrent visitors as on the record day.

What to do if the site is already running under load

Under load the order of work changes: reversibility first, speedup second. We do not take Joomla down or put the project into maintenance mode — we work on a working copy, ship changes in batches, and after each batch we watch how the site behaves on real traffic. If the metrics get worse, we return to the previous state in one step.

The cache is enabled in stages, not with one lever. First, page cache for anonymous guests only, with exclusions for the cart, forms and authenticated sections; then module and view caching, then compression and bundling of static files.

After each stage we check the hit rate, response time and queue depth — if the share of non-standard responses grows, we roll the stage back.

Rollback on a live project rests on two things: deployment through a separate release directory with a pointer switch, and storing cache settings in version control.

Then a revert is a switch back and re-applying an already tested set of parameters, not a manual edit under pressure. Before database schema changes we take a backup and separately verify that restoration works on a copy, not just that it "should work".

The database and static delivery come last. We find heavy queries via the slow query log, add indexes during low-activity hours and compare the execution plan before and after, so as not to make things worse for queries with sorting.

We move static files to a delivery network while keeping the direct origin as a fallback path — if delivery goes wrong, traffic returns to the server with a single change.

Common technical concerns before starting work

Concerns before starting Joomla speedup are usually not about the optimization itself, but about what it might break: the cart, forms, content freshness. Below are the four questions asked most often, and the answers that the scope of work and acceptance are built on.

Won't the cache "stick" to the cart and forms?

Page cache serves anonymous requests only. The cart, checkout and forms work with a session and personal data, so we take them out of the cache in a targeted way.

At acceptance we walk the full path — product, promo code, logging into the personal account — and make sure that one user's state is not shown to another.

How is content updated when caching is on?

Invalidation by event, not just by timer: publishing content, changing a price or stock level invalidates the affected pages and individual blocks.

If a rule did not fire, the cache serves the previous version for no longer than the specified lifetime — we fix that boundary in advance.

Why are the numbers different on the staging site and the production site?

Different layers sit in front of the application: compression, browser and proxy cache, static file delivery, and the quality of the connection to the database. Without them, a measurement shows a sandbox, not your site.

That is why we describe the environment profile before the work and reproduce it in the measurements.

How do you make sure the measurements are reliable?

We take a distribution, not a single number: median and 95th percentile for identical scenarios, on a warm cache and from a cold start, before and after — in the same environment.

We repeat the run and deliver the result together with the spread, so that the several-fold speedup is visible without any fudging.

Let's discuss the task and come back with an estimate and a plan

To discuss the optimization task concretely rather than in general terms, we need access and measurements for analysis.

From them it is clear where exactly the seconds are lost: in page delivery, in heavy database queries, or in the absence of caching on the server and browser side.

  • the site address and test access to the control panel and hosting — read-only rights are enough for the initial analysis;
  • "as is" measurements: response time of the home page and typical internal pages, number of queries, size of delivered files;
  • server logs or slow page reports for the last month;
  • the composition of extensions and the template, a list of external services connected to the page;
  • a description of the load: concurrent visitors, peak hours, how the site behaves when content is published;
  • constraints: what cannot be changed, which sections are critical, whether there is a window for maintenance.

In return you will receive an estimate and a work plan: a list of bottlenecks by priority, what gives the main speed gain and in what sequence it is done.

We will separately agree on the acceptance procedure for the result — control measurements before and after, by which you accept the work, not by general impressions.

Describe the task and send whatever you already have at hand — we will come back with an estimate, a plan and a clear verification scheme.

Our competencies:

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1393
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1368
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1139
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1152
  • Website development for SBH Partners
    Website development for SBH Partners
    1231
  • Website development for Red Pear
    Website development for Red Pear
    641