rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 없었던 이야기
목적
rails3와 rails4의 속도 비교의 복수.
이번 개선점으로 루비 버전을 고정하여
간단한 rails의 속도차를 측정할 수 있는 점이 있다.
또한 루비 버전과 rails 버전의 궁합
(즉 각 버전의 루비의 gem rails/railties 구현의 차이)가 부각될 것으로 기대하고 있다.
실험 시스템
개요
각 버전 조합으로
rails g scaffold blog title:string description:string
를 한 후,
rake routes
및 spring 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-p484
rbenv install 2.0.0-p353
rbenv install 2.1.0-preview1
하는 일
또한 이미 이러한 버전을 사용하고 있고 gem rails를 설치한 경우
gem install rails -v 3.2.15
gem install rails -v 4.0.2
gem uninstall rails -v 4.0.2
gem uninstall rails -v [既存バージョン]
gem uninstall railties -v 4.0.2
gem 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 #
Reference
이 문제에 관하여(rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 없었던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sgtn/items/afa1ace4f94120a5c71d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
개요
각 버전 조합으로
rails g scaffold blog title:string description:string
를 한 후,rake routes
및 spring 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-p484
rbenv install 2.0.0-p353
rbenv install 2.1.0-preview1
하는 일
또한 이미 이러한 버전을 사용하고 있고 gem rails를 설치한 경우
gem install rails -v 3.2.15
gem install rails -v 4.0.2
gem uninstall rails -v 4.0.2
gem uninstall rails -v [既存バージョン]
gem uninstall railties -v 4.0.2
gem 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 #
Reference
이 문제에 관하여(rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 없었던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sgtn/items/afa1ace4f94120a5c71d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
대체로 어떤 버전이 뛰어나는지를 명언할 수 있을 정도의 성능 차이는 없지만,
속도적인 면에 한해서 말하면 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 #
Reference
이 문제에 관하여(rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 없었던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sgtn/items/afa1ace4f94120a5c71d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
속도비표의 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 #
Reference
이 문제에 관하여(rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 없었던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sgtn/items/afa1ace4f94120a5c71d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(rails3와 rails4의 속도를 ruby1.9.3과 ruby2.0.0과 ruby2.1.0의 조건으로 비교하면 그다지 차이가 없었던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sgtn/items/afa1ace4f94120a5c71d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)