v3.6.0 Progress Report – Part 1

Posted March 28, 2013 by Raymond Benc

I wanted to take a moment to update everyone with a quick progress report on v3.6.0 and what is being done to improve overall performance. Our first step was to setup a load balanced server environment. To do this we setup both Apache and Nginx. For both environments we set them up to use Alternative PHP Cache (APC) and Memcached.

Both servers have the feature to GZIP CSS/JS files enabled and to unset both Pragma and ETag’s.

We plan on running benchmarks on both server environments next week so further fine tuning on the actual servers will take place then.

With our servers setup we looked into combining our CSS and Javascript into 1 minified file. With this option enabled it will combine all of your CSS and Javascript for a specific page into 1 CSS and 1 Javascript file. We also added the option to push these files to a Content Delivery Network (CDN). The minified Javascript file is placed at the end of your page, giving the end-user an overall better browsing experience. The only “annoyance” at this time is the first time you visit a page it takes several seconds since it has to minify the data and send it to a CDN, however after that it’s smooth sailing.

Our current task is to drop the total number of SQL queries. We started work on the dashboard, which is where we have the main activity feed. This page on the current stable release has up to 70 queries to the database. With v3.6.0 we have brought this down to 5. This new caching system is off by default and is designed for those that use a caching system other then the default file cache.

With our tests we are using Memcached as this allows us to spread our product across several servers. Take for example the 2 test environments we have up and running. Both Apache and Nginx are running 4 separate but identical load balanced servers with the sole purpose to process incoming HTTP requests and nothing more. All cache related information including templates are stored on a group of Memcached servers, which at this time we have 4 up and running.

Each activity feed has its own set of sub queries. With v3.6.0 we cache each feed and this includes the information about the feed, likes and comments. When information is pushed to that specific feed such as a person liking or commenting on it we refresh the cache for that feed. This same routine is now being applied to other areas of the site as we try to drop as much interaction with the database as we can and instead use the servers memory. We are currently working on users profiles and should have this done by next week so we can run some benchmarks.

Stay tuned for more updates.