After an intensive round of cpu profiling for bottlenecks, the GigaPush client (dart_rtc_client (Yea, messy code)) can now push data a bit faster again. On Local network I managed to get it peak at 2.5MB/s. Somewhat steady at 2.3MB/s.
This totally depends on your cpu though, the process of splitting the file to 500ish byte chunks, adding udp headers and converting to string takes some extreme cycles at the moment.
The latest speed up was due to finding an alternative way to convert ByteBuffer to String.
Original code looked like this:
new String.fromCharCodes(new Uint8List.view(buffer));
This worked somewhat well in Dartium, but the dart2js compiled javascript suffered a lot. There was almost an 1MB/s speed difference between Dartium and Chrome.
The new version uses a lookup table for characters, Since all content is Uint8 i just created an static List containing all characters that fit Uint8 and use that.
This change brought Chrome to same speed with Dartium.
Dart team (Emily Fortuna) has been looking at getting WebRTC working on Firefox, big thanks to her, hoping to see results soon. At this very moment at least RTCDataChannel is still not working.
Whats next? The current way of storing the file as Object url is not very cool. So, looking at FileSystem API and perhaps IndexedDB.