我见过很多关于其他客户端脚本语言的堆栈溢出问题
互联网正在成为一个内容丰富和充满活力的地方。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)的一个漂亮的新成员,更不用说动态网站了,并且将来会有很多人推动开发很棒的内容(我的公司正在运行一个小封闭项目,在WebSockets驱动的3D环境中实现一个小型MMO)。
那么,我的担忧在现实中有什么根据吗?
在这些问题方面是否有任何新的动向?
如果您对该主题提供任何答案,您能否添加一小段个人意见?我知道这不是"Stackexchange的方式",但它没有坏处,因为所有其他问题都是合法的,答案可以基于事实。
你的担忧是基于对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这样的替代方法没有得到其他浏览器供应商的认可,而且很可能永远不会,因为Microsoft和苹果不会采用仅限谷歌的技术,而Mozilla认为NaCL是对开放网络的威胁
。
有关现代 JIT 编译如何工作的见解,请参阅 PyPy 博客 http://morepypy.blogspot.com/(尽管不是特定于 Javascript)。他们非常详细地解释了现代计算机科学在代码上应用了哪种 JIT 优化。
有关"类Web设计模式可以在3D中实现的目标",请参阅tQuery,它是用于3D内容 https://github.com/jeromeetienne/tquery 的类似jQuery的框架
干杯Mikko
-
Javascript代码赤裸裸地撒谎:听起来你的问题是关于保护"知识产权"的。我认为您高估了编译提供的保护。编译隐藏你的算法只比好的混淆好一点;一个好的反编译器无论如何都会揭示你试图隐藏的大部分内容。编译和混淆只能保护你免受好奇的人的伤害,而不是那些决心窃取你的想法的人。如果你想保护你的代码形式,这就是版权的目的。我还要指出,网络平台成功的原因之一实际上是"查看源代码"。对于想要学习如何设计出色的网站和Web应用程序的人来说,这可能是最好的教育工具。它是对开源力量的放大(降低了能够查看和修改源代码的障碍)。
-
Javascript是弱类型:没错,但是如果你要对大型数据集进行数学运算,那么你将使用类型化数组,这些数组的大小是固定的,并且具有固定类型/大小的元素。此外,类型推断(在 Firefox 9 中)显著提高了与变量引用相关的性能。
Javascript是基于原型的:基于原型的继承 比基于标准类的继承更具表现力,并且使用一些糖函数,您可以在Javascript中执行非常标准的基于类的继承:http://www.crockford.com/javascript/inheritance.html
WebSockets:我想你没有问过关于WebSockets的问题。是的,它们是平台的重要补充,尤其是协议和API的最新版本,它允许直接发送和接收类型化数组和Blob数据。
意见:
WebGL和Javascript的性能还没有达到你可以移植最新的AAA第一人称射击游戏的水平。但是,我可能会建议,在不久的将来,3D游戏的真正收入是休闲网页游戏。这已经在网络上的休闲2D游戏中被证明是正确的,WebGL已经变得足够普遍,以至于成功的休闲3D游戏已经成熟。
此外,如果你在C/C++ 3D库方面有大量投资,那么你可以考虑Emscripten,这是一个针对Javascript的编译器,具有惊人的良好性能。
我认为这很有趣,尤其是混淆部分。 在我像 6-7 年前转向网络之前,我自己在控制台/桌面游戏行业工作了很多很多年。起初,视图源对我来说很奇怪。但慢慢地,我开始爱上它,并以不同的方式思考技术解决方案。
诚然,开发高端技术需要花费很多钱,而且确实,复制您的想法和解决方案非常容易。同样,在发布它们的那一刻,您将无法以任何方式对它们进行版权保护或保护。但这真的是一个问题吗?我认为这个鼓舞人心的演讲...
http://www.ted.com/talks/lang/en/johanna_blakley_lessons_from_fashion_s_free_culture.html
。关于它在时尚界的运作方式,真的一针见血——要保持成功,你需要保持警惕并不断发展。无论你提出什么,历史都已完成,现在下一步是什么?
你仍然拥有的优势是你的工具和管线,根据我的经验,这比实际的渲染部分更昂贵和复杂。而且您已经拥有一支经验丰富的团队和游戏,并希望您能够成功地将其货币化。
另外,还有一个旁注,我觉得在线体验更多的是关于社交方面而不是图形,后者在许多方面驻留在服务器端,因此受到保护。
期待您的比赛!