【问题标题】:Is it bad for performance/loading to add a dynamic namespacer for your css classes via a component property?通过组件属性为您的 css 类添加动态命名空间对性能/加载是否不利?
【发布时间】:2017-02-26 04:12:58
【问题描述】:

想象一下:

export class MyComponent {

  namespace: string;

  constructor(private globals: Globals) {
    this.namespace = globals.namespace;
  } 
}

然后是这样的模板:

<div class="{{namespace}}-wrapper">
  <h1 class="{{namespace}}-title"></h1>
  <h2 class="{{namespace}}-subtitle"></h2>
</div>

这使您可以完全控制自己的样式,因为没有第 3 方样式(或者很少,因为没有多少具有相同的命名空间和后缀)会干扰您自己的样式,但是性能呢?假设每个模板平均有 20 个这样的绑定,这是否会以某种方式影响性能,让您考虑不使用这种方法?

从技术上讲,它不应该影响性能,因为它只是一次绑定,但是这样做可能会增加加载时间?我还没有找到任何可靠的测试方法,所以我不能确定。

我知道视图封装,但我希望有一种方法能够让我将其关闭,但仍能确保不会出现任何问题。

是否有更好的方法来实现这一点,或者这是一个非常好的方法?

【问题讨论】:

    标签: angular typescript namespaces


    【解决方案1】:

    Angular2 中没有一次性绑定。每次更改检测运行时,都会检查此类绑定中使用的属性是否有更改。

    Angular2 变更检测非常有效,可以使用ChangeDetectionStrategy.OnPush 进一步优化。

    如果每个模板有大约 20 个绑定,这对于整个应用程序来说可能是一个很大的总数,我预计这会损害性能。

    我看不出这会损害加载时间的原因。

    【讨论】:

    • 那你建议我做什么?
    • 使用默认视图封装。我不明白它有什么问题。您还可以使用其他选择器,例如,您在每个组件上只有一个类绑定,而不是在其模板中的每个元素上。
    • 好的,我想另一种解决方案是手动写出来。如果需要更改为 ctrl + shift + f 搜索和替换,虽然这不是一个很好的解决方案,但它就足够了。
    • 这听起来很可怕。我还不知道您要解决的实际问题是什么。你认为为什么会发生冲突?
    • 因为我曾多次遇到我自己的类与 Bootstrap 冲突的情况,所以 bootstrap 中的 modal 类会与我自己的 modal 类发生冲突。因此,通过添加项目前缀,该问题将得到解决。就像我说的,我知道视图封装,但在这个阶段我们不知道它是否会被打开。因此,我希望有一种方法可以在与 3rd 方库发生冲突的风险为零的情况下将其关闭。我知道这听起来可能很奇怪,但不幸的是,这就是我所坚持的。
    猜你喜欢
    • 2012-02-28
    • 2011-07-23
    • 2010-11-14
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2013-09-21
    • 2012-11-24
    相关资源
    最近更新 更多