关键 CSS

有关关键 CSS 的详细参考信息,请参阅 https://web.dev/articles/extract-critical-css。

如何启用关键 CSS

通常,我们的一个 React 组件可能如下所示。

import styles from './style.module.scss'

const Component = () => {
  return (
    <div className={styles.container}>
      <h1 className={styles.title}>Hello World</h1>
    </div>
  )
}
.container {
  background-color: #f0f0f0;
}
.title {
  color: #333;
}

像 Next.js 这样的框架,或者人们可能使用的 mini-css-extract-plugin,会将 CSS 提取到单独的文件中。

它有一个显著的缺点,即它会为您导入的任何模块提取 CSS,有时这可能是不必要的。

const ABTestComponent = () => {
  return ab ? <ComponentA/> : <ComponentB>
}

例如,在上面的情况下,对于处于 A/B 测试控制端的用户来说,任何其他模块的 CSS 都是不必要的。

我们在 isomorphic-style-loader 周围构建了一个内部包装器。现在,您可以使用 useStyles 钩子在渲染过程中收集所需的 CSS。

import styles from './style.iso.scss'
import { useStyles } from '@pareto/core'

const Component = () => {
  useStyles(styles)

  return (
    <div className={styles.container}>
      <h1 className={styles.title}>Hello World</h1>
    </div>
  )
}

为了将其与外部 CSS 区分开来,我们仅对以 .iso.scss 结尾的文件启用关键 CSS 收集。

注意事项

关键 CSS 可以与流式渲染一起使用,但重要的是要注意我们的 useStyles 调用必须放在 use 函数之前,否则这些样式无法在服务器端收集。

export function Recommends() {
  useStyles(styles) // 建议:始终将 useStyles 放在顶部;
  const { feeds } = use(promiseMap.get(getRecommendsKey)!)

  return <div className={styles.container}>...</div>
}