The content caching is very often used inside Joomla core as well as 3rd party's extensions. Main advantage is faster response of page content in browser but only in the case when the page or parts of it are already stored in the cache.
Process of caching of yet not cached page is time consuming and usually takes tens up to hundreds milliseconds for page content parts (stored in Joomla global cache) and several seconds for entire page content (stored in so called page cache). The cached pages on live site for hundreds or thousands pages are created during long time (up to several hours).
For smooth operation of web site using cache(s) are critical two activities:
a) how to clean (delete) old cached content for the page which content was changed to ensure that the new page content is correct presented in the browser
b) how to recache latest page content into the cache
These two kinds of activities have heavy impact on site fast response. Have a look on some used scenarios.
For application testing of web sites is Selenium framework very well suited tool. But as many times so usual it has some difficult parts which costs the tester long time for searching of the satisfactory solution. One of obstacles is working with multilevel menu item selection for switching from one to some other page.
During last sessions testing new JotCache extension on Joomla 2.5.11 was found that solution described in blog article Using Selenium 2.0 with ChromeDriver for testing of Joomla sites was partially unstable sometimes running as desired sometimes the test was waiting and waiting on menu item click position without any further movement to the next test step. The problem was recognized as unsufficient recognition of menu link.
(Translation from german original with courtesy of author Jan Gieselberg, Joomla-Downloads)
The lowest possible load times are pleased not only by the website visitors, but Google search engine also evaluates page load time as an important parameter in its rating calculation. Short loading times of Joomla site can so pay twice positive for the administrator.
Of course the quality of web space, used server and the configuration plays an important role. But up to delivery of the finished page to the visitor browser every request passes through a number of processing stages that can positively or negatively affect the page build-up. Information must be retrieved from the database, permissions applied, code for components and plug-ins executed, and last but not least to be rendered by the framework inside of the template. And exactly up to this point, you can take advantage of shortcut in the form of a page cache. Because why to leave each page to be generated by the whole system if rarely changed pages, when "finalised" processed, you can store in a cache?
Actually, Joomla brings already cache function that must be activated in the configuration. But as so often, the devil is in the details. Because JotCache is not only just upgraded an extra cache to reduce load times, but also brings a few useful features that Joomla cache does not offer. This includes, for example, the option not only modules to exclude from the virtual storage but on request the exclusion is possible for whole module positions and components. JotCache shows in his administration only those items that are actually occupied by a module.
But JotCache is not creating just one version of the respective cached subpages. On request, it sets different versions for each browser type (Internet Explorer 6, 7, Firefox, etc.) and even it takes into account mobile devices. Not for nothing are bringing many modern Joomla templates the mature framework, referring specifically to the peculiarities of each browser. JotCache can handle many of them prepared in the buffer store.
In addition, JotCache lists all the cached pages so either by url or title page in its admin component, and may even wish to define styles and parameters exceptions differently or realize long storage periods. However important care have to be taken for the correct order of the included plugins. This means that the "marker" plugin belongs entirely to the beginning and the actual "cache" plugin completely to the end of all system plugins installed. Joomla's cache must be turned off completely when using JotCache, otherwise there will be problems.
Performing Selenium web tests on powerfull Win7 computer (16GB RAM, processor i7-2600) all page responses were above 1 sec. Such reponse on Joomla 2.5 or Joomla 3.0 with sparse content is not acceptable result.
Starting with Profiler was found that calling only PHP function 'session_start();' in Joomla 2.5 initialisation
(JFactory::getSession() -> $session = JSession::getInstance($handler, $options))
causes itself approx.1 sec. long processing.
Changing session handler in Joomla Global Configuration from 'Database' to 'Memcache' was entire response time not much changed and 1 sec. lag moved to other part of core Joomla code - to the initial call of
$db = JFactory::getDBO();
One of recommended solution to use Joomla (2.5+) with MS SQL Server is WebMatrix platform with Joomla 2.5 Application avaiable on http://www.microsoft.com/web/joomla. This combination is very "packaged" with IIS web server and it uses limited tools to work with database. After practical evaluation of Joomla with WebMatrix I was not satisfied with given tools and operation. Much better solution I found with single installation of MS SQL Server 2008 R2(SP1) with Tools and running Joomla on Apache server with PHP extension php_sqlsrv_..dll.
This notes are free continuation of the earlier blog entry Using Selenium 2.0 with ChromeDriver for testing of Joomla sites.
All site tests were performed on Joomla 3.0.0 backend using Isis standard template and frontend with protostar template. Used testing environment was Chrome browser ver. 22, chromedriver ver.22, NetBeans Java SE ver.7.1.2.
Two years testing Joomla extensions with Selenium 1.0 and Firefox browser with necessary plugins showed positive impressions what concerns application web testing but also some obstacles with problematic stability of whole arrangement. When new Selenium 2.0 was public presented I expected faster coding of test cases, higher stability of test runs and better PHP test environment.
But the reality was something other. For Selenium 2.0 best programming is available in Java (fortunatelly more years used as my main programming language) and all old tests were necessary to transform in new Java coding. Test run stability with Firefox (especially when are used several instances of FF) and Selenium server was low promissing only steady troubles. Then switch to Chrome browser / Chrome Driver was bringing necessary reliability to the testing.
Kunena is very popular forum component for Joomla CMS. It has many fuctions and adjustments but possibility to add custom fields for new topics is still not a part of standard solution. Such request for adding this feature is high rated on Kunena site. One of possible solution how to do it in existing version of Joomla 2.5 / Kunena 1.7 is described below.
For final packaging of Joomla components using Ant build tool was necessary to implement simple PHP function allowing to check and insert when not present dummy index.html files into installation file directories.
Old approach (PHP4 like) requires to code entire recursive search for finding missing index.html under the given root path. With PHP5 SPL iterators it is possible to do it with short code as shows this test snippet which scans all subdirectories and prints subdirectory paths not containing any index.html file.
I am using frequently Selenium web application testing during development of different components and modules for CMS Joomla and Drupal. The best way is to perform testing directly from development IDE and here is excelent possibility to use Selenium module (plugin) inside of NetBeans. Latest versions of NetBeans (6.9, 6.9.1, 6.10.M1) have embedded Selenium Server ver.1.0.1, which can be started along with NB start.
The web development is deep marked by manifold multi-version environment. Different versions of browsers as well as scripting languages, etc. are high appeal for developer work. Very convinient way for development with multiple versions of PHP on local computer is here possibility to arrange more local Apache servers parallel running each with different version of PHP as shown on next figure :