At least every other day, a customer contacts us and asks us the following question: “Why is my Joomla website so slow?”
We reply to her/him that since Joomla is a very large and powerful CMS, it is somehow slow. However, it shouldn’t be very slow, and there are ways to make a Joomla website faster.
Now let us list and discuss all the reasons that make a Joomla website very slow:
Joomla is a complex product: Joomla is a very complex product from a software development point of view. This complexity that is necessary to make Joomla one of the most powerful and flexible CMSs out there comes at a price, slowness!
Too many loaded extensions: Think about it this way, your Joomla website is like a cart, and every extension is like a box of apples. The more extensions that you add to your Joomla website (or the more apple boxes you add to your cart) the slower your website (cart) is. The best thing to do is to disable, or better yet, completely uninstall, unused extensions.
Heavy templates: Some Joomla templates are heavier than others. If you choose a template that has a lot of non-optimized code and large images, then expect this template to slow down your whole website. You will need to optimize the code and the images in the template in order to reduce the negative impact of the template on the speed of the website.
No caching: The developers who created Joomla are aware of the slowness issues in Joomla and that’s why they have provided built-in caching functionality. If you run Joomla without caching, then it’ll be slower (but beware, when you use caching the changes that you make in your Joomla website won’t show up unless you clear your cache).
Slow hosting: Many Joomla website owners are small businesses, and cannot afford to have a dedicated server to host their website, and that’s why they opt with a shared hosting solution that is often slow because of the so-called over-selling. At itoctopus, we provide fast and secure hosting only for our customers. We do not oversell and your website will be always up and ready to serve your visitors.
Too much data: The amount of data that you have on your website is inversely proportional to the speed of the website. For example, let’s say that you have only 5 pages on your Joomla website. This means that the Joomla system has to go through only 5 rows in your database to retrieve the main content of the requested page (of course, there are many other requests, but let’s pretend that there’s only one database request for now). Now, in case you have 10,000 pages, then this means that the Joomla system has to go through 10,000 rows in the database (which will take more time). Now imagine how the search works if you have only 5 pages versus if you have 10,000 pages. Note that there are many ways to address this situation, including indexing the database and moving the database to a standalone server.
Too many visitors: Again, since Joomla is a heavy CMS, the more visitors you have, the slower your website is. We have seen Joomla websites that literally start crawling when they have a few dozen simultaneous requests. Check this article on the number of users that Joomla can handle, and what to do to increase that number.
Malicious flood of requests: This is essentially the same thing as “too many visitors”, but with a twist. The malicious flood of requests is just fake traffic to your website, e.g. traffic that is not generated by human beings, but rather by bots, either to scrape the content of your website or to intentionally slow it down. The best thing to do in this situation is to block the IP or the range of IPs issuing the malicious requests.
If you need any help in analyzing why your Joomla website is slow or how to address the slowness, then contact us. We are always eager and ready to help you!
Our Joomla website was extremely slow, and we discovered that it was all due to this query in a modified Joomla Ninja Board extension:
SELECT COUNT(*) FROM `jos_ninjaboard_posts` AS `tbl` LEFT JOIN `jos_users` AS `user` ON (`user`.`id` = `tbl`.`created_user_id`) LEFT JOIN `jos_ninjaboard_people` AS `person` ON (`person`.`ninjaboard_person_id` = `tbl`.`created_user_id`) LEFT JOIN `jos_gu_users` AS `guser` ON (`guser`.`uid` = `tbl`.`created_user_id`) LEFT JOIN `jos_ninjaboard_topics` AS `topic` ON (`topic`.`ninjaboard_topic_id` = `tbl`.`ninjaboard_topic_id`) LEFT JOIN `jos_ninjaboard_posts` AS `first_post` ON (`first_post`.`ninjaboard_post_id` = `topic`.`first_post_id`) LEFT JOIN `jos_ninjaboard_forums` AS `forum` ON (`forum`.`ninjaboard_forum_id` = `topic`.`forum_id`) WHERE `forum`.`ninjaboard_forum_id` != 'NULL' AND `topic`.`enabled` = 1 AND `forum`.`enabled` = 1 AND `tbl`.`enabled` = 1 AND `forum`.`ninjaboard_forum_id` NOT IN ( 32, 31, 16, 9, 5, 27, 12, 3, 23, 24, 4, 2, 15, 13, 14, 30, 28 );
The above query was taking around half an hour to execute as it was examining over 100 million rows.
[…] slow query log you’ll be able to determine which queries are slowing down your whole website. This comment states that the person had a query that was talking 30 minutes to be executed – we’re […]