Shared hosting works well for JekCMS sites with under 5,000 daily visits — if configured correctly. The defaults are designed for VPS environments and will cause timeouts on most shared plans. This guide covers the specific php.ini values, .htaccess rules, and database settings that separate a sluggish site from a fast one.
The most impactful php.ini change is max_execution_time. JekCMS's image processing pipeline can take 3–8 seconds per upload for large files, and the default on many shared plans is 30 seconds — enough for a single image, not enough for batch uploads. Set it to 90 seconds. The second critical value is memory_limit: 256MB is the practical minimum; 512MB is safer for sites with active media operations.
OPcache: The Silent Performance Killer
opcache.memory_consumption should be at least 128MB. Many shared hosting control panels configure this to 64MB, which causes frequent cache invalidation and is often the root cause of intermittently slow page loads that are difficult to reproduce. You can check current usage by creating a temporary PHP file that calls var_dump(opcache_get_status()).
MySQL Query Cache Conflict
For the database, disable MySQL's built-in query cache (query_cache_type=0 if your host allows it) and rely on JekCMS's application-level query cache instead. The two caching layers can produce inconsistent results when both are active. If you cannot modify MySQL settings, set QUERY_CACHE_ENABLED=false in your JekCMS environment file to disable the application cache and let MySQL handle caching alone.
Verifying GZIP and Browser Cache
Verify GZIP compression and browser caching are active with: curl -H "Accept-Encoding: gzip" -I https://yoursite.com/. The response should include Content-Encoding: gzip. If it does not, your host may require activating mod_deflate from the control panel. Without GZIP, HTML responses are typically 3–5× larger than they need to be.