Learning Weekly-2025-01-12
Monitor Request Progress
Monitor the progress of the request by listening to the progress event of xhr:
ts
xhr.addEventListener('progress', (e)=>{
console.log(e.loaded, e.total)
})
e.loaded
: The amount of data currently available.e.total
: The total amount of data.
Monitor the progress of the fetch request:
ts
const main = async () => {
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const total = res.headers.get('content-length');
let body = '';
const decoder = new TextDecoder();
let loaded = 0;
const reader = res.body?.getReader();
if (!reader) {
return;
}
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
body += decoder.decode(value);
loaded += value.length;
console.log(`Loaded ${loaded} of ${total}`);
}
console.log(body);
};
Memory Leaks Caused by Free Node
游离节点造成的内存泄露【渡一教育】_哔哩哔哩_bilibili[Performance tab] nodes leaking on focus [41403456] - Chromium The last focused input node will not be GC. There maybe a big problem if this node is a complex rich-text editor. The resolution: when destroy this node, create and focus a new input element, and then destroy it.
Dynamic loading for supported image format
Lastest browser support the avif
image that better than webp
and png
. However, considering some older browser still don't support it, dynamic loading is required.
Dynamic loading by <source>
:
html
<picture>
<source
srcset="test.avif"
type="image/avif"
media="(min-width: 1000px)"
width="1000"
height="400" />
<source
srcset="test.webp"
type="image/webp"
media="(min-width: 1000px)"
width="1000"
height="400" />
<img
src="test.png"
alt="当浏览器不支持来源时使用的图片"
width="1000"
height="400" />
</picture>