cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Grieve <agri...@chromium.org>
Subject Re: Windows Phone binary bridge
Date Thu, 17 Apr 2014 16:56:26 GMT
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 <agrieve@chromium.org> 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)
> <v-segreb@microsoft.com> 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: 'dev@cordova.apache.org'
>> 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: dev@cordova.apache.org
>> 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: iclelland@google.com [mailto:iclelland@google.com] On Behalf Of Ian
>> Clelland
>> Sent: Monday, December 9, 2013 9:06 PM
>> To: dev@cordova.apache.org
>> 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 <mmocny@chromium.org> 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) <
>> > v-segreb@microsoft.com> 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:
>> > panarasi@microsoft.com]
>> > > Sent: Saturday, December 7, 2013 1:52 AM
>> > > To: dev@cordova.apache.org
>> > > 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:purplecabbage@gmail.com]
>> > > Sent: Friday, December 6, 2013 1:30 PM
>> > > To: dev@cordova.apache.org
>> > > 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
>> > > <iclelland@chromium.org
>> > > >wrote:
>> > >
>> > > > On Fri, Dec 6, 2013 at 2:15 PM, Sergey Grebnov (Akvelon) <
>> > > > v-segreb@microsoft.com> 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: iclelland@google.com [mailto:iclelland@google.com] On
>> > > > > Behalf Of
>> > > > Ian
>> > > > > Clelland
>> > > > > Sent: Friday, December 6, 2013 7:37 PM
>> > > > > To: dev@cordova.apache.org
>> > > > > 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
>> > > > >
>> > > >
>> > >
>> >
>
>

Mime
View raw message