我目前正在开发一个自动PIE附件的插件
它遍历所有文档CSS样式表,通过indexOf检查CSS3属性,然后调用PIE attach方法,以防它为当前选择器找到任何内容。
主循环如下:
for (var j = 0, length2 = styleSheet.rules.length; j < length2; j++) {
rule = styleSheet.rules[j];
// the replacedProperties is a simple array
// with string values for css properties - border-radius and so on
$.each(replacedProperties, function(index, property) {
if (rule.style.cssText.indexOf(property) !== -1) {
try {
$(rule.selectorText).each(function() {
PIE.attach(this);
});
} catch(e) { }
return false;
}
}
});
}
这实际上非常慢,在IE8和IE7的CSS3页面上运行最多2秒
问题是,我可以以某种方式改善这个循环的性能吗?
PIE.js实际上优化了重复附件,因此检查PIE是否附着将不会做任何事情
$ .fn.detach的标准分离技术遗憾地不适用于PIE(虽然我没有试过香草版)。
我会非常感谢任何答案。
答案 0 :(得分:1)
我建议你阅读文档,特别是关于pie.js:http://css3pie.com/documentation/pie-js/
现在我使用pie.htc
,除了有一些缺点之外,还有更多的优点,所以这是首选的解决方案。
您可以通过声明behaviour(/absolute-path-to-pie.htc);
来定义哪些样式应直接在css中处理 - 它所属的位置。这比迭代所有样式表和样式和然后附加饼更快。您也可以轻松地将其放入条件样式表中。我认为这应该可以解决您的问题 - 无需手动迭代所有样式。
答案 1 :(得分:0)
PIE的忠实粉丝。但是,在性能方面,成本高于人们的想象。最近在怪物PC上开发了一个网站,可以说,运行带有IE8的Windows7和一些用于测试的VM。测试了PIE 1.0和PIE 2.0 beta。虽然在项目的早期,并且只有几十个元素附加了PIE行为,IE似乎在向下滚动,并且在使用jQueryUI效果和动画时。使用馅饼2.0,关闭民意调查,似乎提高了性能,但是首先使用馅饼的目的却失败了......你得到了所需的视觉外观,但没有任何效果。最后,需要考虑客户端的性能成本。 2010年,谷歌报告称,近48%的网络客户使用的IE主要是IE7(winXP)。虽然这些数字已经发生了很大的变化,但有些人根本没有办法升级。所有事情放在一起,通过PIE提供css3内容可能会对客户产生很大的影响...不知道它将如何表现,你的客户在访问你的网站之前可能会三思而后行,因为它根本不表现平稳(我知道我会)。 所以,至少对于这个项目。我正在放弃PIE,并恢复到旧的PNG。到目前为止,包含我需要使用渐变和圆角样式的元素的精灵比PIE小。毫无疑问它会变得更大,但它不像以前那样影响性能。 仅仅是为了记录,我不知道浏览器是如何构建的,也不是我真正关心的,但是男人......他们在IE浏览器上耗费了大量时间。