我正在学习React。
我想创建一个带有基本图块板的游戏(例如http://richard.to/projects/beersweeper/,但是图块可以有两种状态('可用'或'已经点击')。
就速度而言,React看起来很有趣,因为它的虚拟DOM /差异,我只能调整已点击的瓷砖内的css和文字(这样它们在视觉上会有所不同,而不是任何人都没有点击的那些)。
我的目标(以及个人挑战哈哈)是让这个游戏可以通过 1000个同时玩家来玩,他们可以在10万个瓷砖板上点击他们想要的地方。(在客户实时分配瓦片)状态将使用Firebase)
完成我应该使用基本的标准React及其内置功能(onclick事件,ts听众......)还是只有-React才能在100K磁贴上为1000人实时启用许多事件/监听器任何用户都可以点击任何地方(在可用的瓷砖上)?
我应该使用替代/辅助工具和技术,如画布,React Art,GPU加速,webgl,纹理图册......?
答案 0 :(得分:5)
WebGL是正确的答案。使用起来也很复杂。
但是根据瓷砖的大小,React可以工作,但无论你怎么做,你都无法正常渲染100k dom节点。相反,您需要渲染用户可见的瓷砖子集。
要取消这样的东西,你需要有很多优化的代码,而firebase很可能不会达到标准。我推荐基于websockets的二进制协议和有意义的数据库(快速查找多个数字索引范围和订阅)。
最终,我可能会选择:
对于websocket服务器,golang over node.js的唯一原因是CPU性能,这意味着更低的延迟和每台服务器更多的客户端。它们在网络方面的表现大致相同。
你可能会忽略大部分内容,但是要明白,如果你确实遇到了性能问题,那么为这些部分切换一些部分会有所帮助。
做一个处理2个并发用户和1000个磁贴的原型,并从那里开始。按优先顺序排列:
答案 1 :(得分:3)
很多人使用React作为MVC中的V。
我相信react
适用于UI
,但您应该问自己服务器端逻辑是什么,您仍需要考虑M
和C
< / p>
如果您要同时加载1000个用户,则关键字scalable
将成为您的朋友。
另外,您应该查看Node.js
以获取服务器端服务。 Express.js
为快速实施,最后Pomelo.js
为js
游戏服务器实施,基于node.js
关于表现问题.. WebGL
很可能会提升你的表现。在这里,您可以获得有关该主题的精彩教程:https://github.com/alexmackey/IntroToWebGLWithThreeJS
如果您想在没有GL
语言的情况下构建它,您应该深入了解JavaScript
使用动态pseudo-class
创建自己的data bindings
库。否则,您最终可能会使用一小部分强大的框架,这只会降低您的API
。
我会限制使用
canvas
,因为它们适用于model
可视化而非游戏front-end
。结帐d3.js
因为它太棒了,不幸的是性能问题。
在这里,我写了一个很好的小提琴,它创造了100x100矩阵的悬停,并且性能不是很好。您可以轻松调整它以获得100k元素矩阵:https://jsfiddle.net/urahara/zL0fxyn3/2/
编辑:
WebGL
是唯一合理的解决方案。