GSP vs. FTL (microbenchmark)

Groovy Server Pages vs. FreeMarker Templates. Both are good tools, maintained by extremely qualified teams and available to Grails (FreeMarker through freemarker and freemarker-tags plugin).

As previously stated, microbenchmarks are just microbenchmarks. The following tests were motivated by an old argument over dynamic template rendering and the recent discussion on the rendering performance of various web frameworks.

These are the testing results for the mentioned scenario:

Apache HTTP server benchmarking tool (ab)

  • GSP

    Document Path: /grailsapp/products
    Document Length: 1037698 bytes

    Concurrency Level: 30
    Time taken for tests: 383.757685 seconds
    Complete requests: 3000
    Failed requests: 0
    Write errors: 0
    Total transferred: 3113592000 bytes
    HTML transferred: 3113094000 bytes
    Requests per second: 7.82 [#/sec] (mean)
    Time per request: 3837.577 [ms] (mean)
    Time per request: 127.919 [ms] (mean, across all concurrent requests)
    Transfer rate: 7923.27 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 0 1.1 0 14
    Processing: 2105 3829 380.8 3831 5122
    Waiting: 2097 3824 381.0 3825 5120
    Total: 2105 3829 380.9 3831 5122

    Percentage of the requests served within a certain time (ms)
    50% 3831
    66% 3987
    75% 4092

  • FTL

    Document Path: /grailsapp-fm/products
    Document Length: 1026697 bytes

    Concurrency Level: 30
    Time taken for tests: 103.94286 seconds
    Complete requests: 3000
    Failed requests: 0
    Write errors: 0
    Total transferred: 3080604000 bytes
    HTML transferred: 3080091000 bytes
    Requests per second: 29.10 [#/sec] (mean)
    Time per request: 1030.943 [ms] (mean)
    Time per request: 34.365 [ms] (mean, across all concurrent requests)
    Transfer rate: 29181.07 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 0 0.0 0 0
    Processing: 74 1027 646.1 962 4373
    Waiting: 71 988 643.3 915 4006
    Total: 74 1027 646.1 962 4373

    Percentage of the requests served within a certain time (ms)
    50% 962
    66% 1212
    75% 1376

JMeter

  • GSP

  • FTL

Relevant information:

  • The applications were launched using ‘grails prod run-war’;
  • Apache benchmarking was executed using the command ‘ab -n 3000 -c 30 URL’;
  • JMeter’s configuration file can be found here;
  • The complete results are here;
  • The rendering performance of GSPs was improved in version 1.4 of Grails: GRAILS-7582.

Project on github.

Additional references:

11 Responses to GSP vs. FTL (microbenchmark)

    • Só de ler alguns trechos desse artigo, já me lembrei de algo interessante que aconteceu enquanto eu reproduzia os testes do GSP x FTL:

      Nessa postagem do Chee Kin, como o teste era feito via JavaScript, o desempenho “percebido” estava mais próximo do que um usuário realmente experimentaria. Nesse caso, o limitante inferior, se o cliente e o servidor fossem o mesmo computador, seria o tempo de renderização do browser. Então, diferenças de milésimos de segundo não seriam percebidas, se o browser demorasse segundos para renderizar a página.

      Já nessa postagem, não. Ao reproduzir os testes executados pelo autor, a minha única curiosidade era saber como os FTLs se comportariam, quando comparados aos GSPs, e qual seria a capacidade de resposta da aplicação a requisições simultâneas. Eu não tinha nenhuma pretensão maior do que essa :-)

    • Oi Wanderson.

      Gosto bastante do FreeMarker. Só sugiro executar mais testes antes para saber em quais situações/tipos de página ele será mais rápido que o GSP, principalmente se você estiver usando o freemarker-tags plugin. Digo isso porque o freemarker-tags é um wrapper sobre as GSP TagLibs e, dessa maneira, é esperado que, na média, ele seja mais lento quando comparado com a utilização direta das mesmas tags. Claro que não é nada que não possa ser melhorado com o tempo.

      Obrigado por acompanhar o blog.

      []‘s.

Leave a Reply

Your email address will not be published. Required fields are marked *

*


six + = 9

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>