Performance defaults
The server settings every Avaloi site starts with: page cache, compression, browser caching, PHP workers, OPcache, MariaDB, and WordPress cron.
Parts of this feature are still being built. The Not yet section lists them.
Every site and environment runs in its own container with the settings below. You do not need to change them. Plan size changes the numbers marked "per plan".
Page cache
The web server keeps a copy of each page and serves it without running PHP. The x-avaloi-cache response header shows the result: HIT, MISS, BYPASS, or EXPIRED.
| Setting | Value |
|---|---|
| What is cached | GET and HEAD answers with status 200, 301, or 302 for 10 minutes, and 404 for 1 minute |
| Skipped | Signed-in users, password protected posts, commenters, carts, and checkouts (by cookie); /wp-admin, /wp-login.php, /xmlrpc.php, /cart, /checkout, /my-account; every POST; and any path you add in Tools |
| Busy pages | When a page expires, one request rebuilds it while other visitors get the previous copy. Many visitors on a cold page reach PHP once |
| PHP errors | If PHP fails or times out, visitors get the last good copy |
| Purge | WordPress clears the cache when you publish or update. Tools > Clear cache clears everything |
Query strings are part of the cache key, so /?utm_source=x is cached as its own page.
Compression
Pages, CSS, JavaScript, JSON, XML, feeds, SVG, and fonts are compressed with Brotli or gzip from 256 bytes up. Cloudflare in front of the site serves HTTP/2 and HTTP/3 to visitors and may recompress, for example with zstd.
Browser caching
The server tells browsers how long to keep static files:
| Files | Live and other Git mode environments | SFTP mode (a writable staging or multidev) |
|---|---|---|
Uploads in /wp-content/uploads/ |
1 year | 1 year |
CSS and JavaScript with a content hash in the name, such as app.3f9a1c2b.js |
1 year | 1 year |
| Other theme, plugin, and WordPress files: CSS, JavaScript, images, fonts, video, audio, PDF | 7 days | Checked on every load |
Why 7 days and not a year: WordPress adds ?ver= to theme and plugin files, and the number often stays the same when the code changes. A year would hide a deploy from returning visitors. Build tools that put a hash in the file name get the full year. In SFTP mode the browser checks each file on every load and gets a quick "not modified" answer when nothing changed, so your edits show at once.
PHP
| Setting | Value |
|---|---|
| Workers | One per PHP thread of the plan (per plan). Smaller plans start workers on demand and stop them after 30 seconds idle (10 seconds on staging). Business 2 and up keep a few warm |
| Memory per worker | 256 MB for each request. The pool is the threads times 256 MB, and it is a limit, not memory held back for you |
| Request time limit | 300 seconds, the same as the web server's wait |
| Slow log | Requests over 5 seconds are written to the PHP slow log |
| Worker recycling | Each worker restarts after 500 requests |
OPcache
OPcache keeps compiled PHP in memory: 192 MB on Starter and Pro, 256 MB on Business 1 and 2, and 384 MB on Business 3, Agency, and Enterprise 1 (per plan). On live and other Git mode environments the code cannot change between deploys, so OPcache never checks file times, and each deploy resets it. In SFTP mode OPcache checks file times every 2 seconds, so an edit shows within 2 seconds. The JIT is off: WordPress gains little from it, and its buffer would come out of your PHP memory.
MariaDB
| Setting | Value |
|---|---|
| InnoDB buffer pool | 384 MB on Starter, 512 MB on Pro, 768 MB on Business 1, 1 GB on Business 2, 1.5 GB on Business 3 and Agency, 2 GB on Enterprise 1 (per plan). It never goes under MariaDB's 128 MB default, and it grows only as the database is read |
| Commit durability | Every commit is written to disk before it returns. A server crash loses no orders |
| Doublewrite buffer | Off. The ZFS file system already protects every block |
| Query cache | Off. It slows writes and does not scale |
| Temporary tables | 128 MB in memory before they go to disk |
| Connections | Two per PHP thread plus 20, for cron, WP-CLI, and the Database tab |
WordPress
- WP-Cron does not run on page loads. On live, the server runs due events every 15 minutes as your site user, with a log in cron.log. Staging and multidev have it off. Change it under Cron jobs.
- Post revisions, the heartbeat, emoji, and embeds keep the WordPress defaults. Plugins and themes rely on them.
- The page cache runs in the web server, so WordPress needs no page cache plugin and no
WP_CACHEsetting. A page cache plugin adds work without a gain.
Not built yet
- Per site choices for cache lifetimes and browser caching.
- An autoload size warning. Large autoloaded options slow every uncached page. A new site loads about 50 KB of them.
Related
Still stuck?
Email [email protected] with your site name and what you tried, or send us a message.