html中颜色选择的效率.RGB vs hex vs name

Jim*_*nks 14 html css performance

浏览器解析颜色的速度是否有差异?

例如,颜色为红色,我可以使用以下css:

.red
{
    color:red;
    color:#ff0000;
    color:rgb(255,0,0);
}
Run Code Online (Sandbox Code Playgroud)

这些都产生相同的结果,文字颜色为红色,但从效率的角度来看,最好的是什么?

我意识到使用文本"红色"是最低的字符数,并且为了最小化最佳选择的文档大小,是什么应该决定选择?

我问这个问题的唯一原因就是网站上的所有内容都有不同的颜色,所以如果有一个小的变化可以增加几毫秒,那么使用最好的方法可能是值得的.

小智 18

我认为如果你在CSS中使用#rrggbb颜色哈希值,浏览器会更快地渲染页面是安全的.

我制作了一个超级平凡的网页,通过CSS将一个背景和前景颜色放在body元素上,在页面底部有一个JS,在超时时输出第一个渲染时间(不幸的是我使用了performance.timing). msFirstPaint值,所以它只能在IE中工作,但是你可以从中获得要点).我渲染了十次页面并取平均值.然后,我在CSS改变颜色名称("绿","白"),改变了他们的十六进制值(#008000和#FFF),并反复测量.使用名称,页面平均呈现41.6ms ; 使用十六进制值:14.5ms.鉴于测试页面有多简单,只有两种颜色,我觉得这是一个非常显着的差异.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Color name test</title>
    <style>body{background-color:green;color:white;}</style>
</head>
<body>
    <h1 id="foo"></h1>
    <script>
        setTimeout(function ()
        {
            var start = performance.timing.domLoading;
            document.getElementById("foo").innerHtml = 
              performance.timing.msFirstPaint - start;
        }, 1000);
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 我绝对不相信这......直到我跑了.在我的环境中,性能差距甚至更大.请注意,由于某种原因,时间未插入DOM.我添加了一个警告来显示时间.您是否了解其他浏览器中的类似性能计数器?很难想象与转换#rrggbb编码相比,将"绿色"和"白色"转换为表示RGB值的整数需要大约25ms. (4认同)
  • 我非常怀疑使用这个结果做出决定.每个案例的10个测试不足以得出统计上显着的结论,并且首先采用一种方法,然后另一种似乎很容易在实验中引入其他变化.也许当前10个测试时,Windows在后台运行一个征税过程?或者,这个性能指标的标准差可能是200毫秒,而平均值恰好以这种方式出现.我认为需要更多信息才能认为这是一个有效的结论. (3认同)

Eri*_* J. 13

您将无法在任何非平凡的网页上衡量三个选项的任何差异.

与下载,解析和呈现页面的成本相比,下载和解析几个或更少字节的成本很小.

@Vinny提供的性能测量支持.

我问这个问题的唯一原因就是网站上的所有内容都有不同的颜色

如果您可以优化CSS以便不在许多不同的地方指定颜色(尽可能使用继承的属性),这可能会对整体性能产生更大的影响(下载和解析的CSS更少).


Wil*_*ung 7

red 是最容易解析的,但需要在表中查找以获取要使用的实际值.

#ff0000 是下一个最容易解析的,需要3个Text - > Int转换才能获得实际值.

rgb(255,0,0) 是最难解析的,仍然需要3 Text - > Int转换才能获得实际值.

第二个可能是总体上最快的,因为该red方法(可能)需要散列操作(另一个Text - > Int转换,而不是我们通常想到的),然后是查找.另外,red令牌可以比较任意长#ff0000.

我不会评论微观优化方面或它的智慧.

  • 分析并没有真正回答速度是否存在差异的问题. (2认同)
  • “#ff0000 [...] 需要 3 次 Text -&gt; Int 转换”。不,单个 24 位转换就足够了,并将您的数据置于通用的内部格式中。十六进制转换也可以比十进制转换更快,但这取决于微优化的数量。 (2认同)