Wednesday, February 8, 2012

Redoing the client in a different programming language

I came to the conclusion that developing the client as a WinJS-only application was a bad idea. The canvas implementation of Metro apps is too slow for what I want to do and I am essentially closing out all people except for the Windows 8 early adopters.

So which programming language to use?


Keeping the client in WinJS:
  • + profit from the Windows 8 early adopters
  • + collect Windows 8 experience
  • - performance is horrible
  • - badly documented API
  • - Testing and development in a VM

 Platforms to dismiss completely: Everything but Windows 8


Client in Javascript:
  • + very accessible, because it requires no plugins and no download
  • + keep much of the existing code
  • + GUI in HTML
  • + users behind proxy servers can play (websocket / AJAX go through HTML)
  • - users behind proxy servers can't be IP-banned efficiently
  • - it's a horrible language for larger applications
  • - annoying differences between browsers
  • - WebSocket is currently disabled or unimplemented in most browsers. Workarounds exist (AJAX long polling), but the performance is unsatisfying.
 Platforms to dismiss completely: only Windows XP with IE8, it would even runs on most smartphones.

Client as Java Applet:
  • + Almost as accessible as JS
  • + Runs on a lot of platforms
  • + share code between client and server
  • + powerful library 
  •  + data exchange via serialized objects is possible (but turned out to be 4x as bandwidth-intense as JSON for some of my test cases)
  • + applet allows integration into browsers
  • - But no communication with the website, because Java DOM isn't supported well enough
  • - Java plugin required
  • - Conspicuous Do-you-trust-this-applet click required unless I do without some crucial features
 Platforms to dismiss completely: Android and iOS

Client in C++:
  • + Very good performance
  • + platform-independent development is possible, but a lot harder than in JS and Java
  •  - development will take longer due to low level stuff I have to deal with
  • - Binary download and installation required

Platforms to dismiss completely: Mac, most Linux distributions (sorry, but I can't create packages for all of them), Android, iOS

No comments:

Post a Comment