{"id":23065,"date":"2013-04-23T00:28:53","date_gmt":"2013-04-23T00:28:53","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/cached-l10n\/"},"modified":"2013-04-23T01:39:21","modified_gmt":"2013-04-23T01:39:21","slug":"cached-l10n","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cached-l10n\/","author":9246760,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.2","stable_tag":"0.2.2","tested":"3.5.2","requires":"3.0.1","requires_php":"","requires_plugins":"","header_name":"Cached localization","header_author":"seb@wemakecustom.com","header_description":"","assets_banners_color":"","last_updated":"2013-04-23 01:39:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"http:\/\/www.wemakecustom.com","rating":5,"author_block_rating":0,"active_installs":10,"downloads":2254,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":[],"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":"3"},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.1","0.2.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[15386],"plugin_category":[],"plugin_contributors":[96131],"plugin_business_model":[],"class_list":["post-23065","plugin","type-plugin","status-publish","hentry","plugin_tags-performance-l10n","plugin_contributors-lavoiesl","plugin_committers-lavoiesl"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/cached-l10n.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Upon inspection using xhProf, I realized that the PHP implementation loading the MO files is really slow.\nFrom my tests, about 25% to 40% of the time Wordpress spends rendering the page is actually spent locating, parsing and merging all the translation files.<\/p>\n\n<p>This plugin works by caching the whole $l10n variable holding all the text domains and overridding the <code>load_textdomain<\/code>.<\/p>\n\n<p>Caching is done using serialize and written to <code>wp-content\/uploads\/l10n.pson<\/code>.\nBe sure to regenerate the cache if a .mo changes.<\/p>\n\n<h4>TODO<\/h4>\n\n<ul>\n<li>Provide a better UI page<\/li>\n<\/ul>\n\n<h3>Speed comparison<\/h3>\n\n<p>Comparing Wordpress Gettext loading vs this plugin.<\/p>\n\n<p>Using the average response time of:\n    siege -c 1 -r 100 -b http:\/\/localhost\/<\/p>\n\n<p>Vanilla: Fresh install of Wordpress\nCommon: WPML, Types, Views, and Gravity Forms\nTotal Cache: Common + Total Cache (APC object\/database cache, no page cache)\nBuddyPress: BP-Registration-Options, BP Show Friends, BuddyPress, BuddyPress Activity Plus, Gravity Forms, Invite Anyone, U BuddyPress Forum Attachment, U BuddyPress Forum Editor, User Switching<\/p>\n\n<pre><code>            Vanilla         Common          Total Cache     BuddyPress\nNative      202 ms          565 ms          478 ms          567 ms\nCached      193 ms (-5%)    322 ms (-43%)   333 ms (-30%)   431 ms (-24%)\n<\/code><\/pre>\n\n<!--section=installation-->\n<p>wp-content\/uploads\/l10n.pson must be writable<\/p>\n\n<ol>\n<li>Activate plugin<\/li>\n<li>Go to plugin's settings page<\/li>\n<li>Hit the regenerate button<\/li>\n<li><code>WP_DEBUG<\/code> must be false<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Refactored code<\/li>\n<li>Fixed small issues<\/li>\n<\/ul>\n\n<h4>0.2<\/h4>\n\n<ul>\n<li>Refactored code<\/li>\n<li>Added some detection when translations change<\/li>\n<\/ul>\n\n<h4>0.1<\/h4>\n\n<ul>\n<li>Orignal submission<\/li>\n<\/ul>","raw_excerpt":"Caches the global variable $l10n, which stores all translations for considerable speed improvement.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/23065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=23065"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lavoiesl"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=23065"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=23065"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=23065"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=23065"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=23065"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=23065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}