Relevanz für mich •Viele Jahre als Backend-Entwickler gearbeitet •Weiterhin interessiert beobachtet •Projekte in Python / Scala / Clojure / Go / Lua / PHP entwickelt •Mehrere aktive App-Backends in verschiedenen Sprachen
3. Swift •Swift ist eine angenehme Sprache •Schneller als Ruby oder Python •Benötigt weniger Speicher auf dem Server •Starke Typisierung = Weniger Laufzeit-Fehler •Moderne Sprach-Features
Erster Eindruck •Die großen Frameworks haben zusammengenommen ~20.000 Github Sterne •Ruby on Rails hat ~31.000 •= Interesse an Swift auf dem Server generell vorhanden
Feature-Differenzen •Nicht alle relevanten Features sind implementiert •Unterschiedliche Frameworks, unterschiedliche Prioritäten •Einiges ist nur teilweise Implementiert •Alle Swift Frameworks sind noch recht jung •Status Quo ändert sich wöchentlich
User Authentifizierung •Einen User einloggen, ausloggen, ablegen und abrufen •Registrierung via Email oder oAuth (GitHub, Facebook, Twitter, etc) •Perfect, Vapor
Notizen •Alle Frameworks nutzen den Swift Package Manager •Vapor, Kitura & Zewo basieren auf OpenSwift •Standardisierte Sammlung von Protokollen •Requests, Responses, Middleware, und Objekte lassen sich austauschen
Benchmarks sind schwierig •Es gibt schon einige Swift Web Framework Benchmarks, jedoch •Teilweise unter macOS getestet •Teilweise nur wenige Alternativen verglichen •Teilweise in den Alternativen wenig optimierten Code geschrieben •Teilweise mit Beta-Versionen der Frameworks getestet •Irgendjemand ist immer mit einem Benchmark unzufrieden
Tech Empower Benchmark •Vergleicht ~162 Frameworks •Verschiedene Sprachen, Frameworks, Implementierungen •Hoch-optimiert. Oft schreiben die Framework-Entwickler selbst den Code •Genaue Regeln, verschiedene Szenarien •www.techempower.com/benchmarks
•Ich habe einige der Tech Empower Tests in den Swift Frameworks implementiert •Keine Datenbank- und JSON-Tests •Anschliessend die Performance gegen die anderen Tech Empower Frameworks getestet •Auf DigitalOcean $5 Maschine (Tech Empower nutzt ein 40 Core 32GB Ram Monster)
Einschränkungen •Swift / Linux ist noch recht neu. Swift ist noch eher für macOS optimiert •Alle Swift Web Frameworks befinden sich noch in der Entwicklung •Erst einmal Feature-Parität herstellen bevor optimiert wird
Fazit •Go & Java sind jahrelang für den Linux & Server-Betrieb optimiert worden •Im Vergleich zu Ruby, Python, Javascript, Clojure, etc ist Swift jedoch schon die schnellere Alternative
Fazit •Swift verbraucht deutlich weniger Speicher als Ruby, Python, Django, JVM (Java, Scala, Kotlin, Clojure, etc) •Aber, Go, Rust, Lua sind ebenfalls extrem sparsam
extension User: Auth.User { static func authenticate(credentials: Credentials) throws -> Auth.User { // do a query to see if the user exists throw Abort.notFound } static func register(credentials: Credentials) throws -> Auth.User { // register a new user throw Abort.notFound } }
extension User: Auth.User { static func authenticate(credentials: Credentials) throws -> Auth.User { // do a query to see if the user exists throw Abort.notFound } static func register(credentials: Credentials) throws -> Auth.User { // register a new user throw Abort.notFound } }
drop.get("chunked") { request in return Response() { stream in try stream.send("Counting:") for i in 1 ..< 10{ sleep(1) try stream.send(i) } try stream.close() } }
/// A Question as it appears to the user public struct Question { public let identifier: Identifier public let category: Category public let question: String public let points: Points }
Allgemein • Swift am Server ist jung aber aufregend • Sowohl Swift 3 als auch die Frameworks änderten sich wöchentlich • Die Frameworks als auch Swift werden sich auch weiterhin noch oft ändern • Fehlende Dokumentation • SourceKit stürzt noch öfters ab als in der iOS/macOS Entwicklung
Sollte man Swift / Server wählen? • Nicht einfach. Abhängig von: • Wieviel Frontend-Code die Anwendung hat • Wieviele Sprachen die Teamkollegen schon beherrschen • Wieviel Code vermutlich geteilt werden kann • Wie gern man Swift mag • Auf jeden Fall werdet Ihr refactoren müssen
Welches Framework • Perfect ist schneller • Vapor bietet mehr features, angenehmere API • Für funktionsreduzierte, reine REST-Server ist Perfect vielleicht die bessere Wahl. • Wenn man in Zukunft mehr features erwartet: Ansonsten Vapor • Aktive Entwicklung, in 1-2 Jahren mag Kitura besser sein
Build Times • Python, Ruby, Scala, Java, Javascript, use instant compile & reload • Swift 3 / Frameworks • Initial etwa 1 Minute • Incremental etwa 1 Sekunde bei kleinen Projekten • Dafür könntet ihr Linux installieren und endlich schnelle Hardware kaufen
Notizen • Keine UIKit / AppKit Abhängigkeiten heisst das man stärker Generics, Value Types & Protokolle verwenden kann • Unbedingt unter Linux testen. Foundation unterscheidet sich noch stark auf den beiden Plattformen • Die von den Web Frameworks gebotenen Abstraktionen wählen. Diese sind bereits plattformunabhängig. • Vapor hat einen ausgezeichneten, sehr lesbaren, Source-Code
Dokumentation Finden • Github nach Beispiel-Projekten durchforsten (diese sind jedoch oft veraltet) • Unit-Tests lesen • Pull-Requests für Features anschauen. Diese enthalten oft Beispiele • Den Source-Code lesen
IDE / Editor Support • macOS • Xcode • Atom / Sublime / Emacs / Vim mit SourceKittenDaemon • Nuclide • Linux • SourceKit-Support is coming • Swift kompilieren & libide-test
Tips • Swiftenv verwenden • Die WWDC2016 Performance-Videos zu Swift schauen • Docker für Linux-Tests • Ich glaube Server-Swift hat viel Potential, aber die wesentlichen Features fehlen noch, Zeithorizont in 1-2 Jahren