super interesting, what device were you testing w/ this?

On Thu, Apr 17, 2014 at 9:56 AM, Andrew Grieve <[email protected]> wrote:

> Finally got to testing this out in Android's bridge. Strangely, it's
> about 50% slower for 5k payloads. I tested this using the exec
> benchmark in mobilespec, and a custom branch I just added to
> cordova-js in case anyone else wants to give it a whirl. The page does
> stay more responsive when doing it async, so we may want to switch to
> this one day anyways, but for now I'm shelving.
>
> On Wed, Dec 18, 2013 at 7:01 AM, Andrew Grieve <[email protected]>
> wrote:
> > Neat! Just played with it in Chrome and FileReader certainly does seem
> > faster.
> >
> > Ian's on a side project this week, but he spent a good amount of time
> > figuring out the fastest way to do this conversion when he added that
> in, so
> > I'm sure he'll have a look.
> >
> >
> > On Wed, Dec 18, 2013 at 6:42 AM, Sergey Grebnov (Akvelon)
> > <[email protected]> wrote:
> >>
> >> Does anyone see this interesting? Any real cases where it could be
> >> important?
> >>
> >> Thx!
> >> Sergey
> >> -----Original Message-----
> >> From: Sergey Grebnov (Akvelon)
> >> Sent: Wednesday, December 11, 2013 8:33 PM
> >> To: '[email protected]'
> >> Subject: RE: Windows Phone binary bridge
> >>
> >> I've just compared ArrayBuffer to string conversion time via currently
> >> used base64 method and via blob reading and the second one runs faster
> (2-4
> >> times on WP8 HTC 8S and 7-10 times faster on iPhone5; don't have Android
> >> device to test).
> >>
> >> So in case browser natively support FileReader and Blob api we may want
> to
> >> use that method.
> >>
> >> Here is test page I use
> >> http://goo.gl/5mpjYu
> >> http://sgrebnov.github.io/tmp/binPerfTest/www/js/index.js
> >>
> >> testBase64Str: function(data) {
> >>          var defer = Q.defer();
> >>         defer.resolve(base64.fromArrayBuffer(data));
> >>
> >>         return defer.promise;
> >>     },
> >>
> >> testBlobReader: function(data) {
> >>         var defer = Q.defer(),
> >>             blob = new Blob([data]),
> >>             reader = new FileReader();
> >>
> >>         reader.onloadend = function(e) {
> >>             defer.resolve(e.target.result);
> >>         }
> >>         reader.readAsText(blob, "UTF-8");
> >>         return defer.promise;
> >>     },
> >>
> >>
> >> Thx!
> >> Sergey
> >> -----Original Message-----
> >> From: Sergey Grebnov (Akvelon)
> >> Sent: Monday, December 9, 2013 9:36 PM
> >> To: [email protected]
> >> Subject: RE: Windows Phone binary bridge
> >>
> >> I see.. I've added similar logic to windows phone exec bridge
> >> https://github.com/apache/cordova-js/pull/59
> >>
> >> Tested on File Api, below  is updated version after patching wp bridge
> >> https://github.com/apache/cordova-plugin-file/pull/18
> >>
> >> PS. As showed at [1] manual array manipulation is not the fastest
> solution
> >> but it is the most convenient synchronous one
> >> [1]
> http://updates.html5rocks.com/2012/06/How-to-convert-ArrayBuffer-to-and-from-String
> >>
> >> Thx!
> >> Sergey
> >> -----Original Message-----
> >> From: [email protected] [mailto:[email protected]] On Behalf Of
> Ian
> >> Clelland
> >> Sent: Monday, December 9, 2013 9:06 PM
> >> To: [email protected]
> >> Subject: Re: Windows Phone binary bridge
> >>
> >> Yes, we used to use that; I had to switch it to use a base64-encoding
> >> method; Using Array.prototype.apply() literally pushes every element of
> the
> >> array individually onto the stack as a separate argument. The exact
> limit
> >> depends on the device, but eventually they all fail with a "Stack
> >> exploded"-sort-of-exception.
> >>
> >> Ian
> >>
> >>
> >> On Mon, Dec 9, 2013 at 10:32 AM, Michal Mocny <[email protected]>
> wrote:
> >>
> >> > Where do you see an implementation using Array.apply(null, new
> >> > Uint8Array(...)) ?
> >> >
> >> > We used to have this bug in ios/android binary bridge but that was
> >> > patched many releases ago (unless there is a stray one somewhere that
> >> > still needs fixing).
> >> >
> >> >
> >> > On Mon, Dec 9, 2013 at 10:15 AM, Sergey Grebnov (Akvelon) <
> >> > [email protected]> wrote:
> >> >
> >> > > Working on this...I just found out that current implementation via
> >> > > Array.apply(null, new Uint8Array(...)) doesn't work for big buffers
> >> > (bigger
> >> > > than 150Kb) and could raise Maximum call stack size exceeded error.
> >> > > So
> >> > I'm
> >> > > looking on better/right way to do typed arrays conversion... will
> >> > > keep
> >> > you
> >> > > updated.
> >> > >
> >> > > Thx!
> >> > > Sergey
> >> > > -----Original Message-----
> >> > > From: Parashuram Narasimhan (MS OPEN TECH) [mailto:
> >> > [email protected]]
> >> > > Sent: Saturday, December 7, 2013 1:52 AM
> >> > > To: [email protected]
> >> > > Subject: RE: Windows Phone binary bridge
> >> > >
> >> > > I think Sergey should be able to squeeze this into his schedule. We
> >> > > were looking at fixing plugin support and this could be a good way
> >> > > to start
> >> > it.
> >> > >
> >> > > -----Original Message-----
> >> > > From: Jesse [mailto:[email protected]]
> >> > > Sent: Friday, December 6, 2013 1:30 PM
> >> > > To: [email protected]
> >> > > Subject: Re: Windows Phone binary bridge
> >> > >
> >> > > FYI, you can buy a no contract Nokia 520 WP8 device for $120, and
> >> > > developing in the emulator is more than sufficient for most tasks.
> >> > >
> >> > > Sergey, do you got this?
> >> > >
> >> > >
> >> > > @purplecabbage
> >> > > risingj.com
> >> > >
> >> > >
> >> > > On Fri, Dec 6, 2013 at 11:21 AM, Ian Clelland
> >> > > <[email protected]
> >> > > >wrote:
> >> > >
> >> > > > On Fri, Dec 6, 2013 at 2:15 PM, Sergey Grebnov (Akvelon) <
> >> > > > [email protected]> wrote:
> >> > > >
> >> > > > > Agree and  like this idea. I don't think there are many other
> >> > > > > components (if any) which use ArrayBuffer but must be tested
> >> > > > > well anyway since this changes core. Ian do you want to complete
> >> > > > > this yourself or you are ok if
> >> > > > I
> >> > > > > handle this?
> >> > > > >
> >> > > >
> >> > > > I'm totally okay with you doing it -- I don't have a real windows
> >> > > > phone device to test it on; I'd be committing with my eyes closed
> >> > > > and hoping for the best :)
> >> > > >
> >> > > > I think you're right that there aren't any other core plugins
> >> > > > using the binary bridge, but that could change, and there are
> >> > > > probably already third-party plugins using it.
> >> > > >
> >> > > > If we do this right, then other developers won't have to roll
> >> > > > their own solution in each case, and it will be easier to port the
> >> > > > third-party plugins to WP.
> >> > > >
> >> > > > Let me know if you need any support; I'll help if I can.
> >> > > >
> >> > > > Ian
> >> > > >
> >> > > >
> >> > > > >
> >> > > > > -Sergey
> >> > > > > -----Original Message-----
> >> > > > > From: [email protected] [mailto:[email protected]] On
> >> > > > > Behalf Of
> >> > > > Ian
> >> > > > > Clelland
> >> > > > > Sent: Friday, December 6, 2013 7:37 PM
> >> > > > > To: [email protected]
> >> > > > > Subject: Windows Phone binary bridge
> >> > > > >
> >> > > > > As far as I can tell from reading its exec.js, WP8 does not have
> >> > > > > a binary bridge of any kind. Non-string data get JSON-serialized
> >> > > > > for
> >> > > transfer.
> >> > > > >
> >> > > > > The recent patch for CB-5532 broke the File plugin by explicitly
> >> > > > > casting ArrayBuffer data to Array type. Sergey's fixed it now,
> >> > > > > but the FileWriter JS code still has special cases for Windows
> >> > > > > and WP8
> >> > > platforms.
> >> > > > >
> >> > > > > Would it make sense to have this code moved into the WP8 exec
> >> > > > > bridge?
> >> > > > Then
> >> > > > > it could apply to any plugins which transfer binary data, and
> >> > > > > any
> >> > > > improved
> >> > > > > transport methods would automatically be used by all plugins,
> >> > > > > rather than being a special case in each plugin.
> >> > > > >
> >> > > > > I don't know much about the Windows phone platform, so I could
> >> > > > > be completely off-base about this, but if it works, I think
> >> > > > > it'll make the implementation cleaner, and generally make
> >> > > > > Cordova better on the
> >> > > > platform.
> >> > > > >
> >> > > > > Ian
> >> > > > >
> >> > > >
> >> > >
> >> >
> >
> >
>

Reply via email to