4

我们正在开发一个将出售给许多客户的网络应用程序。已经有一个客户(一家银行)决定一旦产品准备好就购买。不幸的是,由于一些沟通不畅,他们使用的唯一浏览器是 IE6。该应用程序在启动时已经考虑到它不需要支持 IE7 以下的任何其他内容。结果也相当不错——它在 IE7/FF/Opera/Safari 上完全可用。尚未在 Chrome 上进行测试,但预计会有小问题。不幸的是,毕竟现在有 IE6 的要求......

该应用程序还没有开发太远,设计也还不错,所以变化不是那么可怕。不过,这需要一些工作。

IE6 的一个优点是它支持两个非标准且非常有用的功能。首先是条件注释,它允许我包含一些仅适用于 IE6 的 CSS/JS 文件。其次是CSS表达式。也就是说,像这样的事情:

input
{
    background-color: expression(this.type='text'?'silver':'');
}

本质上,它将 CSS 值绑定到 JavaScript 表达式。这可以轻松模拟 IE6 本身不支持的许多 CSS 功能,并且可以大大减轻我的负担。

不幸的是,IE 因其 JavaScript 性能而臭名昭著。我担心使用太多这些表达式可能会减慢速度。我也不知道银行用的是什么电脑。由于这是一个相当大的一个,我希望他们所有的分支机构都有各种各样的。我不希望在那里使用任何东西——一些简单的数学、三元运算符和查看这个元素/父元素的属性。在 IE6_override.CSS 文件中仍然会有几十个。

这会是个问题吗?

补充:废话,这就是我害怕的。好的,看看我可以使用多少其他技巧来解决这些缺点。谢谢,人们!

4

8 回答 8

10

https://developer.yahoo.com/blogs/ydn/high-performance-sites-rule-7-avoid-css-expressions-7202.html

原来你可能想避免使用这些,它们很危险。

于 2009-02-05T15:58:11.767 回答
5

在许多页面事件上重新评估表达式,如果使用过于宽松,可能会降低整个页面的性能。(然而,他们仍然无法对可能导致他们需要重新评估的所有事件做出反应。)

MS 承认 expression() 是一个错误,并将从未来的浏览器中删除它

对于 IE6 的各种 CSS 缺点,通常有更好的个别 JavaScript 解决方法。

如此多的公司仍然坚持使用可怕的 IE6,这是相当可悲的。也许如果您延迟交付项目,他们到那时就会升级!

于 2009-02-05T16:10:35.733 回答
4

可以使 IE 表达式以最佳方式执行,不仅可以避免连续重新评估之类的事情,还可以将所需的样式与 IE 特定的类名挂钩,从而使 IE 特定的 CSS 更易于维护(因为表达式本身就是恶心):

input
{
    1:expression(this.executedExpressions ? void 0 : this.className += (this.type == 'text' ? ' ie-text' : ''));
    2:expression(this.executedExpressions = true);
}

input.ie-text
{
    background-color:silver;
}

如果您要使用 IE 表达式,这是最好的方法。(我真的应该写一篇关于它的详尽文章)。

于 2009-11-19T09:35:07.657 回答
2

不幸的是,CSS 表达式在性能方面非常糟糕,因为结果是不断计算的,在页面加载时一直在计算,而不仅仅是在页面第一次加载时。如果您必须使用表达式,那么您最好使用带有 onLoad 事件的标准 JavaScript。

有关更多信息,请参阅本文:http ://www.robertnyman.com/2007/11/13/stop-using-poor-performance-css-expressions-use-javascript-instead/

于 2009-02-05T16:00:05.147 回答
2

我建议你切换到任何支持 CSS 选择器的 JS 框架,这样你就可以模拟 CSS 表达式的行为

如果您在 IE6 上打开此 URL,您可以测试 JS 框架的性能

http://slicktest.perrohunter.com

干杯

于 2009-02-05T16:51:29.380 回答
1

是的,IE 时期的表达真的很慢。想办法避免它们。

于 2009-02-05T15:59:45.863 回答
1

我自己没有尝试过,但IE7-js看起来很有希望。它声称使 IE6 与 IE7 兼容

编辑:顺便说一下,要为 IE6 添加一些样式,您也可以使用

<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="screen"  href="ie6styles.css" />
<![endif]-->

并且您始终可以使用 jquery 在包括 IE6 在内的所有浏览器中动态设置 css 属性。

于 2009-02-05T16:48:21.710 回答
0

如果您必须使用它们,在一次性执行 IE CSS 表达式中找到的技术将有助于解决性能(但不是安全)问题。

于 2010-08-18T22:25:17.977 回答