Microsoft Silverlight rivals Flash, AJAX

Redmond's new rich Internet application boasts strong development tools, a small browser footprint, and cross-platform support

Microsoft's much-touted and much-anticipated RIA (rich Internet application) entry, Silverlight, lets Web developers and designers create "rich, engaging user experiences with 2-D graphics, animation, images, media, and video," to use Microsoft's own description. Silverlight competes in this arena with Adobe Flash and Flex, with OpenLaszlo and Curl, and with a variety of AJAX (Asynchronous JavaScript and XML) frameworks.

As I've written before, RIAs comprise a spectrum of application types and technologies. Silverlight is Microsoft's entry in the middle of the "weight" spectrum. It joins the Microsoft AJAX Library, which falls at the lightweight end, and Microsoft .Net Smart Client applications, which occupy the heavyweight end. Microsoft Silverlight 1.0 incorporates a subset of the .Net Framework and supports JavaScript. Microsoft Silverlight 1.1, currently in alpha tests, incorporates a larger subset of the .Net Framework and supports JIT-compiled C#, Visual Basic .Net, IronPython, and (eventually) IronRuby as well.

Unlike many of Microsoft's other offerings, Silverlight was designed from the ground up to be a cross-platform, cross-browser plug-in. It currently supports Windows and Mac OS using the Internet Explorer, Firefox, and Safari browsers. In the future, it will also support Linux and the Opera browser.

As you might expect from Microsoft, Silverlight is supported by excellent development tools. You don't absolutely need those tools: Silverlight 1.0 is largely straightforward enough that you could develop applications using free HTML and JavaScript editors if you wished, supplemented by a free XAML (Extensible Application Markup Language) editor, such as XAMLPad from the Windows SDK or Charles Petzold's XAML Cruncher. On the other hand, the time savings from using Visual Studio for development and Expression Studio for graphics design and video preparation should more than offset their cost.

The Silverlight 1.0 SDK can install a Silverlight JavaScript Application project template into Visual Studio 2005. For the best development experience, Microsoft recommends using Visual Studio 2008, which includes Silverlight 1.1 C# and VB project templates and is currently in beta test, and a preview version of Expression Blend 2. Setting up the Silverlight 1.0 JavaScript Application project template in Visual Studio 2008 takes some effort, which I discuss in this blog entry.

Silverlight is a browser plug-in and, as such, needs to be launched from an HTML page via JavaScript. The Silverlight runtime can parse and render XAML to the browser, animate XAML elements, and respond to user input and other events. It can also download and display media, and handle "ink" input from a pen, a touchscreen, or a mouse.

The Silverlight 1.0 plug-in provides mechanisms for setting and changing the XAML content to be executed by the runtime; for retrieving objects from the runtime; for manipulation of objects through JavaScript; and for downloading image, text, glyph, audio, and video content incrementally.

I found Silverlight development easy to learn, but I had a head start: I was already familiar with XAML, JavaScript, HTML, and Visual Studio. Expression Blend was new to me, but was similar enough to other graphical design tools that I didn't have to climb much of a learning curve. That said, I'm no graphical designer: I appreciate the division of labor between programmers and designers that is facilitated by having XAML and code-behind files.

The online Silverlight QuickStarts should give most developers enough of a feel for the product to get started with simple projects. Additional reference information on MSDN and in the SDKs helps a bit, but a number of Microsoft Technical Evangelists and bloggers have created videos to make the process even clearer. Some of the videos go further afield, covering useful topics you never expected to hear about from Microsoft, such as integrating Silverlight with PHP and Java, and using SVG (Scalable Vector Graphics) assets in Expression Design.

Silverlight 1.0 performance is adequate as long as you don't do too much work in JavaScript; it's certainly more than adequate for streaming videos (which is done by the runtime) and simple XAML animations. I found Silverlight 1.0 sites to be about as responsive as AJAX, Flash, and Flex sites, but less responsive than Curl sites.

The use of JavaScript in Silverlight 1.0 helps make Silverlight compatible with multiple browsers and operating systems, but it also limits Silverlight's performance. There are two relevant issues. First, JavaScript is an interpreted language that is inherently much slower than native code. Second, when JavaScript is running, the Silverlight plug-in stops drawing. Silverlight 1.0 can be used for simple user interfaces that don't spend much time processing events, but it's not appropriate for creating highly interactive applications, such as games. For that, consider Silverlight 1.1.

Now that Silverlight 1.0 has been released, the Silverlight team is devoting most of its energy to Silverlight 1.1, now in alpha, which has a number of additional features over 1.0. Foremost among these is support for development in C# and Visual Basic .Net, offering a speed boost over JavaScript of roughly 200X, judging by the Bubblemark animation test. The Silverlight Chess demo, however, reveals the computational speedup is close to a factor of 1,000. I wouldn't be surprised if the final computational speed of Silverlight 1.1 applications was comparable to that of Curl applications, and Curl is fast enough to do ray-tracing.

Silverlight 1.1 supports a larger subset of the .Net Framework than Silverlight 1.0, enabling the development of some fairly serious applications, not to mention some fairly cool games. In Silverlight 1.1 you can do networking and communication, process XML, use isolated local storage, upload files, and use compiled dynamic languages such as IronPython.

But Silverlight 1.1 is still a work in progress. In the meantime, should you jump for Silverlight 1.0? If I had a site that could benefit from streaming media and simple animations, and was intended for viewing on Windows and Mac computers, I wouldn't hesitate to use Silverlight 1.0, especially if I had a development staff familiar with Visual Studio and XAML. On the other hand, I wouldn't spend the time and money needed to convert an existing Flash or Flex site to Silverlight 1.0. If performance were an issue, I'd revisit the question when Flex 3 and Silverlight 1.1 are released.

If I had a site that displayed embedded videos from YouTube, I'd have to decide if the additional interactive features I could get from Silverlight made up for the additional bandwidth cost. If my videos fit within the free 4GB hosting restriction of Silverlight Streaming by Windows Live, bandwidth wouldn't be an issue, and I'd strongly consider moving my content.

InfoWorld Scorecard
Value (10.0%)
Performance (15.0%)
Documentation (15.0%)
Capability (30.0%)
Ease of development (30.0%)
Overall Score (100%)
Microsoft Silverlight 1.0 9.0 7.0 9.0 8.0 9.0 8.4

Copyright © 2007 IDG Communications, Inc.