[wp-trac] [WordPress Trac] #15304: New file-based persistent cache

WordPress Trac wp-trac at lists.automattic.com
Wed Nov 3 11:40:41 UTC 2010


#15304: New file-based persistent cache
-------------------------+--------------------------------------------------
 Reporter:  mrasnika     |       Owner:                 
     Type:  enhancement  |      Status:  new            
 Priority:  normal       |   Milestone:  Awaiting Review
Component:  Cache        |     Version:                 
 Severity:  normal       |    Keywords:                 
-------------------------+--------------------------------------------------
 I've read about the shortcomings of the original file-based persistent
 cache, that's been ditched since 2.5; I've also checked the available
 file-based cache implementations (wp-file-cache, neosmart's re-
 implementation of the original, even w3-total-cache with the W3_Cache_File
 class) and they all seem to have the same drawback: they save each cached
 entry in a separate file. This means that each hit or miss requires
 reading and writing to the file-system, making this approach useless.

 I have implemented a different approach towards file-based caching, which
 is a cross between the mem-based caching that is now in WP, and the file-
 based caching -- here's what I wrote in a reply to wp-hackers:

 ''"I would guess that there would be some performance benefit if the "file
 cache" is in the form of "pure php", so when you have to use that cache
 you just include the file like any other php script you have included.
 That combined with var_export() and using just one file for the cache
 (instead one cache file per cache entry) probably is going to deliver
 better results. At least there is no penalty for
 serialization/unserialization, and in this way with the includes we are
 sort of hijacking the file-reading and evaluation of their content by PHP
 itself."''

 ''"What if all the cache entries are read/written in bulk ? Take the
 current implementation for example (the mem-based): it stores everything
 inside an array, so hits and misses only deal with that array. If we save
 that array (with all the cached entries inside it) to file when destroying
 the object (or with register_shutdown_function()), and then include it
 when instantiating it, we are going to skip all the file-system read and
 write operations. In the worst-case scenario there is just one include (on
 an absolute path to be faster than include_path-based), and one write to
 file when dumping the contents of the cache array. The rest is the same --
 the add/replace/set/get cache functions use the cache array."''

 I've attached the implementation as an object-cache.php so it can be
 tested, but I think that it can be used not just in this plugin form, but
 also to replace the mem-based cache that's now inside WordPress: it has
 all the advantages of the memory-based cache, plus it is persistent
 between pageloads. Additionally as stated above we are using only core php
 features like includes and var_export(), and there is no performance
 penalty for serialization/unserialization.

-- 
Ticket URL: <http://core.trac.wordpress.org/ticket/15304>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list