After Wim Leer's article on the Drupal 8 enhanced cache, I decided to run a performance test comparing Drupal 7.39 and the new Drupal 8 RC1 performance. I had high hopes. However, the results for Drupal 8 are still not good. For anonymous users, Drupal 7 beats Drupal 8 as much as 3 times still. For logged in users, Drupal 7 beats drupal 8 as much as 2 times.
I did not want to build a copy of a New Relic but smaller. I needed a slightly different logic. When thinking of a tool to monitor multiple web sites, I wanted to create a type of alert for admins when it was necessary. The logic was to gather relevant data as unobtrusively as possible without taxing performance, and then, to tell an admin, whether everything was basically ok, or not.
When you are a small company that tries to establish long-term relationships with its customers, you want to provide as much integration with them after the launch as possible. This may include hosting or hosting reselling, a support and update plan, and a continuous growth/integration plan. This may also mean, that you will provide performance support as well. It is this last aspect of performance support that I have been thinking about recently, writing a proof-of-concept mechanism to implement it. I would like to bring out some thoughts into a wider community to discuss.
Now that we have had an anatomic overview of Drupal 8's Ban module, we can proceed further to have a closer look at it's code. In this second part, we will have a look at YAML, and the concepts of services, subclassing, autoloading, and the dependency injection.
The best way to get to know a technology closer is to study it's code. Drupal 8 is a huge step forward technologically from Drupal 7, and it has literally tons of code that I feel I need to review and learn from. And I welcome comments and crtiticism from the readers.
The module that I chose to start with is a simple one: the Ban module. It's used to ban IPs via interface and first appeared in Drupal 7, undergoing a rewrite for Drupal 8. Why I chose this module? Because it's simple. We'll take the Drupal 8 module as an example and lay out it's anatomy and of how a Drupal 8 module is built, and try to explain some new concepts with it. And, you can always get Drupal 8 from drupal.org and see the code yourself, and play with it.
I have been watching / following the initiative to convert Drupal 8 to be compatible with PHP 7. This is so freaking exciting! Drupal community and some of the best Drupal devs are now actively contributing to the testing and development of PHP language itself, and the Symfony project, helping to file bug reports and run tests. This tells me, that Drupal 8 is very serious, and stands on a high and modern and rather professional level of implementation.
It has been 3 months since March 25, when I publiched Drupal 7 vs Drupal 8 speed tests results. Now, after there has been a significant performance work on Drupal 8 caching, I am revisiting the issue, comparing Drupal 8 beta 11 to Drupal 7.37.
Tests were conducted my my work Lenovo ThinkPad E530c laptop with 8Mb RAM and SSD hard drive, with Ubuntu 14.10, LAMP stack with MariaDB 10.1 and PHP 5.6.9. No APC or any other cache except the build-in PHP's opcache and Drupal's native's cache. The ab test command ran 1000 requests with concurrency of 20. Because Drupal 8 now has caching turned on by default, I have also turned caching on for Drupal 7, to make sure that I test performance under the similar settings. All test results here are taken with Drupal 7 native caching on.
So, what's the result?
NOTE: This article is outdated, as it is related to drupal 8.0.0-beta7. See newer test results for Drupal 8 beta 11.
PHP 7 will be released soon, and Drupal comminuty is beginning to consider reworking Drupal's code in anticipation. It seems like much needs to be changed in Drupal code base, though. Community is hopeful to have the the necessary changes made in time for Drupal 8. PHP 7 promises significant boost in performance for OOP elements, which is desperately needed for Drupal 8. There has been a competition in performance between PHP and it's hack, called... well... Hack.
It has been about half a year since I wrote my Angulars Drupal 8 module and posted it on GitHub. The module actually did some easy manipulation with strings and inputs by AngularJS. Now that I have had some free time in a few months, I decided to revisit it and see if it still worked with all the changes being bundled into Drupal 8 daily. And surely it did not. One thing that changed in Drupal 8 recently (well, a few months ago) has made me especially ranty.