使用 AbortSignal 对象可以完成与 DOM 请求的通信 这个 api 简单来说就是可以提供一个能力给我们去提前终止一个 fetch 请求 一个终止 fetch 请求的 demo 如下: fetchButton.onclick...可以将它传递给一些函数调用如 fetch 或者直接监听signal的状态变化(可以通过signal.aborted查看signal的状态或者监听它的abort事件) 实际使用 普通对象中的终止 一些旧的...已经终止 移除事件监听 我们经常需要在 js 中处理 dom 的监听和卸载工作。...controller; const someObject = new someObject(signal); // 执行一些操作后 controller.abort(); 这能非常清晰地表示这个对象只能被执行一次...借助signal可以在下一次useEffect重新调用 api 的时候将前一次的调用终止 function FooComponent({ something }) { useEffect(() =>
缓存和返回请求 每次任何被 service worker 控制的资源被请求到时,都会触发 fetch 事件,因此我们可以利用 fetch 事件对资源响应做一些拦截操作 this.addEventListener...注意:request 和 response 不能直接使用而是通过 clone 的方式使用是因为他们是 stream,因此只能使用一次。...install vs fetch install 的优点是第二次访问即可离线,缺点是需要将需要缓存的资源 URL 在编译时插入到脚本中,增加代码量和降低可维护性; fetch 的优点是无需更改编译过程,...下面是一个使用 service worker 的 postMessage API 做的一个简单计算器,其中计算部分在 service worker 线程中完成。...假如有一些比较耗时的工作,比如大量计算,或者 fetch 数据,可以将其放入 service worker 线程中,以达到提高页面响应的目的。
使用 Fetch API 实现现代前端数据交互 引言 在当今的 Web 开发中,前端与后端的数据交互是构建动态应用的核心。...本文将深入探讨 Fetch API 的工作原理、使用方法以及如何利用它与大模型服务(如 DeepSeek)进行交互。...一、Fetch API 概述 Fetch API 是现代浏览器提供的一个用于发起网络请求的接口,它比传统的 XMLHttpRequest 更加强大、灵活且易于使用。...Fetch API 将成为连接前端与大模型服务的重要桥梁: 实时 AI 交互:通过流式 Fetch 实现与大模型的实时对话 边缘计算:将部分 AI 推理工作下放到边缘节点,减少延迟 个性化体验:根据用户行为数据实时调整...无论是传统的 REST API 交互,还是新兴的大模型服务调用,Fetch API 都将继续发挥重要作用。希望本文能够帮助读者深入理解 Fetch 的工作原理,并在实际项目中灵活运用这些技术。
这里要特别注意的是,Cache 不会过期,只能显式删除。...}); install 事件是服务工作线程获取的第一个事件,并且它仅发生一次。...在成功完成安装并处于“activate 活动状态”之前,服务工作线程不会收到 fetch 和 push 等事件。 默认情况下,不会通过服务工作线程获取页面,除非页面请求本身需要执行服务工作线程。...; 网页抓取资源的过程中, 在 Service Worker 可以捕获到 fetch 事件, 编写代码如何响应资源的请求; 最后一步是更新静态资源的功能。...参考文献: 服务工作线程:简介 Web 技术文档 Web API 接口 ServiceWorker 借助Service Worker和cacheStorage缓存及离线开发 网站渐进式增强体验(PWA)
用大模型 API 优化工作流:一次代码重构的 AI 之旅在数字化转型的浪潮中,AI 技术正逐渐渗透到各个领域,改变着我们的工作方式。...近期,我经历了一次利用大模型 API 对工作流进行优化的代码重构项目,收获颇丰,在此与大家分享这段充满挑战与创新的 AI 之旅。...因此,我们决定引入先进的大模型 API,借助其强大的自然语言处理能力,对工作流中的文本审核环节进行优化,以提高审核的效率和准确性,同时降低人工审核的成本和工作量。...四、工作流重构与代码实现在完成大模型 API 的集成后,我们正式进入工作流重构的核心阶段,对原始工作流中的各个模块进行优化和改造,以充分发挥大模型 API 的优势。...预处理模块改造预处理模块是整个工作流中关键的一环,其处理效果直接影响到大模型 API 的输入质量。
激活是为了工作,睡眠则为了节省内存。这是一开始设计的初衷。如果,SW 已经 OK,那么,你网页的资源都会被 SW 控制,当然,SW 第一次加载除外。...当接受到 fetch 请求时,会直接返回 event.respondWith Promise 结果。我们在 worker 中,捕获页面所有的 fetch 请求。...众所周知,一个流一般只能使用一次,可以理解为喝矿泉水,只能喝一次,不过,如果我知道了该水的配方,那么我就可以量产该水,这就是流的复制。...我们只能得到它的副本,拿去使用。...最主要的应该有两个东西,缓存和推送。这里我们主要讲解一下缓存。不过在SW 中,我们一般只能缓存 POST 上面在文件更新里面也讲了几个更新的方式。
、更新来自服务器的的资源,它还提供入口以推送通知和访问后台同步API。...Get的请求下使用,这是Cache这个API决定的。...之后便是从caches取出这个CACHE_NAME的key标识的cache,之后使用cache.addAll将数组中的path告诉cache,在第一次打开的时候,Service worker会自动去请求相关的数据并且缓存起来...然后就进入了activated阶段,激活sw工作,activated阶段可以做很多有意义的事情,比如更新存储在Cache中的key和value。...然后对于请求如果匹配到了缓存,那么就直接从缓存中取得数据,否则就使用fetch去请求新的。另外如果有需要的话我们不需要在事件响应时进行匹配 可以直接将所有发起过的请求缓存。
Worker 捕捉,而 /js/sw.js 这样的文件名将只能捕获到 http://localhost:3000/js 下的请求。...比如一个一次性的操作,为 Service Worker 的工作做好准备;普遍的例子是从安装步骤中载入缓存。...在这个例子中,如果您想要分别同步每一次点击事件,需要给每个同步注册绑定唯一的标签。 Sync 事件什么时候触发? 如果用户在线,则 sync 事件会立即触发,并毫无延迟的完成您所定义的任务。...推送消息 推送消息涉及到调用由浏览器提供的 Push Api,再加上后端实现。Push Api 的实现需要通过单独一篇文章来讲解,但是基本概念如下图所示: ?...在 install 事件的处理中,我们请求了 INDEX_HTML_URL,然后调用 cache.put 方法来缓存响应。 activate 事件中做了一些基本的清理工作。
Web Worker 是浏览器内置的线程,用于执行非阻塞事件循环的 JavaScript 代码。由于 JavaScript 是单线程语言,一次只能处理一个任务。...Service Worker(服务工作线程)是一种在浏览器背后运行的脚本,用于提供强大的离线和缓存功能,以改善 Web 应用程序的性能和可靠性。...然后,在 Service Worker 中,我们通过监听 install 事件来缓存这些资源,并在 fetch 事件中拦截网络请求,从缓存中返回资源。这样,即使在离线时,页面仍能够加载所需资源。...缓存优先策略的工作流程:首先,它会监听浏览器的 fetch 事件,拦截原始的请求。接着,它会检查缓存中是否存在即将请求的资源,如果存在,则直接返回缓存中的资源。...通知API Push API 推送API 推送 API 可以用来从服务端推送新的内容而无需客户端介入,它是由应用的 Service Worker 来实现的;通知功能则可以通过 Service Worker
如果我们在/example/sw.js注册Service Worker文件,那么服务工作者将只能看到URL以/example/(即/example/page1/,/example/page2/)开头的页面的...一旦安装成功,您将知道静态资产位于缓存中。 如果注册需要在加载事件之后发生,这将回答您的问题。这不是必须的,但它是绝对推荐的。 为什么这样?让我们考虑用户第一次访问您的网络应用程序。...下面是一个演示如何返回缓存资源或执行新请求然后缓存结果的示例: self.addEventListener('fetch', function(event) { event.respondWith(...流的主体只能被使用一次。而且由于我们想要使用它们,浏览器也要使用它们,所以必需克隆它们。...下面是一个示例,您可以从缓存中删除某些未列入白名单的文件(在这种情况下,其名称中包含page-1或page-2): self.addEventListener('activate', function(
而在之前的 Web性能优化之Worker线程(上) Web性能优化之Worker线程(下), 其实已经写过相关的文章,但是由于当时的技术所限,其中的内容只是单纯的从实现逻辑上,也就是API层面做了一次不完整归纳总结...而,今天我们再次对Service Worker做一次深度的剖析。当然,其中API的部分大家可以翻看之前的文章。下文中不再赘述。 好了,天不早了,干点正事哇。...都可以使用addEventListener API 注册事件。所有这些事件都可以与Cache API进行交互。特别是在网络请求是离散的,运行回调的能力对于「提供所期望的可靠性和速度」至关重要。...作用域限制了service worker控制的页面。在上面的例子中,这意味着从/subdir/sw.js加载的service worker只能「控制位于/subdir/或其子页面中」。...install「只会在每个service worker中调用一次,直到它被更新才会再次触发」。
,js、css 等公共资源只需要加载一次,这就使传统网页进入离开的方式只有第一次打开能被记录。...window.addEventListener('hashchange', function() { // 上报【进入页面】事件 }, true) 需要注意的是,在新版 vue-router 中如果浏览器支持...与 hashchange 只能改变 # 后面的代码片段相比,History API (pushState、replaceState) 给了前端完全的自由。...因此做好网页错误监控,不断优化代码,提高代码健壮性是一项很重要的工作。...API 市面上主流的框架(如 Axios、jQuery.ajax 等)中,基本上所有的 API 请求都是基于xmlHttpRequest 或者 fetch,所以捕获全局接口错误的方式就是封装 xmlHttpRequest
生命周期 (install -> waiting -> activate -> fetch): 其中, install 事件是 Service Worker 获取的第一个事件,并且只发生一次。...主要逻辑 & API register install activate fetch skipWaiting // register if ('serviceWorker' in navigator...() => { // 激活回调的逻辑处理 console.log('service worker 激活成功') }) self.addEventListener('fetch', event...这个方法也可以用于检测进行的任务是否成功。在服务工作线程中,这个方法告诉浏览器事件一直进行,直至 promise resolve,浏览器不应该在事件中的异步操作完成之前终止服务工作线程。...定时同步:周期性的触发Service Worker脚本中的定时同步事件,可借助它提前刷新缓存内容 结合CacheStorage、 Push API 和 Notification API 参考链接: https
fetch 用于异步编程和网络请求; notification 用于消息通知,可以像原生 APP 在手机提示栏进行消息推送; Cache Storage 提供缓存; 这些全部都是 HTML5 的 API...('fetch',event => { console.log('fetch: ',event); }); 当是第一次访问站点时,会先注册,然后触发 install 事件,接着是 activate...事件;当再次刷新时,会触发 fetch 事件(可能会触发多次),但 install 和 activate 事件不会再触发,因为第一次访问时已经下载 sw.js 文件,这个文件会存在于本地。...Cache.put, Cache.add和 Cache.addAll 只能在GET请求下使用。...activate 事件中的 cache API 都是 caches 中的,它的构造函数是 CacheStorage,而 install 中的 caches.open 返回的 cache 实例的构造函数是
在看来《使用 AbortController 终止 fetch 请求》,觉得写的非常详细,于是提炼下笔记:AbortController背景介绍在现在的浏览器中,有两种主要的方法发送请求:XMLHttpRequest...XMLHttpRequest 这个接口在浏览器中存在很长一段时间了,fetch 则是 ES2015 引入的特性。XMLHttpRequest 可以在请求中途终止(abortable)。...终于,通用的 AbortController 和 AbortSignal API 出来了。该 API 在 DOM 标准 中定义,而不是在语言规范中定义的。...AbortController可以用在fetch和addEventListener,分别用来废弃请求和废弃监听器。...答:signals和abortedFlags准确的说是WeakMap类型,而WeakMap跟Map会有所区别,WeakMap的键只能是对象的引用,当垃圾回收机制执行时,会检测WeakMap的键是否被引用
传统页面中(HTML5 之前)的 JavaScript 的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:JavaScript 中的 setinterval 方法,setTimeout...Fetch 在 service worker 中无法使用传统的 XMLHttpRequest,只能使用 fetch;而后者的优势正在于,可以使用 Request 和 Response 对象 每次网络请求...,都会触发对应的 service worker 中的 fetch 事件 ?...在我们的例子中,页面上有一个指向 deer.png 的图片元素,最后却由 fetch 事件回调拦截并返回了 /horse.jpg,实现了指鹿为马的自定义资源指向 self.addEventListener...将 server worker 的生命周期设计成这样,其目的在于: 实现离线优先 允许新服务工作线程自行做好运行准备,无需中断当前的服务工作线程 确保整个过程中作用域页面由同一个服务工作线程(或者没有服务工作线程
为了方便我们的开发和调试,在开发的过程中,可以使用localhost来使用Service Worker。一旦把应用部署到服务器之后,必须使用https保证Service Worker的正常工作。...所以,有的时候我们发现,在页面第一次加载,fetch中的逻辑并没有生效,那是因为Service Worker在注册完成之前,我们的数据请求早已经加载完成了。 同时,在这个状态下。...CacheStorage API 在Service Worker中,我们通常使用CacheStorage来管理缓存。 CacheStorage是一种全新的缓存层,让我们对缓存具有完全的控制权。...和Cookie一样,都是具有同源策略的。 CacheStorage为我们提供了一系列的api来操作缓存。这些api都是基于Promise的,所有方法的返回值都是一个Promise。...在chrome浏览器中测试,一共会发送三次,第一次到第二次的间隔为5分钟,第二次到第三次的间隔为10分钟。
除此之外,这还能解释为什么script标签为什么会阻塞 DOM 树渲染,毕竟 JS 是可以修改 DOM 的,如果 JS 执行的时候 UI 也工作,就有可能导致不安全的渲染。...一次性更改style属性,或者直接定义class属性 避免直接插入DOM。在documentFragment上操作,然后再插入document中 避免循环读取offsetWidth等属性。...key=周杰伦&page=1&limit=10&vendor=qq" ); // Step3: 发送请求 xhr.send(); Fetch API 题目:介绍和使用fetch() 淘汰了写法不舒服的...const api = "http://localhost:5050/search/song"; fetch(api, { method: "POST", body: JSON.stringify...注意:src的params中callback属性,指定的是回调函数。
API 和浏览器标准的缓存工作原理相似,但是只是针对自己的 scope 域的,缓存会一直存在,知道手动清楚或者刷新。...更新您的服务工作线程 JavaScript 文件。...// 监听 activate 事件,激活后通过cache的key来判断是否更新、删除 cache 中的静态资源 self.addEventListener('activate', e => { console.log...它调用 respondWith() 方法来劫持网络请求缓存并返回: var apiCacheName = 'api-0-1-1' self.addEventListener('fetch', e =>...key 来判断是否更新 cache 中的静态资源 self.addEventListener('activate', e => { console.log('sw: activate') e.waitUntil
getStaticProps() { const data = await fetch('https://api.example.com/posts') .then(res => res.json...(userId) { try { const response = await fetch(`/api/users/${userId}`, { headers: { 'Authorization...('fetch', (event) => { if (event.request.url.includes('/api/')) { // API请求使用网络优先策略 event.respondWith...Web应用通常采用Git-based工作流,代码提交触发自动构建和部署流程。...结语静态Web应用代表了Web开发的一次重要演进,它结合了传统静态网站的性能优势与现代JavaScript应用的丰富功能。