我应该选用HTML5还是Silverlight?个人观点

[原文发表地址] Should I use HTML5 or Silverlight? One man's opinion

[原文发表时间] 2011-05-04 01:25 PM

上周我在比利时和荷兰给社团的人们演示和讲解。当我演示完ASP.NET MVC 3, HTML5和jQuery之后,有人过来问我说:“我应该使用Silverlight还是HTML5。我不理解微软的策略是什么,也不知道在我的程序中该使用那一个。”

自从我从事于Web Platform和Tools 团队 (ASP.NET, IIS等等)以来,我在web上花了大量时间进行相关工作,写相关代码以及相关思考。虽然我不是一名官方策略员,也不是营销人员。但是我的确有一个观点;我个人的观点

那就是,我认为它不是那么难,令人惊讶的是关于它竟有这么多的困惑(在微软外部和内部都有)。公司先有它们的官方定位,然后才有web的实现。这里是这个年轻人问我的问题和我的回答。

注:我只讨论web浏览器中的Silverlight,而不是电话, 游戏,浏览器之外,高信任,和其他独特的Silverlighty环境中的Silverlight。

我应该在我的程序中使用HTML5还是Silverlight?如果你正在使用jQuery,那么Silverlight适用于何处

虽然浏览器如Chrome能非常频繁的发布和更新,但不是每个公司都愿意每周或甚至半年一次地升级他们的浏览器。一些企业会选择Firefox 3.6或IE6(但愿不是)来持续更久。浏览器 插件像Silverlight和Flash能快速地添加功能。它们称为插件有一个原因的。它们插入并添加一些东西。

HTML5没有100%地完成,但是现在它却已经基本可以使用了。你的web应用程序应该使用诸如逐渐增强这样的技术,来检测可用的功能。新的浏览器包括了有用的功能如定位和视频那些过去要安装插件才能有的功能,因此旧的插件就没必要使用了。插件更新换代并添加新的更高级的功能如支持DVR(数字硬盘录像机)的视频和硬件加速3D。这些功能近几年最终会在浏览器中找到自己的出路,并周而复始继续进行。

Silverlight 5将会升级到Silverlight 6,Flash 10将会升级到Flash 11,HTML5将会升级到HTML6。每个新的版本都会添加新功能,创新,并推动其他的向前进。基于这些,web将会被更多地推进。

毫无疑问,高级的媒体应用程序,3d, DVR(数字硬盘录像机)视频场景是Silverlight的亮点。Silverlight可以做一些HTML5不能做到的事件。

如果你正在创建一个需要图片,链接,文本框,动画和互动性的Web应用程序,你没理由不使用HTML。使用新的JavaScript库如Modernizr, jQuery以及Polyfills,你甚至可以使用一些HTML5的功能,它在所有主流的浏览器上仍然具有很好的功能性—不仅仅只是最新出现的浏览器。

如果你的应用程序是内部的或一线的业务应用程序,也就是我称之为基本的"基于数据的文本框"程序,你可以有几个选择。你当然可以使用Silverlight和它的数据绑定功能,或者使用JavaScript库像KnockoutJS,把它写到HTML中。这要根据你和你的公司的核心技术基于什么而定。两者都是不错的选择且两者都不是万能的。

如果Silverlight有一个功能是你需要的,但却不是主流浏览器的一部分,最好考虑使用一个既是HTML/JavaScript也是Silverlight的web应用程序。我一直都很奇怪人们觉得有必要使Silverlight应用程序填满整个浏览器,但是这个Silverlight应用程序绝大部分是由文本,图片,链接等等来组成。我建议,别试图将Silverlight当作HTML来用。插件是Web的附加功能,但它们不是web。以补充的方式使用它们使你获得最好的体验。

若需要基础视频如YouTube,如果你的浏览器支持你所需要的编码解码器的话,那么请使用<video>标记,如果不支持,那就使用插件。但是如果需要实时视频,自适应的流畅的数据流,DVR功能,, H.264,或其他不是HTML5的组成部分的功能,那么还是使用插件吧。

同时也要将你自己的效率和喜好,以及需要使用的工具考虑进去。想想你的用户,开发团队和他们总体的喜好。

用C及C++写的应用程序在游戏及唯一地本地方案中占有一席之地。使用托管语言及XAML的应用程序能均衡开发的简单化和部署的灵活性。使用HTML和JavaScript的程序可以应用在web上的各个地方。也许将来的某一天我们能在所有领域轻松混合和完美匹配这些风格。

到那时,事件就简单了。使用HTML当它适用你的解决方案时。使用插件当它能提供特定功能时。这个过程不断重复。最后形成一种通用的固有常识。