How To Optimize Xenforo

0
364
XenForo Logo

Xenforo is a very powerful and well-built forum software that is used by thousands of forums all over the internet. Xenforo while fast out of the box does require some work to properly optimize it’s load time for your users. You will need to do a couple of things and this will all depend on your hosting environment.

You will be utilizing the following tools.

HTACCESS

You can take these settings straight from a WordPress site and they work well performance wise. The settings from W3TC work perfectly with Xenforo.

# BEGIN W3TC Browser Cache
<IfModule mod_mime.c>
AddType text/css .css
AddType text/x-component .htc
AddType application/x-javascript .js
AddType application/javascript .js2
AddType text/javascript .js3
AddType text/x-js .js4
AddType text/html .html .htm
AddType text/richtext .rtf .rtx
AddType image/svg+xml .svg .svgz
AddType text/plain .txt
AddType text/xsd .xsd
AddType text/xsl .xsl
AddType text/xml .xml
AddType video/asf .asf .asx .wax .wmv .wmx
AddType video/avi .avi
AddType image/bmp .bmp
AddType application/java .class
AddType video/divx .divx
AddType application/msword .doc .docx
AddType application/vnd.ms-fontobject .eot
AddType application/x-msdownload .exe
AddType image/gif .gif
AddType application/x-gzip .gz .gzip
AddType image/x-icon .ico
AddType image/jpeg .jpg .jpeg .jpe
AddType application/json .json
AddType application/vnd.ms-access .mdb
AddType audio/midi .mid .midi
AddType video/quicktime .mov .qt
AddType audio/mpeg .mp3 .m4a
AddType video/mp4 .mp4 .m4v
AddType video/mpeg .mpeg .mpg .mpe
AddType application/vnd.ms-project .mpp
AddType application/x-font-otf .otf
AddType application/vnd.ms-opentype .otf
AddType application/vnd.oasis.opendocument.database .odb
AddType application/vnd.oasis.opendocument.chart .odc
AddType application/vnd.oasis.opendocument.formula .odf
AddType application/vnd.oasis.opendocument.graphics .odg
AddType application/vnd.oasis.opendocument.presentation .odp
AddType application/vnd.oasis.opendocument.spreadsheet .ods
AddType application/vnd.oasis.opendocument.text .odt
AddType audio/ogg .ogg
AddType application/pdf .pdf
AddType image/png .png
AddType application/vnd.ms-powerpoint .pot .pps .ppt .pptx
AddType audio/x-realaudio .ra .ram
AddType application/x-shockwave-flash .swf
AddType application/x-tar .tar
AddType image/tiff .tif .tiff
AddType application/x-font-ttf .ttf .ttc
AddType application/vnd.ms-opentype .ttf .ttc
AddType audio/wav .wav
AddType audio/wma .wma
AddType application/vnd.ms-write .wri
AddType application/font-woff .woff
AddType application/vnd.ms-excel .xla .xls .xlsx .xlt .xlw
AddType application/zip .zip
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css A31536000
ExpiresByType text/x-component A31536000
ExpiresByType application/x-javascript A31536000
ExpiresByType application/javascript A31536000
ExpiresByType text/javascript A31536000
ExpiresByType text/x-js A31536000
ExpiresByType text/html A3600
ExpiresByType text/richtext A3600
ExpiresByType image/svg+xml A3600
ExpiresByType text/plain A3600
ExpiresByType text/xsd A3600
ExpiresByType text/xsl A3600
ExpiresByType text/xml A3600
ExpiresByType video/asf A31536000
ExpiresByType video/avi A31536000
ExpiresByType image/bmp A31536000
ExpiresByType application/java A31536000
ExpiresByType video/divx A31536000
ExpiresByType application/msword A31536000
ExpiresByType application/vnd.ms-fontobject A31536000
ExpiresByType application/x-msdownload A31536000
ExpiresByType image/gif A31536000
ExpiresByType application/x-gzip A31536000
ExpiresByType image/x-icon A31536000
ExpiresByType image/jpeg A31536000
ExpiresByType application/json A31536000
ExpiresByType application/vnd.ms-access A31536000
ExpiresByType audio/midi A31536000
ExpiresByType video/quicktime A31536000
ExpiresByType audio/mpeg A31536000
ExpiresByType video/mp4 A31536000
ExpiresByType video/mpeg A31536000
ExpiresByType application/vnd.ms-project A31536000
ExpiresByType application/x-font-otf A31536000
ExpiresByType application/vnd.ms-opentype A31536000
ExpiresByType application/vnd.oasis.opendocument.database A31536000
ExpiresByType application/vnd.oasis.opendocument.chart A31536000
ExpiresByType application/vnd.oasis.opendocument.formula A31536000
ExpiresByType application/vnd.oasis.opendocument.graphics A31536000
ExpiresByType application/vnd.oasis.opendocument.presentation A31536000
ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000
ExpiresByType application/vnd.oasis.opendocument.text A31536000
ExpiresByType audio/ogg A31536000
ExpiresByType application/pdf A31536000
ExpiresByType image/png A31536000
ExpiresByType application/vnd.ms-powerpoint A31536000
ExpiresByType audio/x-realaudio A31536000
ExpiresByType image/svg+xml A31536000
ExpiresByType application/x-shockwave-flash A31536000
ExpiresByType application/x-tar A31536000
ExpiresByType image/tiff A31536000
ExpiresByType application/x-font-ttf A31536000
ExpiresByType application/vnd.ms-opentype A31536000
ExpiresByType audio/wav A31536000
ExpiresByType audio/wma A31536000
ExpiresByType application/vnd.ms-write A31536000
ExpiresByType application/font-woff A31536000
ExpiresByType application/vnd.ms-excel A31536000
ExpiresByType application/zip A31536000
</IfModule>
<IfModule mod_deflate.c>
<IfModule mod_setenvif.c>
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
</IfModule>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
<IfModule mod_mime.c>
# DEFLATE by extension
AddOutputFilter DEFLATE js css htm html xml
</IfModule>
</IfModule>
<FilesMatch “\.(css|htc|less|js|js2|js3|js4|CSS|HTC|LESS|JS|JS2|JS3|JS4)quot;>
FileETag MTime Size
<IfModule mod_headers.c>
Header set Pragma “public”
Header append Cache-Control “public”
Header unset Set-Cookie
Header set X-Powered-By “W3 Total Cache/0.9.4.1”
</IfModule>
</FilesMatch>
<FilesMatch “\.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|SVG|SVGZ|TXT|XSD|XSL|XML)quot;>
FileETag MTime Size
<IfModule mod_headers.c>
Header set Pragma “public”
Header append Cache-Control “public”
Header set X-Powered-By “W3 Total Cache/0.9.4.1”
</IfModule>
</FilesMatch>
<FilesMatch “\.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|

jpeg|jpe|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|

mpeg|mpg|mpe|mpp|otf|odb|odc|odf|

odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|

svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|woff|xla|

xls|xlsx|xlt|xlw|zip|ASF|ASX|WAX|WMV|WMX|

AVI|BMP|CLASS|DIVX|DOC|DOCX|EOT|EXE|

GIF|GZ|GZIP|ICO|JPG|JPEG|JPE|JSON|MDB|MID|

MIDI|MOV|QT|MP3|M4A|MP4|M4V|MPEG|MPG|

MPE|MPP|OTF|ODB|ODC|ODF|ODG|ODP|

ODS|ODT|OGG|PDF|PNG|POT|PPS|PPT|

PPTX|RA|RAM|SVG|SVGZ|SWF|

TAR|TIF|TIFF|TTF|TTC|WAV|WMA|

WRI|WOFF|XLA|XLS|XLSX|XLT|XLW|ZIP)quot;>
FileETag MTime Size
<IfModule mod_headers.c>
Header set Pragma “public”
Header append Cache-Control “public”
Header unset Set-Cookie
Header set X-Powered-By “W3 Total Cache/0.9.4.1”
</IfModule>
</FilesMatch>
# END W3TC Browser Cache

Xenforo Caching & Configuration

Performance Tab: Enable the following features.

  • Cache User News Feed
  • Enable Delayed Insert SQL Queries (if you can)
  • Minify CSS
  • Fetch Public Templates As Files (if you have APC, Memcache, or equivalent installed)
  • Cache BB Code Output (set the time to something you deem reasonable)
  • Locally Hosted jquery

CachingThis will vary depending on your server configuration and what you have installed.

All of the below code snippets must be added to your library/config.php file.

Disk Caching: Caching VIA disk is great for static files and content and there is a lot of space and if you are going to cache session information. If you aren’t caching session information and are able to use APC or Memcache do so. Set this for disk caching.

$config[‘cache’][‘enabled’] = true;

$config[‘cache’][‘frontend’] = ‘Core’;

$config[‘cache’][‘frontendOptions’][‘cache_id_prefix’] = ‘xf_’;

$config[‘cache’][‘cacheSessions’] = true;

$config[‘cache’][‘backend’] = ‘File’;

APC Caching: Caching with APC is the equivalent of telling the server to store the information in the servers memory. The advantage to this method is the loading something from memory is much faster than doing so via a file. The down side is that you can run into a cache-slam or cause the server to run out of memory. This should be tested and monitored and you can ask your host for advice. If you are running APC you can also make use of this option in the performance tab in your admin panel which you should do “Fetch Public Templates As Files.”

$config[‘cache’][‘enabled’] = true;

$config[‘cache’][‘frontend’] = ‘Core’;

$config[‘cache’][‘frontendOptions’][‘cache_id_prefix’] = ‘xf_’;

$config[‘cache’][‘backend’] = ‘Apc’;

CloudFlare Settings

Xenforo doesn’t play too nicely with some features of CloudFlare such as the Rocket Loader and you will need to configure it accordingly. You also need to make sure to setup the proper settings to fix the IP addresses of users which you can read about here.

Firewall Settings: 

Security Level: High

Challenge Passage: 30 Minutes

Speed Settings:

Auto Minify: HTML, CSS, JavaScript

Rocket Loader: Off

Caching

Caching Level: Standard

Browser Cache Expiration: 4 hours

Always Online: On

Page Rules: 

You need to set the URL of your admin panel (yoursite.com/forums/admin.php). While you are in here disable everything including caching, security, and performance.

Network:

IPv6 Compatability: On

Conclusion

After you have implemented all of these settings there will be a very large increase in your website performance, and you will reduce the load on your server. Remember that you need to do other manual things such as making sure your database is optimized and clean (which Xenforo normally takes care of) and your website should load quickly. This is not the perfect solution

LEAVE A REPLY