动态插入 <style> 标记时是不是会对性能造成重大影响?

Posted

技术标签:

【中文标题】动态插入 <style> 标记时是不是会对性能造成重大影响?【英文标题】:Is there major performance hit when insert <style> tag dynamically?动态插入 <style> 标记时是否会对性能造成重大影响? 【发布时间】:2021-10-30 13:43:28 【问题描述】:

我所处的环境必须使用 AngularJS/Ng7,而大多数代码仍停留在 Ng1 世界中。由于各种情况,我想暂时覆盖某些角度组件外部的某些样式。所以我想出了一种方法来在我的组件中动态注入一个&lt;style&gt; 标签,它的 CSS 覆盖了父级 html 元素的几个级别。

一切正常,我没有观察到任何页面闪烁、重新加载、滞后或副作用……但我担心我看不到的东西并不意味着没有影响。

我想知道,以这种方式注入 &lt;style&gt; 标记,然后在组件被销毁时将其与组件一起删除,是否会产生我不知道的任何性能影响和潜在副作用?

  constructor(
    private elRef: ElementRef,
    private renderer2: Renderer2
  ) 
        const style = this.renderer2.createElement('style') as HTMLStyleElement;
    style.innerHTML = `
      #main .helloworld 
        background-color: rebeccapurple !important;
      
    `;

    (this.elRef.nativeElement as HTMLElement).append(style);
  

上面在运行时会生成类似这样的东西:

<my-component>
  <style>
      #main .helloworld 
        background-color: rebeccapurple !important;
      
  </style>
  <div>...stuff</div>
</my-component>

【问题讨论】:

&lt;style&gt; 属于head-element。在body 中,它将是一个无效的HTML 标记,由于scope 属性的弃用,它不会传递任何Markup Validator。因此,style tag 首先不应与body 一起使用。 我不是在问我是否可以在正文中添加&lt;style&gt;。如果我生活在一个完美的世界中,我会完全摆脱 Ng1 并自己解决所有问题。关键是我不能,我必须解决这个问题。 它应该是因为它只有在浏览器自动更正确实支持它的情况下才有效。如果浏览器放弃了该功能,或者用户使用的 enw 浏览器一开始就没有添加此功能,那么样式将被弄乱,因为无效标记未被读取,因此根本不应用。因此,当通过正文中的 stle 标签注入样式时,可能会出现 ovios 的不利影响。 【参考方案1】:

只要

【讨论】:

以上是关于动态插入 <style> 标记时是不是会对性能造成重大影响?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 Jquery 在动态表中插入结束 </tr> 标记和开始 <tr> 标记吗?

当id与输入框名称扩展名id匹配时,如何在单列中将动态输入框值插入表中

jquery动态插入行

动态插入的 <script> 标签是不是有效?

从动态插入的标签编译指令

Android 动态创建View,是不是可以使用 style,如何使用?