Google Summer of Code 2016: Improve Joomla front and back-end performance through better compatibility with reverse proxies and PageSpeed Module
I'm a possible mentor for Joomla Project for Google Summer of Code 2016. On this page you will see one of the proposals that, if you are enrolled in a university, you may participate. You can contact me directly BEFORE May 25, 2016 to get more information about how to participate in the selection process and even receive coaching to improve your skills before the selection made by other developers Joomla Project.
Google Summer of Code is a global program focused on introducing students to open source software development. Students work on a 3 month programming project with an open source organization, and, for who those students who successfully complete, will receive a total of 5.500USD, a T-shirt and maybe also a travel for the GSoC meeting/party at the end of program for free.
For this specific idea, the student to pass through the basic selection, and is engaged in part-time, will have on your resume practical experience with web application performance optimization, using techniques that are state of the art in 2016.
It is not required prior knowledge with Joomla CMS or strong experience with PHP, but you should feel very comfortable when using Linux. Not sure if you are able? Check one of the challenges.
The CMS Joomla has a good native cache system that improves back-end performance in order to accelerate the HTML generation by 2 to 4 times. With the help of third-party extensions, you can increase the front-end performance (e.g how fast the site seems to load to the user, as well as savings in file transfer), however such extensions can harm back-end performance.
Websites with Joomla CMS focused in high performance, with big amounts of traffic, or with the requirement of generating HTML in less than 100ms, usually use Joomla without performance-enhancing extensions, and implement those tweaks at the webserver level with the PageSpeed module. Furthermore, it is common to employ a caching system like Varnish (or similar) to do a complete ephemeral storage of the resulting HTML response. Such system is greatly appreciated.
Joomla, by default (without third-party extensions), does not allow reverse proxy caching. With the use of extensions in Joomla it’s possible, however it's still not a trivial process nor a pleasant experience, and in some cases - in order to completely disable unnecessary features - might even require changing the core of Joomla, like disabling the use of sessions for guests and hit counts on articles.
This idea is about using the Joomla CMS for what it does best: managing content. To do this we need to trust the cache and HTML/CSS/JS/images optimization to the webserver, in order to allow Joomla to run even faster and spending less money with hosting and CPU time.
It is expected that - as an additional option and not by default - you make Joomla able to control the HTTP caching headers to set a different caching time to one or more reverse proxies, just as the cache time sent to the visitor's browser. This feature should obligatorily be tested and functional for the main reverse proxies that are typically used in the market. Ideally, but not necessarily required, compatibility with services that deliver HTML caching as a service (like possibly CloudFlare and Fastly ®) could also be sought.
If enabled, when a manager create, edit or delete Joomla articles, it will trigger an event to automatically detect major typically changed URLs (for example, the article page itself, the listing page of the categories and the site's homepage) and thereby allow immediate cache invalidation on those URLs, and on those URLs only, in order to reduce the Joomla administrator’s burden that has to manually invalidate each cached URL- which is a major discouraging aspect of the use of cache invalidation in itself. (Note: The CMS Joomla allows triggers, see https://docs.joomla.org/Plugin/Events)
As to these triggers, it is not required to implement the functionality in a way that automatically use these triggers to effectively invalidate the main reverse proxies’s cache, only allow - in the future - people can use this code base to extend this functionality. However, it tends to be interesting to choose at least one effective example, like Varnish-cache, so this functionality can be througly tested.
Compatibility with Pagespeed Module probably shouldn’t need special changes, but this project should be tested presuming the module is enabled. In case of incompatibilities with the default settings, the produced PHP code should work around these, or there should be produced specific documentation warning about the caveats. A good example of a PageSpeed-related change is to disable content optimizations inside the CMS for specific browsers, such as conversion of images to WEBP - which could provide a cached image that would not work on incompatible browsers.
In addition to the code produced, it is expected that the student create benchmarks comparing before-and-after performance, and also comparing your solution with the solutions using the old native Joomla Caching. At the end of the project, there will be required documentation on how to use the solution, including the provision of configuration suggestions that are relevant to the server, in order to achieve the expected result.
IMPORTANT: In additional improvements that changes the Joomla core, which are not needed when you have full page cache like the option to disable hit count in Joomla articles and session creation for guest users, the student will have help from mentors and the Joomla developer community to decide whether it’s worth being implemented. Both this, and other expected results, may change if a strong technical impediment is detected beyond the scope expected for a student during the GSoC period.
It is recommended to already know how to use a POSIX-like operating system, and it is essential to know how to deal with the command line. You must also have previous knowledge in PHP.
It is not necessary to have prior knowledge with Joomla CMS itself, since this you can learn from us. It is also not required to have previous experience with reverse proxies and the PageSpeed Module, but you must be willing to learn about it, and be pro-active after initial support. Of course, you will have help from mentors in complex situations that will likely arise.
This is more of a DevOps project than a programmer-only idea. It will be less about just coding in PHP, and will be required to be capable of setting enviroments to test and benchmark the resulting performance. This can be a particularly good project depending on the area you want to work professionally, mainly because having such experience in this area is rar. Finally, it is expected that you have commitment to the idea and the Joomla community.
You will be asked to set up a server with one of these options for second interview via video-conference and explain how you did. At the time of reading this text, you are not required to know this, but you should do before the deadline.
Simple Challenge: Varnish-cache + Apache/NGinx + ModPageSpeed + Joomla CMS
In this challenge, you must install Joomla on a server whose credentials for root access will be provided in the first interview. The end result should have optimized content with Pagespeed, aggressive caching to assets (images, CSS, JS, fonts), and short hardcoded cache for HTMLs, for example, 5 minutes.
PROTIP: you probably have to do a gambiarra to cache the HTML on the reverse proxy. No problem. For now you can do it. This project in GSoC will result precisely to facilitate this type of task in 3 months.
Intermediate Challenge: NGinx + Varnish-cache + ModPageSpeed + SSL + proxy requests from one of top 10 sites from your contry
In this challenge, you must install a reverse proxy on a server whose credentials for root access will be provided in the first interview. Choose one of top 10 sites from your contry, and make your server proxy requests. The front and back-end performance from your server should be better than original site, even if it might have a high budget and your server is a 5-dollars a month machine. You should have SSL, like from Let's encrypt. You could use metrics from PageSpeed Insights to prove.
If you are interested in learning about other ideas for GSoC for the Joomla Project, see https://docs.joomla.org/GSOC_2016_Project_Ideas. Then you can join the mailing list https://groups.google.com/forum/#!forum/jgsoc-2016 and introduce yourself, and get support from other mentors like me.
See also GSoC Frequently Asked Questions.comments powered by Disqus