Summary: | Web applications are becoming more and more popular as the boundaries of what can be done in a browser are pushed forward. Ruby on Rails is a very popular web application framework for the Ruby programming language. Ruby on Rails allows for rapid prototyping and development of web applications but it suffers from performance problems with large scale applications. This thesis focuses on optimization of a Ruby on Rails application to improve its performance. We performed three optimizations to a benchmark application that was developed for this project. First, we removed unnecessary modules from Ruby on Rails and optimized the database interaction with Active Record which is the default object relational mapping (ORM) in Ruby on Rails. It allows us to fetch and store models in the database without having to write database specific query code. These optimizations resulted in up to 36% decrease in application response time. Second, we implemented a caching mechanism for JavaScript Object Notation (JSON) representation of models in the optimized application. This second optimization resulted in a total of 96% response time decrease for one of the benchmarks. However, we also observed an increased response time (with approximately with 15%) for a second benchmark compared to the unoptimized application. Third, we tuned the garbage collector for CRuby. CRuby is the original implementation of Ruby created by the inventor of the language Yukihiro Matsumoto. This optimization was performed on top of the already optimized application with caching and resulted in an overall decrease in response time: one benchmark showed a response time decrease of 29% with regard to the unoptimized application. In addition, we evaluated the performance of different Ruby implementations: we studied the performance of the application with CRuby, JRuby and Rubinius. We observed that JRuby had the best performance. When the optimized and cached application executed in JRuby it obtained a decrease in response time of up to 32% with regard to the unoptimized application in CRuby. In conclusion, we presented that different optimization techniques can be applied to improve Ruby on Rails performance leading to maximum performance increase of 96%. In addition, we showed that the choice of Ruby implementation is very important as the JRuby implementation has potential to further increase application performance. This work is very important for future development and success of the Ruby on Rails framework as performance is largely seen as the biggest disadvantage with the framework. === Webbapplikationer ökar i popularitet allt eftersom gränserna för vad som går att göra i en webbläsare flyttas framåt. Ruby on Rails är ett populärt ramverk för utveckling av webbapplikationer med programmeringsspråket Ruby. Ruby on Rails gör det möjlig att snabbt utveckla en produkt men ramverket lider av prestandaproblem vid utveckling av storskaliga applikationer. Detta examensarbete fokuserar på optimering av en Ruby on Rails applikation för att förbättra dess prestanda. Vi utför tre optimeringar på en utvärderingsapplikation som utvecklades för detta projekt. Först tog vi bort alla moduler moduler som inte behövdes från Ruby on Rails ramverket och optimerade Active Records interaktion med databasen. Active Record är Ruby on Rails objekt-relations-mappning (ORM). Ett ORM gör det möjligt att hämta och lagra information i databasen utan att behöva skriva databasspecifika anrop. Dessa optimeringar resulterade i en upp till 36% minskning i applikationens svarstid. I andra hand implementerade vi en caching modul för JavaScript Object Notation (JSON) representationer av databasmodeller i den redan optimerade applikationen. Denna optimering resulterade i en total minskning av svarstiden med 96% vid ett utvärderingstest. Vi såg dock en ökning av svarstiden (med uppskattningsvis 15%) för ett annat utvärderingstest jämfört med den icke optimerade applikationen. Den tredje optimeringen av applikationen vi utförde var att finjustera skräpsamlaren i CRuby. CRuby är den ursprungliga implementationen av Ruby som utvecklades av språkets skapare Yukihiro Matsumoto. Denna optimering utfördes ovanpå tidigare optimeringar och resulterade i en minskning i svarstiden för alla utvärderingstest: ett utvärderingstest visade en minskning av svarstiden med 29% jämfört med den icke optimerade applikationen. Utöver ovan nämnda optimeringar utvärderade vi prestandan av olika Ruby implementationer: vi studerade prestandan för applikationen med CRuby, JRuby och Rubinius. We observerade att JRuby gav bäst prestanda. När den den optimerade applikationen med caching kördes i JRuby gav den en minskning i svarstid med upp till 32% jämfört med den icke optimerade applikationen i CRuby. Avslutningsvis konstaterar vi att olika optimeringstekniker kan användas för öka prestandan av en Ruby on Rails applikation. Vi uppnådde en minskning av svarstiden med upp till 96%. Utöver detta visar vi att valet av Ruby implementation är mycket viktigt eftersom JRuby har potentialen att ytterligare förbättra en applikations prestanda. Detta arbete är viktigt för framtida utveckling och framgång för Ruby on Rails ramverket eftersom dess prestanda ofta är sett som den största nackdelen med att använda ramverket för att utveckla en webbapplikation.
|