Data throughput with ExternalInterface
I've started tinkering with Flash and AS3, and I've used the ExternalInterface a lot. For one project the amount of data to be pushed into JavaScript from AS3 was highly variable, could be huge.
I couldn't find a good reference for how much it can handle, so I threw this together. In the end I made it to ~10Mb through at a time in both Firefox and Chrome. No IE testing :-)
The basic idea was to keep requesting large chunks until it broke, then go back and slowly work my way up to the max.
The JavaScript:
function $(e) { return document.getElementById(e); }
var expect = 0;
var interval = 100000;
function callback (bytestring) {
  $('logarea').innerHTML = 'Expect: '+expect+'
';
  $('logarea').innerHTML = 'Got: '+bytestring.length+'
';
  if(expect == bytestring.length) {
    expect += interval;
  }
  else {
    if(interval == 1) {
      $('logarea').innerHTML += 'Final Value:'+bytestring.length+'
';
      return;
    }
    else {
      expect -= interval;
      interval = interval / 10;
      expect += interval;
    }
  }
  if(bytestring.length >= 10000000) { // ~10 Mb
    $('logarea').innerHTML += 'Reached ~10 Mb, I give up.
';
    return;
  }
  setTimeout("$('eiEmbed').expect(expect)", 50);
}The ActionScript:
import flash.external.ExternalInterface;
if(!ExternalInterface.available)
  trace('EI Not Available. What have you done?!');
var returnval:String = '';
var lastexpect:int = 0;
function expect (bytes:int):void {
  var toadd:int = bytes;
  if(bytes < lastexpect)
    returnval = '';
  else
    toadd = bytes - lastexpect;
  for(var i = 0; i < toadd; ++i) {
    returnval += "a";
  }
  lastexpect = bytes;
  ExternalInterface.call('callback', returnval);
}
ExternalInterface.addCallback('expect', expect);