BlazeBench: Why you want AMF and BlazeDS

Update: I’ve merged BlazeBench and Census into a single demo. There is a known bug in in Firefox 3 due to a change in IFrame handling. To start the test when using FF3 you need to click on the results panel.

Today Adobe released BlazeDS, an open source Java implementation of AMF based remoting and messaging. This is huge news for the Flex, Flash, Adobe AIR and Java communities! I can’t wait to break the news with Bruce Eckel in a few hours at the JavaPolis day 2 Keynote! Check out the press release. And go download the bits. And take a look at my new BlazeBench application which shows why you want AMF and BlazeDS. Right-click on the application to find the source code on SourceForge. I’ll roll out a binary and source build in the next week or so. We have also officially published the AMF spec!

[Please note that my server is probably going pretty taxed for the next few days so the results you see might vary from normal results. When I publish the binary version of this app you will be able to run it locally and see more accurate results. Notice how much time it's taking my server to create those large data packets and gzip them? One more reason that AMF is great! Super fast without the need for gzip!]

blazebench.jpg

This entry was posted in BlazeDS, Flex, Java. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.
  • Jon Rose

    What took so long? No more excuses for not using Flex.

  • Pingback: Jon Rose’s Blog » Blog Archive » Java Developers, Why aren’t you using Flex?()

  • Ivan

    hi

    Great test! why with less data (500 Rows) AMF is not so go ? in this case for chat app that exchange little data there is no a big difference between xml , json and amf.

    what do you think about ?

  • Pingback: MadeInFlex » Blog Archive » BlazeDS:Remoting y Messaging Open source!()

  • http://shigeru-nakagaki.com/ Shigeru

    About BlazeBench application, IE7 hunged up…

  • http://www.qoove.com Alexander Marktl

    Now that’s really good news.
    We are currently using Java/LCDS and Flex/Air for our soon to be released Invoicing application called Qoove. We mainly decided to use LCDS because of its Data Pushing technology (we previously used AMF PHP), though we had concerns about the pricing as soon as we have to scale.

    Hopefully BlazeDS can solve that problem for us (I still need to look at the exact features and restrictions).

    Keep on the good work Adobe guys!
    Alex

  • Pingback: Breaking News: Adobe Announces Open Source Technologies for Enterprise RIAs called BlazeDS « FLEXing My Muscle()

  • Pierre-Yves Saumont

    Seems good. Maybe I could use it instead of Hessian. But for this, It would need to be at least as much practical to use as Hessian a in Spring environment, ie I would need it to be supported by Spring! Using Hessian (or any other protocol) to remote a service in Spring is only one line of configuration. Using Hessian in a flex client application is one line of code. This is much more significant than any performance increase!

  • ebc

    Nice move. Pretty damn sweet.

  • Raj

    How is BlazeDS different from LiveCycle Data Services? Many of the capabilities seem similar.

  • Brian Ehmann

    Wow, this is very, VERY, exciting.

  • http://www.richapps.de Benjamin Dobler

    It was an honour for me to share the stage with you for such an kick ass anouncement!
    Hope you`ll have a save trip home.
    Benz

  • http://alex.dojotoolkit.org Alex Russell

    I’ve gotta say that the use of json.js to “deserialize” the JSON is somewhat misleading. Real-world users almost always just go for eval(“(“+str+”)”) instead of the regex madness in that file. Additionally, the string manipulation you’re using in ajax_json.html is perhaps the slowest possible way it could be done (at least for JScript). Event handlers would also probably be set on the tbody our outside table, mapping back by id or event target to pass in the row to the handler. The tbody is also not explicitly created, slowing down table render. Lastly, column widths aren’t specified in the table, table-rendering: fixed; isn’t used, slowing down the browser render as the layout algorithm walks the size sinks iteratively in order to come up with a reasonable width-in, height-out solution.

    I don’t want to say it’s a rigged test, but it’s certainly not real-world and the code wouldn’t pass muster here at SitePen.

    Regards

  • Xavi Colomer

    Hi James,

    I’m trying to develop a mini ERP and I’m stacked with the database communication. I have the database in a local server and is a SQL Server 2005. What do you recommend to build professional database communication with air projects? Must I “convert” to Java? (Now I’m working with c#)

    Point me to the right direction please

  • Kazuya Komon

    Hi James,
    It’s cool information! thanx!!
    Do you have the bench data which show some information about the performance of BlazeDS’s data publising without RTMP.

  • Solerous

    Why no Mac version? Is one planned soon?

  • Johan Temmerman

    @RAY BlazeDS is a light-version of LCDS, so yeah.. many of the capabilities are similar ;)

    James,
    I’ve heard today, you’ll be joining us in Belgium again during the Pre-Release Tour. Can’t wait to see where AIR is going (has been since beta1 for me to play with).

    See you there!

    –Johan

  • http://riameeting.cn wenzhi li

    Hi! james, the benchtest app has error in debugger:
    ——————————————————-
    R[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 200: url: 'http://www.jamesward.org/blazebench/messagebroker/amf?id=flex_amf3&gzip=true'"]
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::faultHandler()
    at mx.rpc::Responder/fault()
    at mx.rpc::AsyncRequest/fault()
    at mx.messaging::ChannelSet/faultPendingSends()
    at mx.messaging::ChannelSet/channelFaultHandler()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.messaging::Channel/connectFailed()
    at mx.messaging.channels::PollingChannel/connectFailed()
    at mx.messaging.channels::AMFChannel/statusHandler()

  • Pingback: ?????? » Blog Archive » Flex???RPC?????AMF?BlazeDS?GraniteDS()

  • freedn

    what an exciting benchmark!, however, How many bytes and fields of a row in the bench database?

  • Pingback: People Over Process » links for 2008-01-05()

  • http://www.beauscott.com Beau Scott

    Any news of when this will be released under LGPL? We are currently using it in a development version of our application but would love to be able to use it in full production mode asap, however the current prerelease license prohibits that…

    Thanks,

    Beau

  • Roger

    Seems that if you want a quick, small answer, AMF is not the best choice since it is never quicker than 1.0s (at least according to this benchmark). Is that a characteristic of the protocol, an implementation deficiency, or a benchmark artifact?

    It would be very interesting to compare BlazeDS with amfPHP, particularly with the enhanced accelerator DLL.

    My experience suggests that amfPHP can respond faster than 1.0s for small data sets. And it would be interesting to see how it stacked up with larger data sets too.

    Although the ability to handle large data sets is important, many programs depend on small, fast responses to enhance the user experience. For example, “as-you-type” spelling suggestions.

  • http://jacwright.com/ Jacob Wright

    After testing all the options, the largest variant was the server exec time. Since that is largely a function of the libraries used on the server this isn’t an accurate benchmark. I do have a fast machine and a fast internet connection so perhaps on slower machines/connections the parsing and transfer play a bigger role in the total time.

  • Pingback: flash addiction explained » Archives » Flex 3 ??? New Cool Apps, But Why They Are Looking So Old?()

  • Jeremy Norland

    That is such a cool set of benchmarks. Thanks.

    I would love to see how Hessian matches up against these.

  • http://www.ru55e77.com ru55e77

    Has anyone done a comparison between BlazeDS AMF3 and AMFPHP?

    Thanks in advance

  • Umberto21

    Hello.

    I am trying to send BlazeDS data across the network into a flex app (directly into its object).
    I have to code the raw packet in C++ binary.

    I have sniffed a sample object from a java program using BlazeDS and a Flex App (swf).
    I can understand the http headers (of course) but the data itself is difficult to understand.

    It looks like AMF0 format then some bits are AMF3 format. I am not a java expect. I guess I could debug through the code (of BlazeDs) and see, byte by byte how it assembles the response :)

    I was wondering if anyone has done this before..

  • http://www.jamesward.org James Ward

    Hi Umberto21,

    Would reading the AMF spec help?

    http://download.macromedia.com/pub/labs/amf/amf3_spec_121207.pdf

    -James

  • Pingback: LAZIOMATICA - Sviluppo Rich Internet Application » Blog Archive » BlazeDS: Adobe Opensource Data Remoting - Performance Benchmark()

  • Pingback: IT Technology And Something » Flex3 performance prompt()

  • http://bonovox.be Nikolay Botev

    Hi,

    Great tool! Really cool to see all the technologies stacked up against each other in a clean, easy-to-understand visual way.

    How about adding an benchmark of google protocol buffers and javascript for comparison?

    http://code.google.com/p/protobuf/

    http://code.google.com/p/protobuf-js/

    -Nikolay

  • http://danorlando.com Dan Orlando

    This app has consistently provided a measurable way of supporting the argument in favor of AMF and it’s related technologies. James, you’re the man for continuing to mprove upon it. In consideration of your efforts and the usefulness of this tool over the last two years, I am featuring the app in the upcoming book titled “Flex 4 in Action” (Manning Press) that I’m writing with Tariq Ahmed and John C. Bland. In Chapter 15 on Data Service integration, I will be using the application once again as supporting evidence in favor of the Action Message Format for general data communications.

    Kudos to the cowboy for a job well done :-)

  • http://www.jamesward.com James Ward

    Thanks Dan! I’m working on Census v2 right now. It’s going to rock!

    -James

  • Pingback: Flex, Java & BlazeDS « M@ Blog()

  • Stanislav Zayarsky

    James,

    Please add gzip to AMF, it should be there as an option. We used gzip in our project and it did great compression 2 – 5 times. I understand that it will add time for unzipping, but let’s try.

  • http://www.jamesward.com James Ward

    Hi Stanislav,

    GZip is there as an option for AMF and all other tests.

    -James

  • Fost

    Hi !
    What you think about Hessian and AMF (only time serialization ) comparison ?

  • http://www.jamesward.com James Ward
  • Fost

    Thanks, but I have seen this post, but I`m not shure that this test is fair.

  • Jamie

    Hey,

    Really excellent tool! Thanks for sharing..

    Although i’ve had problems comparing the Flex Soap calls.. They return a WSDL retrieve error? Are those services still online?

    Cheers

    • http://www.jamesward.com James Ward

      SOAP is currently broken in this version. Sorry.

  • Pingback: Flex AMFはJSON、XML、HTMLより遥かに速い | Kinopyo's Blog()

  • Reda Bendiar

    AMF sure beats other styles hand down performance-wise. But XML and JSON can be cached client side. With BlazeDS , as far as i know, each request hits the server right ? I am about to start a project and still hesitating about the approch.
    One way would be to separate non-cacheable resources from cacheable ones, and use BlazeDS for the first and plain httprequest for the second category…is there anything wrong with this approach (afa architecture “best practices” are concerned) ?

    • http://www.jamesward.com James Ward

      By default BlazeDS and RemoteObject always use a POST so the AMF response doesn’t get cached. However that default can be overridden. It’s not trivial but the new version of Census that I’m working on does it. Email me if you need more details: jaward at adobe dot com



  • View James Ward's profile on LinkedIn