- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Gatsby 框架 开发 React 网页,并且在获得良好的页面速度值的同时使用 AWS 进行持续部署。
其中一个改进机会是删除未使用的 Javascript,它解释了这一点:
Sorry, follow this link. I don't have 10 of reputation to post images :(
Sorry, follow this link. I don't have 10 of reputation to post images :( x2
这是我创建 map 的代码(使用 @react-google-maps/api
):
useEffect(() => {
const loadScriptByURL = (id, url, callback) => {
const isScriptExist = document.getElementById(id);
if (!isScriptExist) {
let script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
script.id = id;
script.onload = function () {
if (callback) callback();
};
document.body.appendChild(script);
}
if (isScriptExist && callback) callback();
}
loadScriptByURL("recaptcha-key", `https://www.google.com/recaptcha/api.js?render=${SITE_KEY}`, function () {
console.log("Script loaded!");
});
}, []);
这是我调用 recaptcha 的代码:
<LoadScript
googleMapsApiKey='...'>
<GoogleMap
mapContainerClassName={styles.mapSection}
center={defaultProps.center}
zoom={defaultProps.zoom}
onUnmount={() => {}}
onLoad={() => {}}>
<Marker position={markerLocation} onClick={infoToggleOpen}>
...
</Marker>
</GoogleMap>
</LoadScript>
解决这些插件的删除未使用的 Javascript 错误的最正确(或最简单)方法是什么?我如何使用 React.lazy()
或 loadable-components
(因为我试过了但它对我不起作用)来解决这个问题?
最佳答案
一些评论放在一边:
使用 const isScriptExist = document.getElementById(id);
您直接指向 DOM,而在 React 中,您创建和操作虚拟 DOM (vDOM) 以避免高性能像这样的浏览器操作。此外,这些在 React 范围之外的操作(不使用钩子(Hook))可能会导致一些奇怪的行为,因为您可能会阻塞 React's hydration process .
您可以使用 useRef
达到相同的效果钩子(Hook),保持 React 的范围,refName.current
(refName
是你的 id
应该应用 ref
) 其中包含与您的 document.getElementById
完全相同的信息。
正如您所说,保存的脚本 kB 毫无意义,尤其是 utils.js
,但尝试改进它们是一个很好的点。
使用 React.lazy
是一种(更多)异步加载组件的方式,以避免对浏览器的初始阻塞请求,从而更有效地加载组件。在你的情况下:
// import <LoadScript> from 'somewhere';
import <GoogleMap> from 'somewherex2';
import React, { Suspense } from 'react';
const LoadScript = React.lazy(() => import('./LoadScript'));
const YourComponentName=()=>(
<>
<Suspense fallback={<div>Loading...</div>}>
<LoadScript
googleMapsApiKey='...'>
<GoogleMap
mapContainerClassName={styles.mapSection}
center={defaultProps.center}
zoom={defaultProps.zoom}
onUnmount={() => {}}
onLoad={() => {}}>
<Marker position={markerLocation} onClick={infoToggleOpen}>
...
</Marker>
</GoogleMap>
</LoadScript>
</Suspense>
</>
)
您需要对 React.lazy
和导入的组件进行一些试验。请记住,React 允许您使用回退组件 (Suspense
)。
关于reactjs - 从 Lighthouse for Google Recaptcha 和 Google Maps API 解决 "Remove unused Javascript"的最正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66699969/
__attribute__((unused)) 和 __attribute((unused)) 可以将变量标记为未使用以避免未使用警告。 它们有什么区别? 最佳答案 在 GCC 存储库中,在文件 c-
在 Visual Studio 2010(C++,非托管)中调试,信息 unused ??? 或 unused 0 应该是什么意思?我附上了两个屏幕截图, child 是现有窗口的 HWND。 我也对
我只想在我的 Xcode 项目的一个文件中删除此编译器警告。有办法做到这一点吗? 最佳答案 您可以使用 a pragma directive and the "diagnostic" keyword
为什么.NET 警告“未使用的变量”而不是“未使用的参数”? (我相信 Java 在这两种情况下都会发出警告。) 为什么 .NET 不关心“未使用的参数”? 最佳答案 在我看来,您可能真正想要保留未使
我正在处理这个教程应用程序,代码给我这个警告: Xcode WARNING: Unused Entity Issue: Unused Variable 执行这条语句时报错: int newRowInd
考虑以下代码: class Foo { let bar = "Hello world!" init () { self // Warning: Expression o
您好,我正在尝试将 zxing 二维码阅读器整合到我的应用程序中。我直接从谷歌代码网站检查了 svn,并在我的项目设置中添加了所有标题路径。然而,当我尝试构建项目时,我遇到了很多“未使用的函数”和“未
在 Pipes Tutorial ,它说: The concrete type synonyms use () to close unused inputs and X (the uninhabite
我有工作 Swift.2.3 项目,但是当我构建并将其转换为 Swift3 时,它给我: Result of call to (_:parameters:completionHandler:)' is
我有一个基于 cmake 的包。它有几个目标可执行文件。其中一个目标时不时会崩溃。回溯如下: ... #19 XXX::~XXX (this=0x69a120, __in_chrg=) at
我刚刚用 C 编写了我的第一个应用程序,我收到了这个警告(已编辑):unused variable pp int compteur = 1; int *p = &compteur; int **pp
我的 C++ 编译器发出警告,指出以下“intVar”变量“未使用”。 void MyClass::MyMethod(bool bFlag) { int intVar = 10; if
我正在处理一个 Flask 项目,从 API 包装器获取一些数据。包装器返回一个生成器对象,所以我在将其传递给 Flask 的 render_template() 之前打印值(for obj in g
我是 goLang 的新手。我正在尝试从 intellij 构建一个项目,该项目使用 git 库中的一个包: import ( "github.com/aerospike/aerospike-
我收到很多不正确的 ESLint/TS 警告,说枚举案例“已分配一个值但从未使用过”或导入“已定义但从未使用过”。这是一些代码。 所有导入都说它们已定义但从未使用过(尽管您可以看到它们在底部的类型中)
这对我来说真是个谜。我已经这样定义了我的方法(对于类“graf”): addStatistics <- function(x) UseMethod("addStatistics") addStatis
我正在尝试使用 grunt-unused 删除多个子目录中所有未使用的图像链接。 .为清楚起见,这是我的文件夹结构: |-- dist | |-- site-1 | | |—-index.htm
我试图在我通过函数创建的条形图上注释标准消息。以下是代码: hashbar <- function(x) { suppressWarnings(library(stringr))
我在一个过程中有一个变量,我需要保持该变量的事件状态,直到该过程中的匿名方法运行为止,但我不在匿名方法中使用该变量。有没有一种惯用的方法告诉编译器无论如何都要捕获变量? 例如: procedure F
我正在使用 Delphi XE、Windows 7。 在应用程序中,我想启用不同的报告类型供用户选择。为此,我有 1 个基本报告类和每个报告类型(xml、csv、ppt 等)的子类。 {Just an
我是一名优秀的程序员,十分优秀!