关于JavaScript,WebSockets,WebGL的问题

时间:2012-04-06 12:20:23

标签: javascript websocket webgl

我已经看到很多关于其他客户端脚本语言的stackoverflow问题

互联网正在成为一个内容丰富且充满活力的地方。 HTML和CSS规范正试图将Web提升到一个新的水平 - 我们正在获得WebSockets支持,这对于全双工客户端 - 服务器通信非常有用,可以实现一些引人入胜的设计模式。此外,我们在JavaScript中有一个WebGL的工作实现,到目前为止我已经有了很多乐趣。

但这引起了一些担忧,至少对我而言。我是桌面程序员,C / C ++ / Objective-C - 取决于平台。具体来说,是渲染架构师。 JavaScript为我们所有人提供了极好的服务,不是吗?我们使用它来获取与2D 线性网站的基本用户交互,响应简单事件并将所有这些与HTML和CSS相结合。

鉴于实时通信和GPU驱动可视化的大门已经向网络开放,这对JavaScript有什么影响吗?我看到了对Dart和其他尝试的反应推出JavaScript。 JavaScript是弱类型的,它对我来说听起来像是各种各样的警报(考虑到速度很快的数学库,不必要的运行时检查不是一个有趣的时间)。

我已将大量代码转移到GPU,但即使这样,我的内部渲染器也只是CPU限制(HD6990不是问题,更不用说为桌面/嵌入式引擎提供动力的代码了) )。

所以,这是在前面:

  • 由于解释程序的设计,代码裸露。渲染技术和解决方案非常值钱。这是我公司的唯一基础并支付账单。混淆不会削减它(如果我错了,请纠正我)。我一直想知道,为什么没有一个可以由VM处理的字节码形式的中间编译过程?

  • 弱打字。杂耍矩阵,向量,四元数,数组以及高度交互式应用程序常用的所有其他类型的数据只会通过运行时检查进行处理。即使它最终进入GPU方面,你仍然需要在CPU方面做相当多的工作,这会被JavaScript陷入困境。

  • 基于原型的范例将抑制从可以推动采用WebGL / WebSockets的主要参与者移植代码的努力。 (请记住,很多都是由CPU驱动的)。 随着越来越多的用户开始要求高保真的2D / 3D内容,基于原型的范例会持续存在吗?

  • WebSockets已经被证明是网络游戏(BrowserQuest)的一个美丽的新增功能,更不用说动态网站了,并且将来很多人会开发出来以开发出令人敬畏的内容(我的公司正在运行在由WebSockets驱动的3D环境中实现小型MMO的小型封闭项目。

那么,我的担忧是否有任何实际依据?

这些问题是否有新动向?

如果您对该主题提供任何答案,您是否还可以添加一小段个人意见?我知道这不是“Stackexchange的方式”,但它没有害处,因为所有其他问题都是合法的,答案可以基于事实。

3 个答案:

答案 0 :(得分:6)

您的担忧是基于对Javascript运行时间如何工作的误解,而且实际上没有任何依据。

  • 现在所有的Javascript代码都是JIT代码 - 不需要中间字节码语言,并且在可能的情况下可能会阻碍可移植性,这是Web的最大优点。像Python,Ruby,PHP等编程语言这样的现代脚本即使应用程序不是作为字节码分发也能很好地工作。不需要字节码步骤,因为无论如何代码最终都是JIT。您可以为JIT提供更多的材料,更好。事实上,对于Java,它们在现代版本中禁用了字节码优化,因为它使JIT编译器感到困惑。

  • JIT编译可以优化动态类型问题,但它们永远不会提供静态类型的性能,但很可能会提供足够好的性能。虽然http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript存在一些问题,但Javascript实现正在变得更好地解决这些问题。例如,Mozilla Audio团队(似乎更像是演示团队......)正在开发3D演示,只是为了获得优化其Javascript运行时的材料。

  • 我不明白为什么基于原型的方法与高保真度有任何联系,它们是两个完全不同的东西

  • 目前像谷歌NaCL这样的替代方法没有得到其他浏览器供应商的认可,而且很可能永远不会,因为微软和苹果不会采用仅谷歌技术而且Mozilla认为NaCL是开放网络的威胁

有关现代JIT编译工作的见解,请参阅PyPy博客http://morepypy.blogspot.com/(尽管不是特定于Javascript)。他们详细解释了现代计算机科学对代码应用什么样的JIT优化。

对于“类似于网络的设计模式可以在3D中实现”,请参阅tQuery,这是一个类似jQuery的3D内容框架https://github.com/jeromeetienne/tquery

干杯, 米克

答案 1 :(得分:2)

  • Javascript代码裸露:听起来您的问题是关于保护“知识产权”。我认为你高估了编译提供的保护。编译隐藏的算法仅比良好的混淆略好;一个好的反编译器会揭示你试图隐藏的大部分内容。编辑和混淆只能保护您免受好奇心,而不是那些决心窃取您的想法的人。如果您想保护您的代码形式,那就是版权所针对的。我还要指出,网络平台成功的原因之一实际上是“查看源”。对于想要学习如何设计优秀网站和Web应用程序的人来说,它可能是最好的教育工具。它是开源能力的放大(降低了能够查看和修改源的障碍)。

  • Javascript是弱类型的:是的,但是如果您要对大型数据集进行数学运算,那么您将使用固定大小的类型数组并且具有固定类型的元素/大小。此外,类型推断(在Firefox 9中)显着提高了与变量引用相关的性能。

  • Javascript是基于原型的:基于原型的继承比基于标准类的继承更具表现力,并且使用一些糖函数,您可以在Javascript中执行相当标准的基于类的继承:{{3} }

  • WebSockets :我认为您没有问过有关WebSockets的问题。是的,它们是平台的一个很好的补充,特别是协议和API的最新版本,它允许直接发送和接收Typed Arrays和Blob数据。

<强>意见

WebGL和Javascript性能尚未达到可以移植最新的AAA第一人称射击游戏的水平。但是,我可能会建议在不久的将来使用3D游戏赚钱的真钱是休闲网页游戏。这已经在网络上的休闲2D游戏中证明了这一点,而WebGL正在变得越来越普及,以至于成功的休闲3D游戏已经成熟。

此外,如果您对C / C ++ 3D库进行了大量投资,那么您可能会考虑http://www.crockford.com/javascript/inheritance.html这是一个针对Javascript的编译器,并且具有令人惊讶的良好性能。

答案 2 :(得分:1)

我认为这很有趣,尤其是混淆部分。在我6-7年前转向网络之前,我自己在控制台/桌面游戏行业已有很多年了。起初,观点源对我来说很奇怪。但慢慢地,我开始喜欢它并对技术解决方案有不同的看法。

没错,开发高端技术需要花费很多钱,而且也很正确,复制你的想法和解决方案非常容易。在您发布它们的那一刻,您也无法以任何方式对其进行版权保护或保护它们。但这真的是一个问题吗?我认为这是鼓舞人心的话题......

http://www.ted.com/talks/lang/en/johanna_blakley_lessons_from_fashion_s_free_culture.html

...关于它如何在时尚界发挥作用真正指明它 - 为了保持成功,你需要保持警惕并不断发展。无论你发布什么都是完成和历史,现在接下来是什么?

您仍然拥有的优势是您的工具和管道,根据我的经验,它比实际的渲染部分更昂贵和复杂。而且你已经拥有一支经验丰富的团队和游戏,你希望它能够成功地获利。

另外,请注意,我觉得在线体验更多的是社交方面而不是图形,它在很多方面都存在于服务器端,因而受到保护。

期待您的游戏!