使用 NextJS 减少 JS 执行时间

Kev*_*ski 9 pagespeed lighthouse reactjs webpack next.js

我有一个网站,我正在尝试优化灯塔页面速度排名。我刚刚从使用 nginx 缓存的 SSR 切换到next export使用exportPathMapgetInitialProps(也使用 nginx 缓存)。

感兴趣的特定页面获得大量流量

切换到静态后,第一个内容图像出现在“慢 3G”的 2-2.5 秒内加载。但是 JS 执行时间需要 3-6 秒。

在此处输入图片说明

问题:

  1. 当我使用静态导出时,为什么脚本评估需要 3-6 秒,我的印象是它会很快?

  2. 有没有优化nextjs JS执行时间的方法?或者也许是 webpack 设置?

Cha*_*kin 6

尝试包装一些像这样的重模块:

import dynamic from 'next/dynamic';
import PreDynamicState from './PreDynamicState';

const DynamicInnerComp = dynamic(() => import('./MyHeavyModule'), {
  ssr: false,
  loading: () => <PreDynamicState />
});

export const MyQuicklyLoadingPage: FC = () => {
  return (
    <div>
      <h1>Welcome to the page!</h1>
      <p>You'll see this text</p>
      <p>Before we load the heavy stuff below</p>
      <p>Large markdown files containing lots of images, etc.</p>
      <DynamicInnerComp />
    </div>
  );
};
Run Code Online (Sandbox Code Playgroud)

我有时也会将它用于无法使用 SSR 呈现的模块。

此外,评估尝试使用 Preact 之类的东西是否会提高性能。我不知道用 nextJS 做到这一点有多容易。我发现了这个https://github.com/developit/nextjs-preact-demo

  • 嘿查理,我接受了,因为赏金只剩下 30 分钟了,但这实际上并没有给我太大帮助。实际上,我已经在 90% 的应用程序上使用了这种动态设置,但没有成功,我将尝试在 10% 的较重部分上使用它,看看会发生什么。至于 preact,我已经考虑过,但我在某些位置有一些复杂的钩子逻辑,我不认为 preact 支持这些逻辑,特别是在一页上。我的页面是完全静态的,只有当您使用不应太重的文本输入区域时才会运行逻辑。任何其他建议表示赞赏:) (3认同)