【发布时间】:2012-01-20 07:22:16
【问题描述】:
使用三千个样式定义是非常不寻常的:是否有可能一些不起眼的移动设备可能会抱怨?
详情: 我正在创建一个可以在尽可能多的浏览器上运行的游戏,所以这意味着不使用画布。我尝试通过更改样式变量来为角色设置动画,但这会导致过多的重排。接下来我尝试一次性更改 DOM 节点“innerHTML”,后来又尝试了 replacechild 和 documentfragment。大多数浏览器都很好,但是 Internet Explorer 不能长时间与 DOM 节点混在一起而不泄漏内存(即使 IE9 泄漏很慢)。修复一次内存泄漏的每一次尝试都只会在其他地方造成另一次泄漏。我最终改用 css,每个像素位置都有一个单独的类。例如
class="Height123 Width456 Left789 Top0";
即使在 IE8 上也能快速运行,因为它只需要一次回流,并且没有内存泄漏。它在我尝试过的每个桌面浏览器上都能完美运行,但它需要大约三千个类。 (我不能使用任何 CSS3 快捷方式,因为 IE8 只支持 CSS2)。这让我对较小的设备感到紧张。我并不拥有所有可能的手持设备,所以我想知道是否有人知道它们会限制 css 样式?
【问题讨论】:
-
如果您还没有这样做,您至少可以缩小名称:class="H123 W456 L789 T0"。将类限制为实际设备大小也会有所帮助。你的解决方案让我莫名其妙。
-
谢谢。正如我所说,这不是我的第一个解决方案,但它似乎是唯一可行的解决方案。是的,我已经缩小了样式表并且只使用了实际出现的值。但是我使用的是 CSS sprite,它需要负数来抵消,所以很难得到远低于 3000 的数字。
-
你是直接使用JS还是使用jQuery之类的库?您是否有导致内存泄漏的代码示例? - 你的泄密证据是什么?仅仅因为内存使用量上升,并不意味着它以后不会下降
-
JS 直接。抱歉,我手头没有代码 - 我在朋友的电脑上。我反复使用“replacechild”来更改 div 中 img 的属性。泄露的证据:它在 Chrome、Firefox 和 Opera 中表现良好,但在 IE8 上,内存使用量从 200 MB 攀升至 1.3 gig,计算机死机了。许多网站报告说 IE6、7 和 8 在更新 DOM 时没有正确释放内存。 IE9 做同样的事情,但要慢得多。我尝试了 Douglas Crockford 的“清除”代码,但没有任何区别。我阅读了几篇文章,指出修复一件事通常会导致其他地方出现问题。
标签: css styles css-sprites max