有关JavaScript、WebSockets和WebGL的问题

6

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

互联网正在变得非常丰富和动态。 HTML和CSS规范试图将Web带入下一个级别-我们正在获得WebSockets支持,这对于全双工客户端-服务器通信非常好,可以使一些迷人的设计模式出现。此外,我们有JavaScript中实现WebGL的工作实现,我迄今为止已经玩得很开心。

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

考虑到实时通信和GPU驱动的可视化已经向Web敞开大门,这会对JavaScript产生任何影响吗?我已经看到了对Dart和其他试图推动JavaScript的反应。 JavaScript是弱类型的,这对我来说听起来就像所有警报(考虑到挂在速度上的强大数学库,不必要的运行时检查不是一段有趣的时间)。

我已经将大量代码转移到GPU上,但即使如此,我的内部渲染器仍然只是CPU限制(HD6990不能成为问题,更不用说驱动桌面/嵌入式引擎的代码了)。

因此,在这里它在前面:

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

  • 它是弱类型的。处理高度交互应用程序常见的矩阵、向量、四元数、数组和所有其他数据只会使处理过程膨胀,并带有运行时检查。即使最终进入GPU端,您仍然需要在CPU端执行相当数量的工作,而JavaScript则被拖累。

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

  • WebSockets已被证明是Web游戏(BrowserQuest)的美丽新补充,更不用说动态网站了,并且将在未来由许多人推动开发出色的内容(我的公司正在运行一个小的封闭项目,该项目实现了一个小型MMO在由WebSockets驱动的3D环境中)。

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

这些问题是否有任何新的进展?

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


这些是有趣的问题。不过,它们似乎不适合在StackOverflow上提问。虽然它们看起来非常适合写博客文章或在Google+上进行讨论。 - Jamison Dance
3个回答

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运行时。

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

  • 目前像Google NaCL这样的替代方法没有得到其他浏览器供应商的认可,很可能永远不会得到认可,因为微软和苹果不会采用仅适用于Google的技术,而Mozilla则认为NaCL对开放Web构成威胁。

想了解现代JIT编译器的工作原理,请参阅PyPy博客http://morepypy.blogspot.com/(虽然不是针对JavaScript的)。他们详细介绍了现代计算机科学在代码上应用的JIT优化类型。

想了解“Web式设计模式在3D中可以实现什么”,请参阅tQuery,它是一个类似于jQuery的3D内容框架https://github.com/jeromeetienne/tquery

谢谢, Mikko


1
你的客户端代码从未受到保护,因此可以随时被反汇编等。因此,Javascript 开发者倾向于将“混淆”称为“缩小”,以消除带宽开销 :) - Mikko Ohtamaa
相关回答(几分钟前)http://stackoverflow.com/questions/9794182/how-to-protect-js-from-custom-events/10043479#10043479 - Mikko Ohtamaa
1
如果你想从头开始构建一个庞大的代码库,我建议你检查一下CoffeeScript或Google Dash。前者提供了更好的语法和一些高级构造,JavaScript缺少(如类),Dash提供了静态类型。两者都可以编译成JavaScript。由于额外的编译步骤,两者在当前浏览器中的调试支持都有点欠缺。 - Mikko Ohtamaa
1
至于我所知,我还没有被英国女王封为爵士 :) - Mikko Ohtamaa
谢谢提供链接,我希望我能给你+2 ;) - Ashley Davis
显示剩余2条评论

2
  • Javascript代码是裸奔的:看起来您的问题是关于保护“知识产权”的。我认为您高估了编译所提供的保护。编译只比良好的混淆稍微隐藏了您的算法;一个好的反编译器将揭示大部分您试图隐藏的内容。编译和混淆只能保护您免受好奇心的侵害,而不能保护您免受那些决心窃取您想法的人的侵害。如果您想要保护代码的形式,那就需要版权。我还要指出,Web平台成功的一个非常重要原因是“查看源代码”。这可能是想学习如何设计优秀的网站和Web应用程序的最佳教育工具。它是开源力量的放大(降低了查看和修改源代码的门槛)。

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

  • Javascript基于原型:基于原型的继承比标准的基于类的继承更加表达丰富,而且使用一些糖函数,您可以在Javascript中进行相当标准的基于类的继承:http://www.crockford.com/javascript/inheritance.html

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

观点

WebGL和Javascript性能还没有达到您可以移植最新的AAA第一人称射击游戏的水平。然而,我可能会建议,在不久的将来,通过休闲网络游戏可以获得真正的利润。这已经在网络上的休闲2D游戏中被证明是正确的,而且WebGL已经变得越来越普遍,因此非常适合成功的休闲3D游戏。

此外,如果您在C/C++ 3D库中有大量投资,那么您可以考虑Emscripten,它是一个针对Javascript的编译器,并具有出人意料的良好性能。


另一个好的答案,虽然我基本上同意源代码应该对每个人都可用,但有些东西是专有的且具有很大的价值。版权是很好的,但把复杂的专有解决方案置之不理对我们来说并不好。虽然我们打算在它们的时间过去时将旧引擎作为开源发布,但目前所有优化都已经就位,包括巧妙的遮挡剔除、甚至是实时辐射度渲染器,它可以在预处理中简化几何形状,并在后续使用合理的光线跟踪来解决微妙的全局光照效果,如颜色渗透... - user1309389
感谢Emscripten,但我有一个个人规则,只有在为开源社区开发时才使用开源软件。取和给予。平方取不是我想要做的事情。但这给了我一些从新角度处理它的想法。无论如何,非常感谢!对我来说唯一完全免费的东西就是知识。在这方面,我有几篇论文正在路上,将阐明我们引擎的思想,但实际上不会免费分发,这是可以理解的。 - user1309389
如果这对你很重要,考虑到你的背景,开发一个强大、复杂和高效的Javascript混淆器应该很容易。想一想jslinux。这是一个在Javascript中执行编译代码(Linux内核)的x86模拟器。显然,你不想模拟你的真实代码,但重点是你可以将你的Javascript代码混淆到任何有用的程度。但这将是混淆和加载速度之间某种程度的权衡。 - kanaka
没错,一切都是权衡取舍。我们确实有一些可行的技术,但它们需要完善。我想这就是前进的方式。感谢您提供的所有意见!周末即将到来,会有时间去研究这些方法。唯一重要的是不要影响性能。它已经够紧张了。 - user1309389
@kanaka - 一个在JavaScript中的X86模拟器。我印象深刻。 - Peter Stephens
显示剩余4条评论

1

我认为这非常有趣,尤其是混淆部分。在转向网络开发之前,我自己在控制台/桌面游戏行业工作了很多年。起初,查看源代码对我来说非常奇怪。但慢慢地,我开始喜欢它,并以不同的方式思考技术解决方案。

确实,开发高端技术需要花费大量资金,而且很容易复制你的想法和解决方案。同样真实的是,一旦你发布它们,你将无法以任何方式版权或保护它们。但这真的是个问题吗?我认为这场鼓舞人心的演讲...

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

...关于时尚行业的运作方式真正抓住了要点——要保持成功,你需要保持警觉并不断发展。无论你发布什么,都已经成为历史,现在要考虑下一步。

你仍然拥有的优势是你的工具和流程,根据我的经验,这比实际的渲染部分更昂贵和复杂。而且你已经拥有一个经验丰富的团队和正在运行的游戏,希望你能成功地将其货币化。

此外,一个小提示,我认为在线体验更多的是社交方面,而不是图形方面,这在很多方面都是服务器端的,因此受到保护。

期待你的游戏!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接