我正在阅读有关不可变标头的内容,我发现这篇文章说:
缓存控制:max-age=365000000,不可变
当支持不可变的客户端看到此属性时,它应该假设该资源(如果未过期)在服务器上未更改,因此不应为其发送条件重新验证(例如 If-None-Match 或 If-Modified-Since)来检查更新。纠正可能的损坏(例如 Firefox 中的移位重新加载)从不使用条件重新验证,如果您担心不可变对象已损坏,那么对它们进行处理仍然有意义。
我无法理解这句话“如果未过期,则在服务器上未更改,因此不应发送有条件的重新验证”
默认情况下,客户端在 max-age 到期之前不会发送重新验证。
那么首先定义不可变的意义何在呢?
我正在阅读有关节点的事件循环阶段的内容,并说
- 计时器:此阶段执行由 setTimeout() 和 setInterval() 安排的回调。
- 挂起的回调:执行推迟到下一个循环迭代的 I/O 回调。
- 空闲,准备:仅内部使用。
- poll:检索新的I/O事件;执行 I/O 相关回调(几乎所有回调,关闭回调、计时器调度的回调和 setImmediate() 除外);节点会在适当的时候阻塞在这里。
- check:setImmediate() 回调在这里被调用。
- 关闭回调:一些关闭回调,例如socket.on('close', ...)。
所以这里我有一个简单的代码来测试上面的一些阶段。当您执行代码时,您会得到以下输出:
但根据文档,套接字回调是阶段的最后一个。为什么先执行呢?
let socket = require("net").createServer();
socket.on("data", function (data) {
console.log(data.toString());
});
socket.on("close", function (data) {
console.log("close");
});
socket.listen(8080);
const fs = require("fs");
fs.readFile("readme.txt", () => {
socket.close();
setTimeout(() => {
console.log("timeout");
}, 0);
setImmediate(() => {
console.log("immediate");
});
});
Run Code Online (Sandbox Code Playgroud) 我有一个简单的应用程序,可以调用 API。我正在使用反应查询来进行获取并缓存数据。然而,即使该函数被包装在 中React.memo,useQuery也会无缘无故地导致多次重新渲染。应该是2个效果图而不是8个。
import React, { memo } from "react";
import logo from "./logo.svg";
import "./App.css";
import { useQuery } from "react-query";
import Axios from "axios";
const fetchTodoList = async (key, id) => {
const { data } = await Axios.get(
`https://jsonplaceholder.typicode.com/posts/`
);
return data;
};
function App() {
const { isLoading, isError, data, error } = useQuery("todos", fetchTodoList);
console.log(isLoading, data);
if (isLoading) {
return <span>Loading...</span>;
}
if (isError) {
return <span>Error: {error.message}</span>;
}
// also …Run Code Online (Sandbox Code Playgroud) 我正在阅读有关可变字体的内容,但我不明白这个概念。
有 5 个注册轴 wght、wdth、ital、slnt、opsz。字体粗细已经预先存在,我们每天都在我们的 css 中使用它。
那么这里的可变字体和常规字体有什么区别呢?
另外,如果我在元素中放置一个范围font-weight: 100 500然后使用,我看不出任何区别。font-weight: 600<p>
即使我将其限制为 500,重量 600 仍能继续工作。
@font-face {
font-family: "sketch_3dregular";
src: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/57225/IBMPlexSansVar-Roman.woff2")
format("woff2 supports variations"),
url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/57225/IBMPlexSansVar-Roman.woff2")
format("woff2-variations");
font-weight: 100 500;
font-stretch: 85% 100%;
}
html {
font-size: 10px;
margin: 0;
font-family: "sketch_3dregular";
}
p {
font-size: 1.4rem;
line-height: 1.6;
word-spacing: 0.6rem;
font-weight: 600;
}
Run Code Online (Sandbox Code Playgroud) 预加载:获取 CSS 样式表并在稍后应用它,获取 JavaScript 资产并稍后执行,等等。预加载提取不会阻止文档加载事件,并允许应用程序确定应用哪些资源、何时执行以及以何种顺序执行。
Defer:“延迟”在 HTML 解析期间预加载,并且只会在解析器完成后执行。
我无法理解这两个概念的差异。两者都在不阻塞解析器的情况下异步获取内容,然后在解析器完成后都可以执行。
那么有什么区别吗?
我正在阅读关于 Margin Collapsing 的文章,我发现了这个:margin
相邻兄弟姐妹 相邻兄弟姐妹的边距被折叠(除非后一个兄弟姐妹需要清除浮动)。
我不明白最后一句话“除非后一个兄弟需要清除浮动”。有人可以举个例子吗?
谢谢
我在阅读有关 Node js 中的集群的内容时遇到了一个简单的示例,而主文件创建了四个子进程,每个进程都监听 8080 端口。
代码运行良好,但我不明白:
如何让多个子进程监听同一个端口?
我期待收到这样的消息
错误:监听 EADDRINUSE:地址已在使用中 :::8080
const cluster = require("cluster");
if (cluster.isMaster) {
for (let i = 0; i <= 4; i++) cluster.fork();
} else {
require("./test.js");
}
Run Code Online (Sandbox Code Playgroud)
测试.js
const http1 = require("http");
http1
.createServer((req, res) => {
console.log("request1");
res.write("hello1");
res.end();
})
.listen(8080, () => {
console.log("begin");
});
Run Code Online (Sandbox Code Playgroud) 根据文档 文档,将useFileSystemPublicRoutes配置选项设置为 false 可以防止基于 /pages 目录中的文件进行路由。但我无法理解它的真正作用,因为他们没有详细说明。
如果有人能用简单的例子向我解释这个配置的作用,我将不胜感激。
css ×3
node.js ×2
reactjs ×2
caching ×1
css-float ×1
deferred ×1
event-loop ×1
font-face ×1
font-family ×1
header ×1
html ×1
http-headers ×1
javascript ×1
margin ×1
next.js ×1
node-cluster ×1
preload ×1
react-query ×1
typeface ×1