PDA

View Full Version : Forumdisplay Optimization


10-25-2000, 04:27 PM
Forumdisplay Optimization for vB 1.1.2 & 1.1.3 by rangersfan 2000

Open forumdisplay.php, and dont put in the dashes! As always backup forumdisplay.php in case something goes wrong.


Find this Code:
---------------
$threads=$DB_site->query("SELECT threadid,title,open,lastpost,replycount,postuserna me,lastposter,notes,iconid,views FROM thread WHERE forumid=$forumid AND visible=1 $datecut ORDER BY lastpost DESC LIMIT $limitlower,$perpage");
---------------

(editor note.. If you have changed this query and it no longer matches the above, the important part is to replace "iconid" with "thread.iconid", add "icon.title AS icontitle",
add "icon.iconpath", replace "title" with "thread.title AS threadtitle" and add "LEFT JOIN icon ON (icon.iconid = thread.iconid)" after "FROM thread")

Replace with:
---------------
$threads=$DB_site->query("SELECT thread.iconid, icon.title AS icontitle, icon.iconpath,threadid,thread.title AS threadtitle,
open,lastpost,replycount,postusername,lastposter,n otes,views,userindex
FROM thread
LEFT JOIN icon ON (icon.iconid = thread.iconid)
WHERE forumid=$forumid AND visible=1 $datecut
ORDER BY lastpost
DESC LIMIT $limitlower,$perpage");
----------------

Find this code:
----------------
if ($showicons==1 and $thread[iconid]!=0) {
if ($icon=$DB_site->query_first("SELECT title,iconpath FROM icon WHERE iconid=$thread[iconid]")) {
$threadicon="<img src=\"$icon[iconpath]\" alt=\"$icon[title]\" border=0>";
} else {
$threadicon="&nbsp;";
}
} else {
$threadicon="&nbsp;";
}
----------------

Replace with:
----------------
$threadicon="&nbsp;";
if ($showicons==1 and $thread[iconid]!=0)
{
$threadicon="<img src=\"$thread[iconpath]\" alt=\"$thread[icontitle]\" border=0>";
}
-----------------

version 1.1.2 and version 1.1.3beta1 and 2 Find this code:
-----------------
if ($wordwrap!=0) {
$thread[title]=eregi_replace("([^\n\r <>\"\\-]{$wordwrap})"," \\1 ",$thread[title]);
}
$threadtitle=htmlspecialchars($thread[title]);
-----------------

Replace with:
-----------------
if ($wordwrap!=0) {
$thread[threadtitle]=eregi_replace("([^\n\r <>\"\\-]{$wordwrap})"," \\1 ",$thread[threadtitle]);
}
$threadtitle=htmlspecialchars($thread[threadtitle]);
-----------------

version 1.1.3beta3 find this code:
-----------------
if ($wordwrap!=0) {
$thread[title]=dowordwrap($thread[title]);
}
$threadtitle=htmlspecialchars($thread[title]);

Replace with:
-----------------
if ($wordwrap!=0) {
$thread[title]=dowordwrap($thread[threadtitle]);
}
$threadtitle=htmlspecialchars($thread[threadtitle]);


That's it! Enjoy. This will cut your queries on forumdisplay from (Num of threads on page + 6) to 6!

Also please forgive me but I have a thing about code structure and readability.

[Edited by rangersfan on 10-26-2000 at 04:43 PM]

10-25-2000, 04:37 PM
Originally posted by rangersfan
Also please forgive me but I have a thing about code structure and readability.

Forgive you? I think *all* queries should be structured exactly like you've done... it makes it sooo much easier to read and maintain the code that way.

Wonderful optimization by the way, I am sure this will be a very nice performance increase :)

-Chris

10-25-2000, 11:20 PM
Its amazing how this could slip the cracks. I would at least have thought they would have used a caching system, or maybe one query of all icons before loading the page.

People, this hack will increase performance (if mysql is your bottleneck, as it is in my case) greatly. Get it now. :)

10-26-2000, 12:10 AM
Originally posted by Stallion
Its amazing how this could slip the cracks. I would at least have thought they would have used a caching system, or maybe one query of all icons before loading the page.

People, this hack will increase performance (if mysql is your bottleneck, as it is in my case) greatly. Get it now. :) hmmmm... mysql is my problem from day one... would these instructions change if i had hacks already ?

10-26-2000, 12:12 AM
I dont' think there are any hacks (outside of my dot hack or VirtueTech's forum display sorting) that would have changed this code.

10-26-2000, 12:26 AM
thanks i tried it on my long forgotten private testing vB which has the poll hack added also... seems to work.. gonna add it to my forums once i finish defragging my other pc with my working copy of my site files :)

10-26-2000, 02:47 AM
great stuff rangersfan :) with me lowering my join buffers and adding this optimisation i survived my first forum peak hour without needing to reboot my server :D

10-26-2000, 12:46 PM
Find this code:
-----------------
if ($wordwrap!=0) {
$thread[title]=eregi_replace("([^\n\r <>\"\\-]{$wordwrap})"," \\1 ",$thread[title]);
}
$threadtitle=htmlspecialchars($thread[title]);
-----------------

Replace with:
-----------------
if ($wordwrap!=0) {
$thread[threadtitle]=eregi_replace("([^\n\r <>\"\\-]{$wordwrap})"," \\1 ",$thread[threadtitle]);
}
$threadtitle=htmlspecialchars($thread[threadtitle]);
-----------------
[/code]



Hi,

I have looked thru all files and cannot find the above statement. I have vb 1.1.3 too.

10-26-2000, 02:17 PM
I will try this out after the major update!

10-26-2000, 02:24 PM
Hi,

I have looked thru all files and cannot find the above statement. I have vb 1.1.3 too.

Can you find the instances of $wordwrap in forumdisplay.php? You can also send me your forumdisplay.php and I will see what you are missing.

webmaster@hedgehogwheels.com

10-26-2000, 02:24 PM
Originally posted by vBoard.co.uk
I will try this out after the major update!

Well, hopefully, any update would have this in it already.

10-26-2000, 02:45 PM
Cheers for this, have sent email now.


The only instance of it is as follows:


if ($wordwrap!=0) {
$thread[title]=dowordwrap($thread[title]);
}

Originally posted by rangersfan
Hi,

I have looked thru all files and cannot find the above statement. I have vb 1.1.3 too.

Can you find the instances of $wordwrap in forumdisplay.php? You can also send me your forumdisplay.php and I will see what you are missing.

webmaster@hedgehogwheels.com

10-26-2000, 02:50 PM
Originally posted by rangersfan
Well, hopefully, any update would have this in it already.

Yes it will :)

10-26-2000, 02:55 PM
good saved me some work

10-26-2000, 03:30 PM
same i couldn't find it if i searched for the entire code... but searching just for the first line i found it

if ($wordwrap!=0) { and then the next 3 lines under it was it :)

10-26-2000, 03:58 PM
When I search in forumdisplay this is what I get:


if ($wordwrap!=0) {
$thread[title]=dowordwrap($thread[title]);
}

10-26-2000, 04:31 PM
it went in fine for me and seems to be doing it's trick :)

the combination of this, the showthread and global optimizations seem to be helping my board along.

I'm getting between 3-5k posts a day and every little bit helps :)

10-26-2000, 07:44 PM
Ok I fixed the problem. It seems I am still using 1.1.3beta2 and with beta3 John moved the eregi line into a function hence the differences. If you have already changed the code, it will work either way as the function just calls the same code you pasted in.

10-26-2000, 07:57 PM
Yeah I installed it before you found a problem. It is producing no error...and seems to be running smooth...I get around 290+ concurrent users during peak hours.

Thanks.