C/C++用ECS肯定是要考虑缓存命中率,无非是多用顺序容器。
但是性能有没有提升真不一定,ECS可能会有多余的遍历/查找,甚至哈希查找,你用了hashmap基本和缓存友好说拜拜了(当然控制影响范围情况下可以用)。
组件删除时怎么删除,组件“耦合”怎么处理,都很麻烦。
所以我觉得ECS是理想很丰满,现实并不好用。
我反正只对“可渲染组件”这种需要帧调度处理的组件才考虑用ECS
所有设计模式都有缺点,ECS也算是经过了实践后总结出来的比较好的经验了。
功能或数据切片不好切或者说是有重叠的时候是比较头痛,但其实根据项目实际情况做“不那么理想化”的设计就可以了,这种情况我碰到的不多,很多都是设计的时候没想好导致的。
最重要的是,面试的时候你会ECS妥妥加分项,其它都不重要
嗯嗯 是的
任何设计模式都有优缺点,了解清楚他们的优点和缺点,在立项时根据项目类型选择最合适的
总归是多一种选择
你说的没毛病,没有完美的方案,都要做出一些取舍。
主要是遇到太多那种
“你还在用传统组件呢,快去试试ECS吧。”
“你还在用C++呢,赶紧加入rust的怀抱吧”。
这种神教/狂热很烦人,说的是B站/公众号
有没有案例可以看下呢,每次去学习ecs总是纠结不知如何设计component
总觉得在ts/js 做类ecs系统收益太低。
还好吧,习惯了就好了
后期维护改需求感觉能简单点
删库跑路了 哈哈
干几年开发还能写出耦合一坨的代码那确实没办法了,估计内部没有review没被组长骂过。 
你的帖子已经被社区标记并被临时隐藏。
我用过unity的dots,是这么回事的
cc的ecs感觉就是····幌子
我不太理解缓存命中率和ecs有啥关系,这不应该是内存管理的事吗,ecs难道不应该是设计模式,任何设计模式建立在优秀的内存管理上都可以说提高缓存命中率
esc相当于你模块与模块之间内存连续,模块的子模块之间内存也连续。就好比,你用数组的每个索引访问每个模块和属性,对比直接obj.val速度肯定更快。但是js ts这种脚本语言内存管理由v8管理,你没办法控制内存,意义不大。
cpu访问内存也是有指针跳来跳去的,内存连续肯定速度快,散列对象速度肯定慢
有demo吗?
抱歉,demo最近没时间整理
散了吧。在js上 ecs 在性能方面没特别明显提升的(比起优化渲染性能来说),单位300以下下,每tick查询计算不超过 3,40万,没有特别大提升。还得牺牲项目可读性和开发效率。
ecs和普通面向对象就是 行式数据库和列数数据库的区别。 mysql和clickhouse的查询那真是几个数量级。但是缺点也很明显,不适合频繁更新数据。
