Page caching mod for sNews 1.7
filed under: sNews CMS / Hacks & Mods
Hi again, as promised, I have completed my caching mod for sNews 1.7, and here is my initial release.
What the hell is caching and do I need it?
Well, basically what we're doing with this mod is saving a page's output into a raw HTML document, and we serve that page until there's a change that would require hitting the database again. If your site is like mine and gets a few comments a day and you're adding a few articles a day, then yes, this mod would likely help you considerably.
Uh, what? I need an example please.
Fair enough, say you have an article with 20 comments, every time someone visits that page, you're querying the database for the article, all the comments, as well as anything else on the page (site title, description, categories list, pages, recent comments list, recent articles, my related posts mod, etc). With this mod the first time someone calls the page all information would be pulled from the database and the resulting HTML will be saved into your "cache" folder, and then subsequently served to users after that, up until a new comment is posted, an article is added/edit/deleted, etc.
Sound good? Great, this is another super easy mod to implement, first download the package and unzip.
VERSION history
[1.0.3] - added code to strip failed comments
[1.0.2] - fixed the check for approved comments, should properly empty the cache now
[1.0.1] - added "remember me" function for my sticky forms mod
[1.0.0] - initial release
Now modify the following variables inside the mod.cache.php file. They are self-explanatory, and the comments inside the file should assist you.
$cache_dir = '/home/mysite/cache'; $cache_keep_days = '7'; $cache_polls = '0';
Cool, now upload mod.cache.php to the same directory as your snews.php and index.php files. Create the "cache" directory you specified now as well, if you haven't already.
Now open your index.php file add add the following at the top, just below your snews.php include (and poll include if you have it), like the following;
<?php
include('snews.php');
include('mod.cache.php');
//include("mod_poll/poll_functions.php"); //uncomment if you're using my polls mod
startCache();
?>
Now add this to the very bottom of your index.php file;
<?php outputCache(); ?>
Yeah, that's it, upload index.php and browse your site when you're not logged in, you'll see your cache directory start filling up and notice your MySQL database getting only one query per page once cached. Edit an article or post a comment and watch the cache folder empty.
17 comments
Add a new comment »Categories
Recent Entries
Recent Comments
- Matt (Hi jesth, everything is controlled through the CSS styling ...)
- jesth (I really like this mod, I just have one thing, how the ...)
- Matt (No worries jesth, yeah, I was a little lazy and used strpos ...)
- jesth (Sorry for doubleposting but the error code was <!-- ...)
- jesth (Small error in my "code" a missing space made ...)
- Matt (Wow, that is quite the mod to be honest. I agree that if ...)
- Simon (Thanks for the feedback Matt. I believe t would just be ...)
Popular Entries
- Light-weight related articles mod for sNews 1.7 (5/5)
- Gravatar mod for sNews 1.7 (5/5)
- Compact archives for sNews 1.7 (5/5)
- Command & Conquer Generals, and the Zero Hour expansion on the Acer Aspire One netbook (4.75/5)
- Jagged Alliance 2 runs perfect on the Aspire One (4.75/5)
- An improved tag cloud for sNews 1.7 (4.67/5)
- Image / math hybrid captcha version 2, vastly improved (4.64/5)
Dec 12th, 2009 at 9:01 am
Thanks Matt
Added.
PP
Dec 14th, 2009 at 3:56 am
uh oh... message was not sent.
Another try:
Hi Matt
Nice job you've done with that Mod.
It works as the files are created but I'm not sure it's gonna work as of on 1and1 shared servers.
I'm receiving a message sayin it's not allowed there. :-D
Gonna see if it can be fixed by a php.ini.
Dec 14th, 2009 at 6:14 am
Another mod, i'm gonna try this out later, not that my site get's overrun, but from time to time, snews kinda "burps".
Dec 14th, 2009 at 7:26 am
@ Sven, does 1and1 run PHP in safe mode or something?
@ Slemborg, I hear you, my site doesn't really either, but it doesn't really hurt to cache content when no DB connection is really needed.
Dec 14th, 2009 at 8:50 am
Oops, I left out the bit to set the "remember me" checkbox to checked or unchecked for my sticky comments mod, that has been updated now, v1.0.1.
Dec 14th, 2009 at 10:33 am
I suppose Matt.
They don't give any information.
.cache files are created but can't be read.
Dec 14th, 2009 at 10:40 am
That's interesting, what are the cache folder and .cache file permissions?
You can check and see if you're running PHP in safe mode, just create a file called phpinfo.php, put this in it;
Then upload it and check if safe_mode is Off or On.
BTW, safe_mode is being removed from PHP 6, thankfully.
Dec 14th, 2009 at 11:09 am
Made it working by moving the outputCache() call in another place. Don't ask why now it works now. No please. :-D
Dec 14th, 2009 at 11:25 am
Uh oh... I suppose your cache Mod is on here and new comments are displayed.
Try to post a comment there: http://on-air.hiseo.fr/fatras/temps-de-chargement-et-referencement/.
New comments aren't displayed.
Dec 14th, 2009 at 11:43 am
Sven,
Yes, I'm running it on here no problem.
It looks like the cache isn't being emptied on new comments, do you have comment moderation enabled or do you allow new comments to post immediately?
Did you verify you're not in safe mode?
Dec 14th, 2009 at 11:54 am
Yeap safe mode is off and new comments are posted immediatly.
Dec 14th, 2009 at 12:05 pm
Oh crap, I was checking the wrong setting!
Change
if (s('mail_on_comments') == 'off') { $moderateOff = true; }to
if (s('approve_comments') != 'on') { $moderateOff = true; }I will fix and update package now.
Dec 14th, 2009 at 12:11 pm
and now it works!
Dec 14th, 2009 at 12:12 pm
Haha, thanks for being the guinea pig, as always! :)
Dec 30th, 2009 at 6:40 pm
This modification is great for me. Significantly reduce the burden on the database.
Unfortunately, my site is running statistics (chCounter) and
[MOD] Page view counter for sNews 1.7 only (http://snewscms.com/forum/index.php?topic=8089.0)
Is there any easy way to update only those data?
For example, everything between
<span class="statV">
and
</span>
will be updated.
I should be grateful for your response.
P.S.
Translation to English: translate.google.pl
Dec 30th, 2009 at 8:55 pm
Hi toolman,
Yes, it's easy enough to do, provided you have the functions that output the data. If you look at the code inside mod.cache.php, you can see where we strip the dynamic content with a preg_replace, and then update it with the correct content, whether it's the user's IP or the show_poll function.
To do this, you need to uniquely identify the content you're replacing. Say, for example, the page counter, wrap the number in HTML comments, like
then strip it inside mod.cache.php for storage;
$cache = preg_replace('/<!--\sSTART_COUNTER\s-->(.*?)<!--\sEND_COUNTER\s-->/s', '<!--COUNTER-->', $cache);and finally add the counter back in when the cached page is served;
$cache = preg_replace('/(<!--COUNTER-->)/e', 'counterFunction($variables)', $cache);Because you're not querying the article database, you'll need to write a separate function to get the counter, as shown with the "counterFunction" I added above.
Does that make sense?
Jan 25th, 2010 at 6:55 am
Making a day of it ;) ... Third Matt-Mod now. this one is awsome... continuing for more goodies, hehe.. Thanks, Matty.