Skip to content
This repository has been archived by the owner on Aug 23, 2019. It is now read-only.

Performance Tuning

dalers edited this page Sep 21, 2012 · 1 revision

This article describes Achievo performance tuning. It was adapted from Speed up Achievo in the ibuldings Achievo wiki. The original material appears to have been written prior to the release of Achievo 1.4, and although being updated, be aware that not all topics or recommendations may apply to the current release, current development, or the version you are using.

Please help update this article with your own experiences.

Table of Contents

Turn debugging Completely Off

In atkconf.inc change the following config:

 $config_debug = -1; 

This will reduce the memory usage and give some performance.

Use gzip Compression

In atkconf.inc you can add the following config:

 $config_output_gzip = true; 

Use the Apache "deflate" Module

The Apache mod_deflate module (Apache 2.2 docs) provides the DEFLATE output filter that allows output from your server to be compressed before being sent to the client over the network.

This Configure mod deflate for Apache 2.2 article may also be of interest.

    # Netscape 4.x has some problems...
    BrowserMatch ^Mozilla/4 gzip-only-text/html
  
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
  
    # MSIE masquerades as Netscape, but it is fine
    # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  
    # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
    # the above regex won't work. You can use the following
    # workaround to get the desired effect:
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
  
    # Don't compress everything
    SetEnvIfNoCase Request_URI \.(?i:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?i:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
  
  </ifmodule>

Use the Apache "expires" Module

The Apache mod_expires module (Apache 2.2 docs) controls the setting of the Expires HTTP header and the max-age directive of the Cache-Control HTTP header in server responses. By increasing expiration times for files, static content will be fetched more often from cache (rather than from the source).

  # cache common graphics for 3 days
  ExpiresByType image/jpg "access plus 3 days"
  ExpiresByType image/gif "access plus 3 days"
  ExpiresByType image/jpeg "access plus 3 days" 
  ExpiresByType image/png "access plus 3 days"
  
  # cache CSS for 24 hours
  ExpiresByType text/css "access plus 24 hours"
  
  # cache javascript for 24 hours
  ExpiresByType text/javascript "access plus 24 hours"  
  ExpiresByType application/x-javascript "access plus 24 hours"
  ExpiresByType application/javascript "access plus 24 hours"
  
  </ifmodule>

Use the Apache "headers" module

The Apache mod_expires module (Apache 2.2 docs) provides directives to control and modify HTTP request and response headers. It is possible to increase the expiration time for headers.

  #set expires header to 2 days
  <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
    Header set Cache-Control "max-age=172800, public"
  </filesmatch>

Use the Apache "FileETag" Directive

The FileETag directive (Apache 2.2 docs) configures the file attributes that are used to create the ETag (entity tag) response header field when the document is based on a static file. In your Apache vhost configuration, you can set an entity tag to improve cache management to save network bandwidth.)

 FileETag MTime Size

Use a PHP Accelerator

You can speed up Achievo by using a PHP Accelerator (see Wikipedia for a list of accelerators, but the following were cited in the original version of this recommendation:

Currently (Sept 2012), it appears APC is still a favorite (e.g. APC + memcached + squid), xCache is still going strong, but eAccelerator is past its prime.

Some people may think of Zend Optimizer an accelerator, but it is actually a byte-code loader for the Zend Guard (encoding) product, and does not include a byte code cache.

Create Selector Nodes

If your nodes has multiple manytoone relations, make sure the destination node doesn't contain too many relations. If this is case, just make a simple selector node for it with only the fields needed to get a decent descriptor.

Other Reading