rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 ​​없었던 이야기

7965 단어 rake루비Zshrbenv

목적



rails3와 rails4의 속도 비교의 복수.

이번 개선점으로 루비 버전을 고정하여

간단한 rails의 속도차를 측정할 수 있는 점이 있다.

또한 루비 버전과 rails 버전의 궁합

(즉 각 버전의 루비의 gem rails/railties 구현의 차이)가 부각될 것으로 기대하고 있다.

실험 시스템



개요



각 버전 조합으로
rails g scaffold blog title:string description:string 를 한 후,
rake routesspring rake routes에 걸린 초수를 10회 측정하고, 그 평균값을 출력한다.

실험 시스템은 반자동화되어 있으며 쉘 스크립트 하나와 awk 파일 하나가 모두입니다.


experiment.sh

#!/bin/zsh

RUBY=("1.9.3-p484" "2.0.0-p353" "2.1.0-preview1") 
for ruby in ${RUBY[@]}; do
  export PATH=$RBENV_ROOT/shims:$PATH
  rbenv global $ruby >/dev/null 2>&1

  RAILS_VER=("3.2.15" "4.0.2") 
  for rails_ver in ${RAILS_VER[@]}; do
    gem install rails -v $rails_ver >/dev/null 2>&1
    if test $rails_ver = '3.2.15' ; then
      gem uninstall rails -v "4.0.2" >/dev/null 2>&1
      gem uninstall railties -v "4.0.2" >/dev/null 2>&1
    else
      gem uninstall rails -v "3.2.15" >/dev/null 2>&1
      gem uninstall railties -v "3.2.15" >/dev/null 2>&1
    fi
    rbenv rehash
    ruby -v
    rails -v
    rails new rails_${rails_ver}_speedtest -d mysql >/dev/null 2>&1
    echo "gem 'spring'" >> ./rails_${rails_ver}_speedtest/Gemfile
    cd ./rails_${rails_ver}_speedtest
    bundle install --path vendor/bundle >/dev/null 2>&1
    bundle exec spring rails g scaffold blog title:string description:string >/dev/null 2>&1

    echo not_spring
    for i in {1..10};do
      bundle exec time rake routes | grep real
    done 2> routes.txt
    awk -f ../ave.awk routes.txt
    echo spring
    for i in {1..10};do
      bundle exec time spring rake routes | grep real
    done 2> routes.txt
    awk -f ../ave.awk routes.txt
    cd ..
    rm -rf ./rails_${rails_ver}_speedtest
  done
done


ave.awk

{
  sum += $1
  ave = sum/10
}
END{
  print ave
}


절차


rbenv install 1.9.3-p484rbenv install 2.0.0-p353rbenv install 2.1.0-preview1
하는 일

또한 이미 이러한 버전을 사용하고 있고 gem rails를 설치한 경우
gem install rails -v 3.2.15gem install rails -v 4.0.2gem uninstall rails -v 4.0.2gem uninstall rails -v [既存バージョン]gem uninstall railties -v 4.0.2gem uninstall railties -v [既存バージョン]
처리하고 rails 버전을 3.2.15로 설정하면

오류가 발생할 가능성이 줄어드는 것으로 확인되었습니다 (rails 충돌을 수동으로 해결).

그런데, 이 쉘 스크립트는 치열하기 때문에 프로세스간 통신등은 피해 만들어지고 있다.

따라서 zsh experiment.sh 등으로 자식 프로세스로 움직일 수 없다.

따라서 source experiment.sh를 실행해야합니다.

이때 ave.awk와 experiment.sh는 같은 디렉토리에 존재할 필요가 있다.
source experiment.sh 를 실행한 후에는 조건이 갖추어져 있으면 결과를 기다릴 뿐이다.

수동으로 데이터를 취하고 있어는 실수가 많은 데 대기 시간이 아까웠기 때문에 스크립트로했다. 자동화 만세.

결과



다음과 같은 출력이 얻어졌다.

또한 ruby1.9.3/rails3.2.15의 데이터를 1로 하여 비를 취한 것도 적는다.



고찰



대체로 어떤 버전이 뛰어나는지를 명언할 수 있을 정도의 성능 차이는 없지만,

속도적인 면에 한해서 말하면 rails와 ruby의 버전의 궁합이라는 것이 존재하는 것 같다.

이 데이터는 10회 평균을 취한 것이며, 데이터의 변동에 특필해야 할 점도 없었기 때문에, 정밀도는 타당한 것이라고 생각된다.

또, 스프링은 첫회만 통상의 속도로 2회째부터 70% 정도 처리를 가볍게 해 주기 때문에,

spring 있는 데이터는 그 오차를 흡수하기 위해 100회 평균 정도를 취해 두고 싶었지만,

시간의 관계상 간단하게 했다.

여담



rails2계의 데이터도 잡으려고 생각했습니다만, 3계 이후와 구현이 전혀 다르기 때문에 자동화할 수 없었습니다・・・orz

그리고, 신경이 쓰이는 데이터로서

ruby1.9.3×rails4.0.2가 1.5배 정도 시간이 걸리는 점,

ruby2.1.0×rails3.2.15가 0.7배 정도의 시간으로 끝난 점,

이 근처는 조금 신경이 쓰였으므로 조사를 계속하고 싶습니다.

추가



속도비표의 rails3계와 4계를 비교하면 not spring에서는 늘어서 늦어져 있는 것을 확인할 수 있습니다.

그러나 스프링이 있는 속도비표에서는 3계와 4계에 차이는 없다.



spring에서 폭속 rake 생활 에서 언급했듯이,

rails4에서 spring이 가속화되었습니다.

라는 증거가 될 수 있지 않을까 생각했습니다.

ruby2.1.0에서는 spring에 의한 속도 향상을 별로 볼 수 없지만, spring이 최적화되면 더욱 빨라지는 경우도 있는 것일까요? (자신 없음)

추가



spring은 bundler가 아니라 gem install에서 도입해야한다는 의견을 보았으므로 올려 둡니다.
h tp : // 쿠이타. 이 m / 우노 sk / ms / c2 2 2 bc31d97 92803dc #

좋은 웹페이지 즐겨찾기