【问题标题】:jquery: speed difference between .css vs append to head?jquery:.css 与追加到头部之间的速度差异?
【发布时间】:2012-08-15 10:12:08
【问题描述】:

对于内部应用程序,我们有一些笨拙的解决方法,我想知道哪种 jQuery/css 技术被认为更快/更有效......等等。

技术 A 使用 .css

$( "#doc" ).css( "margin-top", "90px" );
$( "#checkouthelp" ).css( "margin", "50px 50px 0 0" );

$( "#changelanguage" ).css( "float", "right" )
                      .css( "margin", "0 50px 0 0" );

技术 B .append to head

$("<style>")
    .prop("type", "text/css")
    .html("\
    #doc {\
        margin-top:90px;\
    }\
    #checkouthelp {\
        margin:50px 50px 0 0;\
    }\
    #changelanguage {\
        float:right;\
        margin:0 50px 0 0;\
    }")
  .appendTo("head");

这是开始时规模较小且相对无害的项目之一,但已发展成为一种相当臃肿的解决方法。 链接到异地 css 文件或直接更改 css 规则是否会更快,就像我在这里所做的那样。 速度是关键问题,上面的示例只是不断增长的杂物的一小部分. [值得庆幸的是,正在评估根本原因......但与此同时]。

谢谢!

更新

虽然我没有进行彻底的测试,但在我使用 Chrome 的开发人员工具完成的几次速度测试中,看起来从外部样式表加载规则的速度较慢。将进行更多测试,但我认为我可能无法使用.css。感谢您对这篇文章的回复!

【问题讨论】:

  • 我知道速度是主要问题,但我知道我不想负责维护技术 B。我怀疑它也较慢,但没有任何坚实的基础。跨度>
  • 使用 jQuery 与上面的 2 个示例链接到外部样式表怎么样?速度再次成为主要关注点。谢谢!
  • 您可以使用对象作为参数组合其中的一些.css 调用。 $( "#changelanguage" ).css( { "float": "right", "margin": "0 50px 0 0" } ); 我更喜欢使用外部 css 表,但是我不知道什么会更快。尝试测试它。
  • 要获得有意义的答案,您必须在各种选项上设置一个计时器。同时,我猜想直接操作 DOM(技术 A)会影响其他技术。在我看来,技术 2 必须慢一些,因为有两件事发生在级联中 - 放置一个新样式表,然后对其进行解析等以影响 DOM。类似地,由于与技术 2 相同的原因,获取样式表会更慢,加上 HTTP/web 延迟。
  • @Kevin ~ 谢谢,很高兴知道。

标签: jquery css


【解决方案1】:

非现场 css 是要走的路。使用非现场 css,浏览器只需要发出一个请求,这通常很快。

另一方面,当你修改 css 元素时,浏览器必须重新解析整个 dom 树,这可能更昂贵。

另一个重要的问题是:

在这里,速度真的像您想象的那么重要吗?也许这些解决方案之间的差异是 45 毫秒,这几乎不是您应该关心的。您应该选择一种可以让您更快地编写代码并更好地维护代码的技术,这才是真正节省时间的地方。

【讨论】:

  • 我将测试选定的位置子组并运行一些网络测试。我们遇到的问题之一是网络在提供异地样式表的中心位置确实很糟糕。但也许...
  • 另一个问题是由于其他笨拙的变通方法导致的“千刀万剐”效应。我肯定会测试异地样式表的速度并进行比较。谢谢你的回答!
  • 别忘了浏览器会缓存异地样式表,所以大部分时间你都可以免费获得。您还可以将文件的过期设置为从不,只需在文件需要更改时更改文件的路径
  • ~ 其实我忘记了 --- 也没有想过要设置过期时间。我可以在不直接访问内部应用程序本身的情况下执行此操作吗?我可以拉入一个清单,可以这么说,还是简单地告诉浏览器永久缓存它?
  • 如果不能访问应用程序来设置文件的响应标头,则无法执行此操作。如果你有一个备用的 apache 服务器,你可以代理这些文件并设置你需要的头文件,然后让你的代码使用代理文件。或者如果文件永远不会改变,只需将它们自己托管在上述 apache 服务器上。
【解决方案2】:

我会通过 jQ 添加非语义类。如:'float-right'、'margin-right'。这对维护 imo 来说要干净得多。

【讨论】:

  • 我会记住这一点。我的 css 知识非常初级,所以我很感谢您的建议。
  • 明确一点——这些类已经存在于您的样式表中,您将使用 jQ 添加和删除这些类。我假设你可以修改你的外部 CSS。
  • 我可以添加一个外部工作表,但还不能更改现有的主要工作表。
【解决方案3】:

jQuery 的.css 比将您提供的示例附加到头部要快。我在这里创建了一个测试用例来演示这一点:http://jsperf.com/jquery-css-vs-append-to-head

就异地 CSS 而言,它没有可比性,因为异地 CSS 速度取决于用户的互联网连接以及您的服务器速度等。如果你有一个糟糕的服务器和宽带用户,我说异地更好,否则你只能依靠 javascript 来获得速度。

【讨论】:

  • 这正是问题所在。我必须在 30 个位置运行测试,每个位置都有不同的网络速度/问题。我不知道我可以指望网络速度。谢谢!
猜你喜欢
  • 2015-09-10
  • 2014-07-06
  • 2013-04-03
  • 2021-11-06
  • 2012-05-11
  • 2010-09-20
  • 2010-12-17
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多