美文网首页
Angular inlineCriticalCss 和内部函数

Angular inlineCriticalCss 和内部函数

作者: 华山令狐冲 | 来源:发表于2023-10-14 09:09 被阅读0次

有一个客户启用了 Angular Server Side Rendering,并且启用了 inlineCriticalCss,后来发现在 Dynatrace 的 hotspot 里的 vendor.js 文件有个名叫 walkStyleRules 的函数,耗时比较多。如下图所示:

Angular 服务器端渲染(Server Side Rendering)

Angular的服务器端渲染是一种技术,允许在服务器上预渲染Angular应用的部分或全部内容,然后将其发送到客户端。这有助于改善首次加载性能,特别是对于搜索引擎爬虫和缓慢的网络连接。SSR生成HTML内容,使其在浏览器加载JavaScript之前就可用,从而提高了页面渲染速度。

inlineCriticalCss 选项

inlineCriticalCss是Angular中的一个配置选项,它允许将关键的CSS样式直接嵌入到HTML文档中。这些样式是在首次加载时必需的,以避免首次渲染时出现页面内容的不正确样式(闪烁问题)。通过将关键样式嵌入HTML,可以减少浏览器需要请求的外部CSS文件的数量,从而提高加载性能。

walkStyleRules 函数

现在,让我们来详细了解walkStyleRules函数以及它在vendor.js中的作用。

walkStyleRules函数是Angular的内部函数,它主要用于处理嵌入的关键CSS样式。具体而言,它的作用如下:

  1. 分析CSS规则walkStyleRules函数会遍历解析嵌入的CSS规则。这些规则定义了在首次加载时应用于页面的样式。

  2. 应用样式:一旦分析了CSS规则,walkStyleRules函数会根据这些规则将相应的样式应用到HTML文档的元素上。这确保了页面在首次加载时具有正确的样式,而不会出现页面内容的不正确渲染。

  3. 优化样式处理walkStyleRules函数经过优化,以尽量减少处理时间和资源消耗。在SSR过程中,性能优化尤为重要,因为服务器需要在短时间内处理多个请求。

例子

为了更好地理解walkStyleRules函数的作用,让我们考虑一个示例:

假设您的Angular应用包含以下HTML和CSS代码:

<!DOCTYPE html>
<html>
<head>
  <style>
    /* 嵌入的关键CSS规则 */
    .important-style {
      font-weight: bold;
      color: red;
    }
  </style>
</head>
<body>
  <div class="important-style">这是一个重要的文本</div>
</body>
</html>

在这个示例中,walkStyleRules函数将会:

  • 遍历<style>标签中的CSS规则。
  • 分析.important-style规则,了解它设置了font-weightcolor属性。
  • 将这些样式应用到页面中具有important-style类的元素,例如<div class="important-style">

这样,当页面在浏览器中首次渲染时,文本将以粗体和红色显示,而不需要等待外部CSS文件的加载。

Dynatrace 中的 Hotspot

您提到Dynatrace中的Hotspot,指出walkStyleRules函数的耗时比较多。在性能分析工具中,Hotspot通常表示在某个函数中花费了大量时间的地方。如果walkStyleRules函数出现在Hotspot中,这可能意味着它在服务器端渲染过程中成为性能瓶颈。

为了解决这个问题,可以考虑以下几种方法:

  1. 优化CSS规则:检查嵌入的CSS规则,确保它们没有不必要的复杂性或冗余。简化CSS规则可以降低walkStyleRules函数的处理时间。

  2. 使用CDN或缓存:如果CSS样式是外部引用的,确保它们在CDN上托管,并启用浏览器缓存,以减少对CSS文件的请求次数。

  3. 升级服务器性能:如果walkStyleRules函数的耗时问题仍然存在,考虑升级服务器硬件或使用负载均衡来分散请求,以提高性能。

  4. 查看Angular版本:确保您正在使用最新版本的Angular,因为每个新版本通常都会包含性能改进。

综上所述,walkStyleRules函数在Angular的SSR中起着关键作用,用于处理嵌入的关键CSS规则以确保首次加载时的正确渲染。如果它在性能分析中成为Hotspot,需要通过优化CSS规则和服务器性能来解决性能问题。这样可以确保Angular应用在SSR时具有出色的性能和用户体验。

相关文章

  • tab组件开发过程中的一些坑和收获

    具体交互参考ant.design. 首先是关于angular的指令指令内部的初始化顺序: controller函数...

  • 内部函数和外部函数

    函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数只能被本文件调用,而不能被其他文件调用。根...

  • 利用angular自带工具函数,加快开发速度

    利用angular自带工具函数,加快开发速度 angular.extend(obj,{})扩充对象 angular...

  • 作用域和垃圾收集

    每个函数执行时都会创建自己的作用域,函数内部可以访问外部函数定义的变量和方法,外部函数不能访问内部函数定义的变量和...

  • 函数

    函数使用 内部参数和外部参数 在函数内部可以看到的参数,就是内部参数; 在函数外面可以看到的参数,就是外部参数; ...

  • 闭包函数

    一个函数内部可以定义一个函数,并且函数的返回值是这个内部函数,内部函数使用了原函数的内部变量。返回内部函数时,内部...

  • 时钟,封闭函数,闭包,MATH,变量

    全局变量:函数外部定义的变量,函数内部和外部都可以访问,它的值可以共享 局部变量:函数内部定义的变量,函数内部可以...

  • 闭包

    定义:闭包就是能够读取其他函数内部变量的函数。定义在一个函数内部的函数。就是将函数内部和函数外部连接起来的一座桥梁...

  • 【Solidity学习笔记】外部函数的调用

    3.8 外部函数的调用 在Solidity中,有两种函数调用:内部函数调用和外部函数调用。内部函数调用是指一个函数...

  • 前端框架对比

    React、Vue和Angular React React起源于Facebook的内部项目,用来架设Instagr...

网友评论

      本文标题:Angular inlineCriticalCss 和内部函数

      本文链接:https://www.haomeiwen.com/subject/dbhcbdtx.html