PDA

View Full Version : Board Optimization - Super Speedy UserCP


Birched
08-07-2009, 10:00 PM
TIME TO INSTALL: 10 seconds (requires editing of one file in one place)

This simple code modification increases my usercp.php loading speed by 6x. I think it will be most useful in cases where there are many subscribed forums.

It is listed as a modification for version 3.8.3 (which I am currently working with), but this mod works as far back as 3.0.1 (the 'find' text might be slightly different, but the function name and the text you replace is the same).
EDIT: Tested up to 3.8.4.

It works because the php function is_array() is excruciatingly slow, and an empty array gives the same return value as an empty variable.

This code would likely break if someone introduced a location in the code where the $lastpostarray variable was set to something (i.e. not nothing) that was not an array.

There are lots of these checks in the vBulletin code. It's likely that further speed increases could be achieved by changing more of them -- just remember that there is an unlikely circumstance (see previous paragraph) where it would cause problems. If you find other locations with significant effects, please post them in a reply!

##### IN FILE

functions_forumlist.php

##### FIND

function construct_forum_bit($parentid, $depth = 0, $subsonly = 0)
{
global $vbulletin, $stylevar, $vbphrase, $show;
global $imodcache, $lastpostarray, $counters, $inforum;

// this function takes the constant MAXFORUMDEPTH as its guide for how
// deep to recurse down forum lists. if MAXFORUMDEPTH is not defined,
// it will assume a depth of 2.

// call fetch_last_post_array() first to get last post info for forums
if (!is_array($lastpostarray))

##### REPLACE

if (!is_array($lastpostarray))

##### WITH

if (!$lastpostarray)

#####

And that's it! Enjoy, and I hope it helps!

erel34
08-08-2009, 04:30 PM
thanks

down.low
08-08-2009, 07:11 PM
One mistake:

##### REPLACE

if (!is_array($lastpostarray))

##### WITH

if (!i$lastpostarray)

#####

if (!i$lastpostarray)

should be the following:

if ($lastpostarray)

Birched
08-08-2009, 08:21 PM
Thanks - fixed.

EDIT: To be clear -- there used to be a typo with an 'i'. The correct replacement is what is stated in the original post, and not what is stated in the post before this one.

i.e. the following is correct:

##### REPLACE

if (!is_array($lastpostarray))

##### WITH

if (!$lastpostarray)

#####

Kolbi
08-08-2009, 09:16 PM
Are there other comments about the lower loading time?

relaxiha
08-08-2009, 09:24 PM
If you put together the best images is to be determined

Kolbi
08-08-2009, 09:38 PM
If you put together the best images is to be determined
???
Wrong thread?

gearspro
08-08-2009, 10:14 PM
Thanks i wouldnt say 6x quicker but it is faster :)

Didnt work the 1st time :( tryed again then it worked, must of done something wrong.

Birched
08-08-2009, 11:17 PM
Based on microstats, I went from 32 seconds to 5 seconds with this one change (caching was turned off at the time). I saw a similar improvement when I did this with older boards. It will definitely depend on the number of times the code loops through that call -- so if you have more subscribed forums, or forums with more content, it will help more.

Others are definitely invited to post their measurements here. I'd be interested in how much it helps in other situations.

hotwheels
08-08-2009, 11:47 PM
Wow that is pretty kewl..........I would have to say it is atleast 6x faster.

thanks a bunch.

jambo_1969
08-09-2009, 05:12 AM
It is a bit quicker, HOWEVER, it zero's all the stats from the main forum.php page - so it looks like there are no posts and no views.

Birched
08-09-2009, 05:29 AM
That doesn't happen for me at all -- check your braces (it sounds like you may have corrupted the surrounding function?), and if that doesn't fix it, then post in your change here for me to look at (or pm it.)

unp
08-09-2009, 06:54 AM
One mistake:


if (!i$lastpostarray)

should be the following:

if ($lastpostarray)

Thanks - fixed.

Its still ' if (!$lastpostarray)' in the frst post.
So what should it be ?

jambo_1969
08-09-2009, 08:12 AM
Its still ' if (!$lastpostarray)' in the frst post.
So what should it be ?

I'm assuming the one in the OP, as I put the amended one from the later post in, and it zero'ed all post/view counts on forum home.

unp
08-09-2009, 09:41 AM
I get and error with if (!$lastpostarray)


Parse error: syntax error, unexpected T_VARIABLE in /home/unp/public_html/includes/functions_forumlist.php on line 156


With if ($lastpostarray) All post/view are Zero on forumhome.

Birched
08-09-2009, 10:39 AM
Its still ' if (!$lastpostarray)' in the frst post.
So what should it be ?

The error was the letter 'i' that used to be there (look more closely.)

Birched
08-09-2009, 10:42 AM
I get and error with if (!$lastpostarray)


Parse error: syntax error, unexpected T_VARIABLE in /home/unp/public_html/includes/functions_forumlist.php on line 156


With if ($lastpostarray) All post/view are Zero on forumhome.

Please post your modified code. That is what you'd get with a typo.

unp
08-09-2009, 11:20 AM
I tried again and it worked.I must have done something wrong the first time.

TWTCommish
08-09-2009, 09:28 PM
I assume this only speeds up the UserCP if the user has subscribed to forums? I ask because very few of my users use that feature.

Birched
08-10-2009, 01:27 AM
I assume this only speeds up the UserCP if the user has subscribed to forums? I ask because very few of my users use that feature.

That's what it looks like. It's easy to try, though.

merkaz
08-10-2009, 06:12 PM
Amazing .

good job . thanks

NLP-er
08-12-2009, 04:50 PM
Rated, installed :)

Small things can make big difference ;)

GhoHan
09-04-2009, 03:24 PM
Nice idea ... good installed

testebr
09-04-2009, 10:27 PM
You already reported this 'issue' on vb.com board?

nomoreturn
09-04-2009, 11:08 PM
Thanks works great on 3.8.4

Birched
09-16-2009, 01:03 PM
You already reported this 'issue' on vb.com board?

The problem has been mentioned previously both there (vbulletin.com) and here (vbulletin.org) (earlier by others, more recently by myself). The vbulletin coders would have to make a "substance over style" decision to implement this change in the core code, at least in the specific manner in which I've implemented it. I don't think that's very likely, but who knows? The issue has been around for a long time....

WebkinzCoast
06-24-2010, 01:26 PM
I assume this only speeds up the UserCP if the user has subscribed to forums? I ask because very few of my users use that feature.

Actually, it sped up mine by a good five seconds and I have no subscribed forums.

WebkinzCoast
06-24-2010, 01:26 PM
Working great over here!

mahz
06-24-2010, 03:28 PM
Cool. I have a large forum with a lot of heavy subscribed-threads usage. I already marked Installed and rated (I love simple code optimizations), but I like numbers/metrics and would like to see if it changes anything and by what margin.

What's a good way to see page load times? I'm a total noob. :o

How do I turn off caching, too, so I can get more realistic numbers?

Thanks!

New Joe
06-24-2010, 11:12 PM
Works fine and fast.

ChiNa
07-15-2012, 06:19 PM
Somebody said that he made a mistake,,, Now can anyone follow up to what is right 1 or 2?

Options1: if (!i$lastpostarray)

Option2: if ($lastpostarray)

Thank you in advance...

Birched
07-15-2012, 06:31 PM
I am using it as written in the OP.

EDIT: to be clear: the typo a few years back was that I had an extra 'i' in the code. You want to use the text in the original post, which is not option 1 or option 2 in your post, but:

Option 3: if (!$lastpostarray)

ChiNa
07-15-2012, 07:18 PM
Ohh Ok, U actually have edited your post then, bcoz that was what I did use too.. if (!$lastpostarray)

One last question, is it ok to use on a vBulletin 3.8.6 or 3.8.7.. I mean I wont get later any affect on my other pages or maybe errors...

Thanks for the tip

Birched
07-15-2012, 08:10 PM
Should be fine for 3.8.x. Definitely works for 3.8.6.

ChiNa
07-15-2012, 10:59 PM
Thanks, Birched, What about the 3.8.7, its Same as 3.8.6, Am sure it will work out too.. Coz almost the optiones and files are same, Thanks a lot for your time mate... Appreciated.

tehPARADOX
08-09-2012, 06:40 AM
Thanks.

career
08-10-2012, 12:41 PM
can't see difference when enable it.
Pls, could you suggest how to test it.

thanks

lazytown
10-19-2012, 09:54 PM
Any idea if this issue affects 4.2?

xlguy
12-05-2012, 12:23 AM
Have just tried this on 3.8.7 PL2 :)

blind-eddie
12-07-2012, 02:44 PM
Have just tried this on 3.8.7 PL2 :)

Yes, don't use this edit.
It shows forum home to have zero post & sets all forums to private, But, your results may differ.

Birched
12-07-2012, 03:25 PM
Yes, don't use this edit.
It shows forum home to have zero post & sets all forums to private, But, your results may differ.

What? Is is possible you have misplaced a semicolon somewhere?

EDIT: Also, you'll note that people who didn't use the exact code in the original post have had a similar problem in the past.