В последнее десятилетие Ruby стал широко используемым языком, в основном из-за его удобочитаемости и динамических функций. Crystal - это относительно новый язык программирования - его первая фиксация датируется сентябрем 2012 г. - он имеет очень интересную предпосылку: синтаксис, подобный Ruby, с преимуществами языка со статической типизацией.
Отказавшись от некоторых динамических функций Ruby, Crystal стремится стать языком, дружественным к программистам и имеющим статическую типизацию, поскольку вам не нужно указывать типы переменных или аргументы методов (в отличие от Java, где это сложно и многословно). по системе типов.
Этот пост предназначен для того, чтобы сделать простую отметку между очень похожими приложениями для сравнения повышения производительности. Пример приложения, которое будет использоваться в этом тесте, будет отображать только «Hello world!» объединены с именем, переданным в URL-адресе.
Рубиновая версия (Синатра)
Версия Ruby использует Sinatra, простой и очень известный веб-фреймворк, почти канонический выбор для таких простых вещей, как эта.
И результат:
> wrk -t12 -c400 -d30s http://localhost:4567/hugo Running 30s test @ http://localhost:4567/hugo 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 144.48ms 72.67ms 1.01s 90.22% Req/Sec 189.67 88.74 343.00 78.26% 20716 requests in 30.10s, 5.94MB read Requests/sec: 688.30 Transfer/sec: 201.98KB
Кристальная версия (Фрэнк)
В версии Crystal используется Frank, клон Sinatra, созданный в качестве доказательства концепции, поэтому код очень близок к тому, что используется в версии Ruby, но требует откровенного текста вместо sinatra и некоторых небольших изменений.
И запускаем тест:
> wrk -t12 -c400 -d30s http://localhost:3000/hugo Running 30s test @ http://localhost:3000/hugo 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 32.71us 90.09us 9.60ms 99.77% Req/Sec 29.95k 3.47k 31.96k 98.68% 906947 requests in 30.07s, 92.55MB read Socket errors: connect 0, read 0, write 0, timeout 1 Requests/sec: 30164.64 Transfer/sec: 3.08MB
С помощью этого теста мы можем увидеть очень значительное улучшение времени отклика. Но есть некоторые моменты, о которых следует помнить. Это не настоящее приложение, это небольшой пример. Более точный тест, например, установит некоторые соединения с базой данных и отобразит страницы с результатом. Однако Фрэнк мог быть почти в 50 раз быстрее Синатры, что должно вызвать некоторый интерес.
Crystal - новый язык, его сообщество все еще растет и развивает экосистему, у него нет такого убийственного приложения, как Rails to Ruby, но за ним нужно следить.