Update: Please note this article compares Joomla 3.2 with Drupal 7. Significant changes have been made to Drupal with the release of version 8.
We are currently working on Drupal 8 projects and will publish a blog with our findings soon.alarm image
A couple of weeks ago, I needed to write a technical comparison between Joomla and Drupal. Naturally my search began online. Surprisingly, I couldn't find any decent technical assessments of these two well-regarded open-source Content Management Systems (CMS).
Most of the material available reflected superficial comparisons written by webmasters and non-developers. There were a handful of articles that compared performance using benchmarks, but nothing in-depth enough to evaluate the technical, inner-workings of the CMS's underlying PHP framework in detail.
As a developer who has worked both on Joomla and Drupal, I decided it was time to write a good technical comparison between Joomla and Drupal to end the war between the two.
Before we begin, we must clarify some CMS-specific terminology:
infoWhat Drupal calls Modules is very similar to the concept of Component in Joomla.
infoWhat Joomla calls Modules is very similar to the concept of Blocks in Drupal.
Ease of use vs. Complexity
If you look online, most analysts use a spectrum to help determine which CMS would be most suitable for different specifications.
Wordpress is at one end of the range, being easiest to use and not suitable for complex projects, Joomla is in the middle, and Drupal is at the other end of the range being the hardest to use and most suitable for complex projects. This categorisation has some truth in it, but should only be considered on a very general level.
From the perspective of a webmaster making updates to the site, this is a fairly accurate assumption. However, developmentally, this is not necessarily the case - let's find out why.
This post is mainly concerned with high-quality custom development. You can easily hack any of the 3 CMS's to do what you want, but this is at the expense of security, maintainability, and reliability.
Similarly, the myth that Drupal is more suitable for complex projects than Joomla is caused by evaluating the CMS's from a webmaster's perspective rather than a programmer's perspective. This perception is due to the fact that Drupal provides a modular approach for user interface design and content entry. Drupal web pages are created using blocks and views.
This gives a webmaster ultimate flexibility to build web pages without the need of programming modules for Drupal. While Joomla provides similar toolboxes (components and modules) to webmasters, it is not as powerful as Drupal for a skilled webmaster to quickly build new complex web pages.
However, building new custom functionality is a different story. In today's world where everything is managed by software, flexibility in moving contents around in webpage and having a modular user interface is not enough. As business needs evolve, the functionality within the CMS needs to be flexible enough to accommodate this.
Technical comparison of Joomla and Drupal
As soon as the programmer opens up the guts of the Drupal source code they are faced with a nightmare. Customising Drupal is not easy, as it is based on a poorly-designed, procedural framework, whereas Joomla is based on a well-designed, Object-Oriented, MVC framework. It also implements a number of design patterns such as listener, etc.
Even if you hire highly-skilled, (very expensive) Drupal programmers, there is a high possibility that your code will still resemble spaghetti, which will cause many problems in the future if you want to make further changes.
- In Drupal, views are stored in the database by default. This means you can't have version control (such as SVN or GIT) and developers can't collaborate on developing views. Drupal Core provides the ability to override default views in code, but this process involves extra development steps.
- Every new content type in Drupal corresponds to a couple of database tables. This means the database structure changes over time as the webmaster creates and changes content types. This is a nightmare for developers who like to create Entity Relationship Diagrams (ERD) when building web applications. You can never rely on your ERD because the next time you look at the database, the number of tables and the schema would be different.
- In Drupal, logs are stored in the database. All modern systems store logs in files. Storing logs in databases means they are very hard to access, analyse, and profile. A developer can't use Linux tools (such as sed, etc.) to process and analyse logs. The process is slower and takes massive amount of disk space (lots of gigabytes) for database storage. It makes the system database grow unnecessarily and become inefficient. For a large high traffic site it is virtually impossible to query and analyse the logs. Additionally it cannot support log-rotation and archiving of old logs. Who in their right mind would store logs in the database? To address these issues, Drupal has introduced syslog, however it is not recommended for shared hosting environments and you have to go through many steps to disable dblog and set up syslog instead.
2. Design Patterns
Firstly, Joomla is Object Oriented, but Drupal is based on old PHP 4 procedural programming (the dark days of php)
Drupal implements these design patterns which are old and known to be bad practice:
If you like to know more about programming bad practices, read my previous blog post: clean high quality code - a guide on how to become a better programmer.
However Joomla implements these design patterns which are modern, good practice, and used by the best frameworks such as symfony2, Zend, and enterprise programming languages such as java (including Struts and Spring):
- Object Oriented (including polymorphism, encapsulation, inheritance, etc.)
- MVC (Model View Control)
- Event Driven, Event Dispatcher, and Observer
Some of the Design patterns implemented on both Frameworks such as DBAL (Database Abstraction Layer) have been done better in Joomla. Joomla's DBAL is almost as good as an ORM (Object-relational mapping). And if you really want to use a full-on ORM Joomla easily integrates with Doctrine.
Implementation of these modern practices is due to the continuous improvement that the Joomla framework and CMS have done over the years, while Drupal has stagnated. It is also representative of the active nature of the global Joomla community.
3. Core Architecture
Joomla has a very clean core API but Drupal is written in ugly spaghetti code. An analogy would be to compare Joomla architecture to a Christmas tree and the Drupal architecture to a Buckyball.
In Joomla you have a tree hierarchy. The main trunk is the Joomla core. It has branches (the API) to which you can attach more branches (Components) or leaves (modules or widgets). So a component can be plugged in, thus integrating itself with Joomla's security (Access Control Levels) and article management functions. Being a branch, it may have sub branches and it may even have a bridge to someone else's branch. But to a large extent, there is minimum contact between various component branches.
In Drupal, the shape is largely circular with numerous points across the surface called modules. When building an extension, you can hook into any or all of these modules. This tight integration means everything speaks to each other. This architecture is much less elegant and reduces the quality of the code of any custom features. On-going and long term maintenance becomes an issue with this kind of structure.
To implement this hooking architecture Drupal uses call_user_func() and other dynamic function invocation / reflection methods extensively. This means debugging Drupal is a nightmare using modern debugger tools. If you want to know more about debugger tools you can read: How to configure VIM and PhpStorm with xDebug to debug.
Furthermore this means you can't use the click through feature of your modern IDE when you are coding. Also if you are using PHPStorm or other modern IDE's the inspection and auto-complete features will not work as they wouldn't know the return type of dynamically invoked functions.
4. Coding Standards
PHP Specification Request (PSR) is a coding standard adopted by most modern enterprise frameworks such as Symfony2 to maintain PHP coding consistancy.
Joomla is PSR-1 compliant and provides a framework for PSR-0 custom development, however Joomla core is not PSR-0 just yet. A PSR-3 logging interface and a PSR-4 autoloader is also provided within the Joomla framework. Currently Drupal is not compliant to any PSR standard but will contain PSR-0 within version 8.
5. Performance and caching
Drupal on average makes 100 database queries per page load (for simple pages). Because of this and other performance issues relating to the hooking architecture, everything has to be abstracted and cached heavily which creates further complexity and resource (hardware) requirements. Joomla is a lot more lightweight and optimised. It has a much faster Core. Joomla's recommended memory is 512MB while Drupal's is 2GB.
Most benchmarks agree that, without caching, Joomla is faster and less resource intensive than Drupal. However some benchmarks consider Drupal faster when caching is turned on. But if Joomla caching is set up by experts and configured properly it can outperform Drupal even when caching is on. Also Joomla's caching is a lot simpler and less resource intensive than Drupal which makes Joomla easier to use, update, and customise.
While you have Solr in Drupal to boost your performance for websites with large databases and a lot of users, you have Sphinx in Joomla which is written in native C++ code and is faster and easier than Solr. We simply do not need to install Sphinx on most of the websites because Joomla is fast and powerful enough out of the box to be able to handle very large databases under heavy traffic. However when needed Sphinx can provide a massive performance boost to Joomla making it many times faster than Drupal Solr bundle.
All of the above are strong indications that in contrary to common belief, Joomla is much better for developing larger more complicated websites than Drupal.
What the experts do
One of many successful famous Joomla websites is linux.com. People who work at linux.com are known for being obsessed about code quality and are the best and smartest of programmers. No matter how many government websites you can quote being on Drupal, the fact that linux.com is on Joomla outweighs them all.
Just a bit of off-topic fun fact, Linux Foundation, the organisation behind linux.com, employs Linus Torvalds (arguably one of the smartest programmers alive) the person who created Linux operating system and GIT.
Linus Torvalds is actually one of the final four in the geek madness competition on geekwire magazine. And he is competing against Albert Einstein, Nicola Tesla, and Alan Turing.
In defence of Drupal, Linux Foundation, also operates a couple of smaller Drupal websites (e.g. video.linux.com). But the fact that they use Joomla for their main functionality heavy website (linux.com) and not Drupal, to me is a big plus sign for Joomla.
Also it is worthwhile to note that linux foundation contributors have given joomla a 5 star rating while they have given Drupal only a 3 star rating.
If you are more interested you can read the interview with Dan Lopez, Web Architect of linux.com about why he chose Joomla.
The business case
Although Drupal gives the most flexibility to a webmaster, the administration is very complicated and has a very steep learning curve. Clients will need to hire a Drupal expert webmaster and general users can't simply train themselves to use Drupal like they can be trained to use Joomla. Compared to Joomla, Drupal's administrative console is like a fighter jet console.
In terms of the open source communities supporting the CMS's, Joomla has a much larger developer community compared to Drupal. This is an indication that open source developers prefer to work on Joomla rather than bang their heads on the table working on Drupal.
And to make it even worse for businesses that choose Drupal, High quality experienced Drupal developers are a lot harder to find and are more expensive than Joomla developers. Experienced developers prefer to work on Joomla rather than Drupal.
I am no exception to this myself; I have turned down a couple of job offers with great salaries because I did not want to go through the pain of Drupal development again.
Drupal could improve in future
Having said all of that the new Drupal 8 which is going to be released soon (there is no official release date yet) is a massive improvement and lots of these issues are addressed. The core of Drupal has been completely redesigned and redeveloped and is supposed to be using a lot from Symfony2 framework.
However, until Drupal 8 is released, it is not even worth considering Drupal for a customised CMS project.
Once Drupal 8 is released I am willing to re-visit the Drupal world and do a project on it, but I am pretty certain by that time Joomla has already improved even more. We may even have full support for TDD on Joomla by then (TDD or Test Driven Development is the best development methodology in the world).
At the end of the day if you are still having doubts about this, take it from a developer who has experience working with both Joomla and Drupal. Joomla is way better than Drupal. And that is true irrespective on size and requirements of the website.
Unless you have non-technical reasons (e.g. my users already know how to use Drupal) I always recommend Joomla.
If you read somewhere on the internet that Drupal is better than Joomla for complex large scale projects, just check their evidence. Have they inspected the technical inner-workings of the framework and come to a conclusion based on technical details? Or have they simply stated what they believe without any evidence or references to the underlying code of the CMS?
I have seen many times people saying Drupal is better because it is more robust and it is more efficient. That is not a reason to me. I would ask them what makes Drupal more efficient or robust and they will always fail to answer when I quote the five technical superiorities of Joomla stated above.
Update 12/08/14: Drupal provides the functionality to export views into file. Similarly, there is a "features module" that lets you export content types etc. into files. While this provides a practical workaround to keep track of your work in a source control software, it results in another layer of often unnecessary complexity.