New implementation of MO file reader
|Reported by:||soletan||Owned by:||nbachiyski|
On moving from a Debian-driven virtual server to one of my dedicated root server running Gentoo Linux I had to encounter poor performance in Wordpress on every click. Other sites hosted on same server respond within a second at most while Wordpress 2.8 took about 10-15 seconds on each click.
I started to upgrade packages, tried to performance-tune Apache and MySQL etc. without any remarkable success. And so I tried to locate the part of code in WP wasting so much time. Finally I stopped on method import_from_file() of class MO in wp-includes/pmo/mo.php.
I'm running WP with German localization available from de.wordpress.org. de_DE.mo takes 300KB disk spaces and about 8 seconds to load with your current class MO here. I did some investigations on the used code and saw potential to improve its performance, thus started to implement my own MO file reader omitting all that POMOReader stuff etc. Finally i got a linear method reading (at least my) MO file up to four times faster.
While server is emerging and compiling in background (e.g. compiling gcc and glibc) benchmarking existing MO file reader and my implementation resulted in a 8s vs. 2s runtime. BTW: other sites hosted on same server didn't remarkably slow down due to background compilation processes.
In addition to reading MO files faster the class tries to utilize wp_cache_* interface (which seems to be useless at the moment, isn't it) and it tries to completely work without instances of class Translation_Entry, which I consider to take much more memory than a normal hash (As I tried to produce instances on successfully parsing MO file performance decreased remarkably by estimated 10%.)
I'd like to provide my class here as-is since I didn't find the time to test it with other MO files or check if it's properly implementing API of class Translation.
Change History (14)
- Keywords needs-testing needs-unit-tests added
- Milestone changed from Unassigned to Future Release