gpt4 book ai didi

javascript - 如何在 window.onload 事件后使用 reactjs/nextjs 加载脚本

转载 作者:行者123 更新时间:2023-12-05 00:33:43 37 4
gpt4 key购买 nike

我正在尝试优化我的 google pagespeed 洞察分数,我得出的结论是延迟 nextjs 的 NextScript 还不够好,它仍然会导致 LCP 和 TII 不好。
我有以下代码。
如何捆绑我正在循环的脚本,以便在 window.onload 事件之后全部加载?
任何帮助将非常感激。

import { NextScript } from 'next/document';
import React from 'react';

type DocumentFiles = {
sharedFiles: readonly string[];
pageFiles: readonly string[];
allFiles: readonly string[];
};

function dedupe<T extends { file: string }>(bundles: T[]): T[] {
const files = new Set<string>();
const kept: T[] = [];

// eslint-disable-next-line
for (const bundle of bundles) {
if (files.has(bundle.file)) {
// eslint-disable-next-line
continue;
}
files.add(bundle.file);
kept.push(bundle);
}
return kept;
}

export class DeferredNextScript extends NextScript {
getScripts(files: DocumentFiles) {
return super.getScripts(files).map((script: JSX.Element) => {
console.log(script);
return React.cloneElement(script, {
// eslint-disable-next-line
key: script.props.src,
defer: true,
async: false,
});
});
}

getDynamicChunks(files: DocumentFiles) {
const { dynamicImports, assetPrefix, devOnlyCacheBusterQueryString } = this.context;

return dedupe(dynamicImports).map((bundle) => {
console.log(bundle);
let modernProps = {};
if (process.env.__NEXT_MODERN_BUILD) {
modernProps = bundle.file.endsWith('.module.js') ? { type: 'module' } : { noModule: true };
}

if (!bundle.file.endsWith('.js') || files.allFiles.includes(bundle.file)) {
return null;
}

return (
<script
defer
async={false}
key={bundle.file}
src={`${assetPrefix}/_next/${encodeURI(bundle.file)}${devOnlyCacheBusterQueryString}`}
nonce={this.props.nonce}
crossOrigin={this.props.crossOrigin || process.env.__NEXT_CROSS_ORIGIN}
{...modernProps}
/>
);
});
}
}

最佳答案

为了在您有权访问 global window 时捆绑您的脚本, 你可以使用 react useEffect钩。 (或者类似地,如果您使用基于类的组件,则可以使用 componentDidMount 生命周期。)

关于javascript - 如何在 window.onload 事件后使用 reactjs/nextjs 加载脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65567480/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com