Couple of month’s back I started working for one of my clients who had more than two million posts in his vBulletin forum and had issues of very slow forum experience. I did a long list of things and couple of months down the line he has no complaints about the forum speed now. Let me share the same list in details here. This not only will help others but will also help me in making list of things to be done for optimizing large forums.
1. Move Attachments and Images to File System
By Default vBulletin have Attachments / Images / Avatars all are stored into Database. You need to make sure you move them to files.
- Admin CP > Attachments > Attachment Storage Type
- Admin CP > User Albums > Album Picture Storage Type
- Admin CP > Avatars > User Picture Storage Type
2. Store CSS StyleSheets as Files
vBulletin by default renders the CSS in head part of HTML and this in turn increases the size of each page. Just storing CSS as a file not only reduces the code from each page but also allows caching of the CSS file. Apart from the editable CSS vBulletin also adds an extra CSS file clientscript/vbulletin_important.css and you can copy the content of the file into your vBulletin CSS editor to make sure you have only one CSS file to save an additional server query. You can even go one step forward and copy the content of the CSS file generated from your vBulletin interface and minimize CSS and then upload to your server and link it. For Go4Expert.com I have done exactly the same.
3. Reduce HTML for guest (or otherwise)
Lot of HTML can be avoided to render your pages much faster and reduce server load. Let me get into each of them one by one.
- Disable Forum Jump Menu – I have Forum Jump Menu disabled for guests using vbSEO (See my vBSEO Review) but if you are not using vbSEO you can disable forum jump completely from Admin CP. I am sure not many of your forum users use forum jump menu. The best thing is to try and turn it off and see if any body reports that they are missing it. If no one reports, you can safely assume no one cared about using it either. Forum jump actually causes the server to work harder to generate the menu and then uses the bandwidth to display it on each page load. You can change forum jump options from Admin CP > vBulletin Options -> General Settings -> Use Forum Jump Menu.
- Disable Posting Rules – Posting rules at the bottom of every thread and forum pages does not help much and adds mainly to the final HTML. There is no option in vBulletin to disable it and so you need to edit one single template to disable the posting rules. I have disabled it for guests only on Go4Expert.com but you can even disable it completely. To disable posting rules for guests edit the forumrules template and add the following at the top. <if condition=”$show[member]”> And at the end of the template add </if> Posting rules will only show to members and not to guests. You can completely empty the template and it will not show.
- Disable username menu for guests on showthread pages – Showthread page shows post and each post has a username but when you click on those username it loads a popup menu and ideally that menu is rarely of any use to guests because by default users have the email to members off and PM is only for members and so if you want you can turn those menu off for guests. vBSEO provides that as an option.
- Disable who is online for guests – Edit the usergroup ( Admin CP > Usergroups > Usergroup Manager ) called “Unregistered / Not Logged In” and Set “Can View Who’s Online” to off.
- Disable Template Name in HTML Comments– More comments in HTML means more time browser will need to download the html and render to user and so ideally on your live server you should have template name in html comments turned off. Admin CP > vBulletin Options > vBulletin options > General Settings > and select No for Add Template Name in HTML Comments.
4. Limit Spider Activity
If you want to save on your bandwidth you should have robots.txt file to restrict areas of forums you don’t have much for spiders.
User-agent: * Disallow: /admincp/ Disallow: /images/ Disallow: /modcp/ Disallow: /attachment.php Disallow: /search.php Disallow: /newreply.php Disallow: /newthread.php Disallow: /editpost.php Disallow: /profile.php Disallow: /register.php Disallow: /login.php Disallow: /subscription.php Disallow: /private.php Disallow: /report.php Disallow: /sendmessage.php Disallow: /memberlist.php Disallow: /misc.php Disallow: /moderator.php Disallow: /postings.php Disallow: /sendtofriend.php Disallow: /threadrate.php Disallow: /usercp.php Disallow: /showgroups.php
You can see the robots.txt file of Go4Expert.
5. Compress Output (GZIP)
vBulletin provides compression for HTML output but I prefer to get it done through Apache via mod_deflate. Disable Zipped output in vBulletin. vBulletin Options -> Cookies and HTTP Header Options -> GZIP HTML Output And add the following lines to your httpd.conf file in Apache.
<IfModule mod_deflate.c> SetOutputFilter DEFLATE # file-types indicated will not be compressed SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|rar|zip|pdf)$ no-gzip dont-vary <IfModule mod_headers.c> Header append Vary User-Agent </IfModule> </IfModule>
Restart Apache web server. Additionally you should also use Apache to cache static content. Refer article by coderzone on How to Decrease Web Page Loading Time especially caching of static content.
6. Install APC/XCache/eAccelerator on your server
I prefer CentOS on my server and vBulletin recommends APC for CentOS vBulletin combo. Refer an article by Floris about how to install APC on CentOS
7. Full Text Search Type
If you have MySQL 4.0.x you can use this option to greatly reduce server load when a search query is used on your server. Admin CP > vBulletin Options > Search Type Remember that the change itself is a heavy process as it needs to alter the vBulletin post and thread table. If you don’t have many searches avoid such a heavy query right at this moment.
8. Optimal vBulletin Options
- Enable All AJAX features – Make sure that this is set to allow all AJAX Features. Ajax helps reduce server load by not reloading a page where AJAX can be used. (Quick Reply for instance) > General Settings -> Disable AJAX Features and select Enable All Ajax Features.
- Cookies and HTTP Header Options > Remove Redirection Message Pages – I personally have not disabled it for Go4Expert.com but for my client I had to put this off to save on an unneeded page load and bandwidth.
- Cookies and HTTP Header Options > Add No-Cache HTTP Headers – Make sure you don’t opt for No-Cache setting and so set this to No.
- Server Settings and Optimization Options > Cached Posts Lifespan – If you have no issues with space on your server setting this to higher value is recommended. I have this set to 10 days and once you turn this on rebuild your Post Cache under Maintenance > Update Counters
- Server Settings and Optimization Options > Update Thread Views Immediately – Set this to No. This will update thread views via a cron every 1 hour by default. If you wish to change this you can do so by editing the Scheduled Task for Thread Views to a different time.
- Server Settings and Optimization Options > Update Attachment Views Immediately – Set to No.
- User Listing & Profile Viewing > Show Last Post on Profile Page – This is very server intensive process and so set this to No.
- Message Posting and Editing Options > Quick Reply – Not only does this make posting faster which leads to more posts being made this also uses Ajax which means you do not have to load another page to make a post.
- Message Posting and Editing Options > Quick Edit – Turn this on to reduce the need for a new page reload when someone simply wants to edit a post.
- Message Searching Options > Minimum Time Between Searches – Set this to some value mainly to avoid an attempt to use the search to harm your server.
- Forums Home Page Options > Display Logged in Users? – I have mine set to Yes but if you have issues with server load you can turn this feature off.
- Forum Display Options > Show Users Browsing Forums – I have mine set to No and if you have issues with server load you can turn this feature off.
- Thread Display Options > Show Users Browsing Threads – I have mine set to No for similar reasons as above.
- Forum Display Options > Maximum Displayed Threads Before Page Split – Having too many threads on a single page makes the page load slowly and so ideally you should have the value 20 or 40. I have this set to 20.
9. Use vbOptimize
I personally have not used vbOptimize Pro because it is untested on 3.7.x/3.6.x but have experienced lot of good things about vbOptimize when it was a free mod at vbulletin.org
10. Use CDN
11. More …
If you still have issues with your server ideally you should hire me 😀 . Opt for MySQL post table partitioning. Partitioning your post table should be based on the threadid. Partition is introduced in MySQL version 5.1+ and you cannot use vBulletin’s FULLTEXT Search option on a partitioned table. Check out how to Partition MySQL table based on Range. Before you opt for partition do read the Limitations.
Further Reading …