Speed matters

I am sometimes questionned about the performance of Polylang. Is Polylang responsible for my slow website? Polylang adds a language switcher widget and does filter all the frontend content according to the requested language. So yes, Polylang impacts the performance of the website. How much? And how it compares to other multilingual plugins?

I have tested Polylang 1.3.1 and two other multilingual plugins, WPML and qtranslate 2.5.38, as well as WordPress alone.

The test protocol is as follows. Everything is done on a local install with XAMPP 1.8.1 (PHP 5.4 + MySQL 5.5) + WP 3.7.1 + Twenty Twelve. No other plugin is activated. Google fonts are disabled in Twenty twelve so that no HTTP request is sent to the internet. Each test site has five posts (with random text) in three categories, one page, a custom menu displaying categories and several widgets (the language switcher, search, archives, categories, pages, recent posts, meta). The number of displayed posts is set to 5, permalinks are set to %postname% and the urls are modified to have the language code as a directory. The default language is English (en_US) and it does not display the language code. Everything is translated in French (fr_FR).

The pages are requested with Apache bench 10 times each. I tested the home page, one page, one category archive, one monthly archive and one post. If one result in the serie is far above the others, the test is rerun as it probably means that WP-CRON has run during a request.

Here are the first results when querying the English version (no .mo file is loaded). Figures reported are average total time per request in ms:

Non localized (en_US) WP alone Polylang qtranslate WPML
Home page 396 458 537 629
Page 375 448 484 590
Monthly archive 394 451 538 625
Category archive 389 448 520 631
Post 389 443 498 613
Average 389 450 515 618

As loading .mo files is known to impact the WordPress performance a lot, I ran a second series of tests querying the translated pages. Here the French .mo files are loaded (including for the site with no plugin for which WP_LANG is set to ‘fr_FR’ in this serie).

Localized (fr_FR) WP alone Polylang qtranslate WPML
Home page 450 517 593 721
Page 426 500 539 681
Monthly archive 451 519 589 698
Category archive 439 509 577 718
Post 430 515 560 699
Average 439 512 572 703

This second serie of tests confirms the impact performance of loading .mo files (even if here there is no or only one plugin). In all tests done, Polylang is always the fastest solution. The table below summarizes the impact performance of each plugin compared to a website running no plugin.

Polylang qtranslate WPML
Added time 16% 31% 60%

We can see that Polylang 1.3.1 impacts the permance of an almost fresh WordPress by an average of about 16%. This impact is doubled if you use qTranslate 2.5.38 and doubled again if you use WPML

NB1: Of course, I am not a customer of WPML so I tested the last version which was free of charge. It as been released almost three years ago and tested up to WP 3.0.5. So clearly, the test is not fair as first, I ran it with a version of WordPress which has never been tested by the authors (but the job is done), and second, the WPML team may have improved their plugin performance since that time. I would be very happy to see such kind of performance results with a recent version of WPML.

NB2: Of course, these tests are most probably not representative of a real website, as it is likely that other plugins are used and I guess that every webmasters caring of their site performance uses a cache plugin, which was not the case for this test. Once the page is cached and served directly by Apache, there is no more difference between plugins.

NB3: This is not an independant test!

1 thought on “Speed matters

  1. RavanH

    NB3: This is not an independant test!
    Even if it’s not an independent test, and even if your test setup does not reflect real world situations, I can confirm the gist of these results in terms of hands-on experience in day-to-day website management: Polylang is the plugin to use if you want the least performance impact! 🙂

Comments are closed.