В недавнем выступлении на Swift London Криса Бейли из команды IBM-Swift был показан интересный график тестов для серверного Swift.
Я был очень удивлен этими результатами, поэтому я провел несколько локальных тестов против последней версии Vapor (0,15), последней версии, ориентированной на производительность (0,11), и Vapor’s Engine (0,4 используется в Vapor 0,15) против Kitura (0,24).
Результаты показывают, что последний релиз Vapor превосходит Kitura, а последний релиз отстает примерно на 5%. Не совсем то 40% -ное преимущество, которое видно на графике IBM-Swift. Более того, Vapor’s Engine, который, возможно, более сопоставим с Kitura, имеет значительное преимущество.
Возможно, тесты IBM находят слабое место в Vapor, но нам трудно узнать об этом, поскольку точная среда и тест не были включены в результаты IBM. Если у кого-то есть подробности о среде и процессе, прокомментируйте, чтобы мы могли улучшить нашу настройку!
Полученные результаты
Как всегда, в этой статье представлены подробные сведения и результаты тестов.
Машина
Пар (0,11)
Gertrude:~ tanner$ wrk -d 10 -t 4 -c 8 http://localhost:8080/plaintext Running 10s test @ http://localhost:8080/plaintext 4 threads and 8 connections Thread Stats Avg Stdev Max +/- Stdev Latency 438.06us 97.97us 5.03ms 84.30% Req/Sec 4.53k 140.02 5.04k 70.79% 182307 requests in 10.10s, 25.91MB read Requests/sec: 18050.53 Transfer/sec: 2.56MB
Пар (0,15)
Gertrude:~ tanner$ wrk -d 10 -t 4 -c 8 http://localhost:8080/plaintext Running 10s test @ http://localhost:8080/plaintext 4 threads and 8 connections Thread Stats Avg Stdev Max +/- Stdev Latency 475.26us 82.59us 3.63ms 88.41% Req/Sec 4.19k 153.49 4.44k 83.91% 168460 requests in 10.10s, 15.90MB read Requests/sec: 16679.73 Transfer/sec: 1.57MB
Паровой двигатель (0,4)
Gertrude:~ tanner$ wrk -d 10 -t 4 -c 8 http://localhost:8080/plaintext Running 10s test @ http://localhost:8080/plaintext 4 threads and 8 connections Thread Stats Avg Stdev Max +/- Stdev Latency 403.89us 103.08us 5.38ms 93.14% Req/Sec 4.94k 246.49 5.19k 90.10% 198474 requests in 10.10s, 9.46MB read Requests/sec: 19651.14 Transfer/sec: 0.94MB
Китура (0,24)
Gertrude:~ tanner$ wrk -d 10 -t 4 -c 8 http://localhost:8090/plaintext Running 10s test @ http://localhost:8090/plaintext 4 threads and 8 connections Thread Stats Avg Stdev Max +/- Stdev Latency 459.65us 205.53us 9.85ms 95.29% Req/Sec 4.32k 675.34 5.33k 61.04% 173126 requests in 10.10s, 23.57MB read Requests/sec: 17141.44 Transfer/sec: 2.33MB
Код
И, конечно же, исходный код.
Пар (0,11)
import Vapor let app = Application() app.get("plaintext") { request in return “Hello, world” } app.globalMiddleware = [] app.start()
Пар (0,15)
import Vapor let drop = Droplet() drop.get("plaintext") { request in return "Hello, world" } drop.globalMiddleware = [] drop.serve()
Паровой двигатель (0,4)
import HTTP final class Responder: HTTP.Responder { func respond(to request: Request) throws -> Response { let body = “Hello World”.makeBody() return Response(body: body) } } let server = try Server< TCPServerStream, Parser<Request>, Serializer<Response> >(port: port) try server.start(responder: Responder()) { error in print(“Got error: \(error)”) }
Китура (0,24)
import Kitura let router = Router() router.get("/plaintext") { request, response, next in response.send("Hello, World!") next() } Kitura.addHTTPServer(onPort: 8090, with: router) Kitura.run()