requests
использует по-умолчанию (даже без использования Session
), а именно наличию connection: "keep-alive"
, keep alive режим работает из коробки, и, очевидно, правильно.node-fetch
нет. Но это можно исправить, см. мой ответ."authority"
, "method"
, "path"
, "scheme"
.":authority"
, ":method"
, ":path"
, ":scheme"
, псевдо-заголовки HTTP/2.requests
— HTTP/1.1 библиотека.import fetch from "node-fetch";
import http from "node:http";
import https from "node:https";
const httpAgent = new http.Agent({keepAlive: true});
const httpsAgent = new https.Agent({keepAlive: true});
function agent(_parsedURL) {
if (_parsedURL.protocol === "http:") {
return httpAgent;
} else {
return httpsAgent;
}
}
const response = await fetch("https://example.com/", {
agent
});
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
while (true) {
await sleep(10000);
openBox();
await sleep(3000);
const data = JSON.parse(response);
for (const entry of data) {
entry.btn.click(); // рили?
await sleep(3000);
entry.btnClose.click();
}
await sleep(3000);
btn.click();
}
ref
, reactive
и т.д.:const a = [1, 2, 3];
toRaw
, чтобы получить оригинальный объект из реактивного:const a = [1, 2, 3];
const r = ref(a);
const b = toRaw(r.value);
a
и/или b
не будут вызывать рендер, а изменения r.value
— будут.markRaw
над a
, то даже r.value
перестанет быть реативным.Поисковик выдает много всего
Connection: close
, если не использовать свой http.Agent
c {keepAlive: true}
.Ну почему-то, после перезагрузки страницы...
<template>
<div v-for="i of items" :key="i">{{i}}</div>
</template>
<script setup>
import {ref, computed, onMounted} from "vue";
const data = ["1q", "2w", "3e", "4r", "5t", "6y"];
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const items = ref([]);
onMounted(async () => {
for (const value of data) {
items.value.push(value);
await sleep(1000);
}
});
</script>
const limit = ref(0);
const items = computed(() => {
return data.slice(0, limit.value);
});
onMounted(async () => {
while (limit.value < data.length) {
limit.value++;
await sleep(1000);
}
});
script setup
append
, after
, createElement
.querySelector
также пригодится для уже существующих нод. Spread types may only be created from object types.
undefined
.useSomething
) делается так — возвращается объект, чьи поля присваиваются другому объкту путем оператора спреад.const input = document.createElement("input");
input.type = "file";
document.body.append(input);
input.addEventListener("change", async event => {
const file = input.files[0];
const ab = await file.arrayBuffer();
const wa = CryptoJS.lib.WordArray.create(ab);
const hash = CryptoJS.MD5(wa);
console.log(hash.toString());
});
emn178/js-md5
, работает раз в 7 быстрее.CryptoJS.algo.MD5.create()
и методы update
и finalize
) const map = new Map();
for (const entry of components) {
const parent = map.get(entry.parentId);
if (parent) {
parent.children || (parent.children = []);
parent.children.push(entry);
}
map.set(entry.id, entry);
}
const rootItemId = 1;
console.log(map.get(rootItemId));
function downloadBlob(blob, name, url) {
const anchor = document.createElement("a");
anchor.setAttribute("download", name || "");
const blobUrl = URL.createObjectURL(blob);
anchor.href = blobUrl + (url ? ("#" + url) : "");
anchor.click();
setTimeout(() => URL.revokeObjectURL(blobUrl), 5000);
}
blob:https://imgur.com/11fb6df9-e45b-4acf-b3eb-60d5d4656747#https://i.imgur.com/X92aA5Y.jpeg
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
for (const span of h1.children) {
await sleep(500);
span.removeAttribute("hidden");
}
const h1 = document.querySelector("h1");
const chars = "HELLO".split("");
for (const char of chars) {
await sleep(500);
h1.textContent += char;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
for (let i = 0; i < 10; i++) {
console.log(i);
await sleep(500);
}
async function change(params) {
try {
const response = await vk.call("groups.edit", {
group_id: 196543401,
screen_name: params
});
console.log(response);
console.log(response.getFullResponse());
} catch (error) {
console.log(error);
}
}
const array = fs.readFileSync("file.txt").toString().split("\n");
for (const item of array) {
console.log(item);
await change(item);
await sleep(1000);
}