首页 文章 精选 留言 我的

精选列表

搜索[快直播],共10005篇文章
优秀的个人博客,低调大师

Elasticsearch 的过滤向量搜索速度比 OpenSearch 快 8 倍

我们在包含 2000 万篇文档的语料库上进行的基准测试表明,Elasticsearch 在过滤向量搜索方面比 OpenSearch 的吞吐量高出 8 倍,并且在我们测试的所有配置中都实现了更高的 Recall@100。上下文工程不仅仅依赖于快速的向量检索。随着工作流程的迭代,团队还需要强大的相关性控制(例如混合搜索和过滤)、操作简便性和可预测的性能。但是,由于代理通常在每个请求中多次运行检索、推理、再检索的循环,检索延迟会成为一个倍增器,因此这方面的改进将直接转化为更好的端到端响应速度和更低的成本。

优秀的个人博客,低调大师

Snowy 更新速度快啊,v2.1.1 又发了

Snowy是国内首个采用了国密算法的前后分离快速开发平台,技术采用了Vue+AntDesignVue3+Vite+SpringBoot+Hutool+Mp+SaToken+EasyTrans发布以来一直维护着客户的使用,不断的更新,更新频率也是越来越快,此次发版主要更新了以下内容: 1、【新增】菜单搜索功能 2、【更新】修复代码生成zip时sql未打包进去的bug 3、【更新】同步beetl版本与企业版使用一致 4、【更新】升级优化前端依赖,同时增加了gzip的配置,生产环境按照官网的配置部署速度更快 5、【修复】修复iss中提到的问题:模块现身省略号的问题 6、【更新】更新一个iss中提到的C端控制器的枚举类型参数 7、【更新】更新个人信息修改手机号不加密问题 8、【更新】s-table问题修复,同时修改斑马纹的是否显示由开关变为选择框更美观 9、【更新】更新gitee提到生成后的表单中字典配置错误 10、【更新】优化前端配置缓存、双排菜单布局下页脚与经典布局同步 11、【更新】新增或编辑菜单失败后loading一直加载问题解决 12、【更新】代码生成下载压缩包名字乱码问题修复 快来看你提的Iss有没有被更新!

优秀的个人博客,低调大师

如何实现比 setTimeout 快 80 倍的定时器?

本文首发公众号「前端从进阶到入院」,欢迎关注! 起因 很多人都知道,setTimeout 是有最小延迟时间的,根据 MDN 文档 setTimeout:实际延时比设定值更久的原因:最小延迟时间 中所说: 在浏览器中,setTimeout()/setInterval() 的每调用一次定时器的最小间隔是 4ms,这通常是由于函数嵌套导致(嵌套层级达到一定深度)。 在 HTML Standard 规范中也有提到更具体的: Timers can be nested; after five such nested timers, however, the interval is forced to be at least four milliseconds. 简单来说,5 层以上的定时器嵌套会导致至少 4ms 的延迟。 用如下代码做个测试: let a = performance.now(); setTimeout(() => { let b = performance.now(); console.log(b - a); setTimeout(() => { let c = performance.now(); console.log(c - b); setTimeout(() => { let d = performance.now(); console.log(d - c); setTimeout(() => { let e = performance.now(); console.log(e - d); setTimeout(() => { let f = performance.now(); console.log(f - e); setTimeout(() => { let g = performance.now(); console.log(g - f); }, 0); }, 0); }, 0); }, 0); }, 0); }, 0); 在浏览器中的打印结果大概是这样的,和规范一致,第五次执行的时候延迟来到了 4ms 以上。 更详细的原因,可以参考 为什么 setTimeout 有最小时延 4ms ? 探索 假设我们就需要一个「立刻执行」的定时器呢?有什么办法绕过这个 4ms 的延迟吗,上面那篇 MDN 文档的角落里有一些线索: 如果想在浏览器中实现 0ms 延时的定时器,你可以参考这里所说的 window.postMessage()。 这篇文章里的作者给出了这样一段代码,用 postMessage 来实现真正 0 延迟的定时器: (function () { var timeouts = []; var messageName = 'zero-timeout-message'; // 保持 setTimeout 的形态,只接受单个函数的参数,延迟始终为 0。 function setZeroTimeout(fn) { timeouts.push(fn); window.postMessage(messageName, '*'); } function handleMessage(event) { if (event.source == window && event.data == messageName) { event.stopPropagation(); if (timeouts.length > 0) { var fn = timeouts.shift(); fn(); } } } window.addEventListener('message', handleMessage, true); // 把 API 添加到 window 对象上 window.setZeroTimeout = setZeroTimeout; })(); 由于 postMessage 的回调函数的执行时机和 setTimeout 类似,都属于宏任务,所以可以简单利用 postMessage 和 addEventListener('message') 的消息通知组合,来实现模拟定时器的功能。 这样,执行时机类似,但是延迟更小的定时器就完成了。 再利用上面的嵌套定时器的例子来跑一下测试: 全部在 0.1 ~ 0.3 毫秒级别,而且不会随着嵌套层数的增多而增加延迟。 测试 从理论上来说,由于 postMessage 的实现没有被浏览器引擎限制速度,一定是比 setTimeout 要快的。但空口无凭,咱们用数据说话。 作者设计了一个实验方法,就是分别用 postMessage 版定时器和传统定时器做一个递归执行计数函数的操作,看看同样计数到 100 分别需要花多少时间。读者也可以在这里自己跑一下测试。 实验代码: function runtest() { var output = document.getElementById('output'); var outputText = document.createTextNode(''); output.appendChild(outputText); function printOutput(line) { outputText.data += line + '\n'; } var i = 0; var startTime = Date.now(); // 通过递归 setZeroTimeout 达到 100 计数 // 达到 100 后切换成 setTimeout 来实验 function test1() { if (++i == 100) { var endTime = Date.now(); printOutput( '100 iterations of setZeroTimeout took ' + (endTime - startTime) + ' milliseconds.' ); i = 0; startTime = Date.now(); setTimeout(test2, 0); } else { setZeroTimeout(test1); } } setZeroTimeout(test1); // 通过递归 setTimeout 达到 100 计数 function test2() { if (++i == 100) { var endTime = Date.now(); printOutput( '100 iterations of setTimeout(0) took ' + (endTime - startTime) + ' milliseconds.' ); } else { setTimeout(test2, 0); } } } 实验代码很简单,先通过 setZeroTimeout 也就是 postMessage 版本来递归计数到 100,然后切换成 setTimeout 计数到 100。 直接放结论,这个差距不固定,在我的 mac 上用无痕模式排除插件等因素的干扰后,以计数到 100 为例,大概有 80 ~ 100 倍的时间差距。在我硬件更好的台式机上,甚至能到 200 倍以上。 Performance 面板 只是看冷冰冰的数字还不够过瘾,我们打开 Performance 面板,看看更直观的可视化界面中,postMessage 版的定时器和 setTimeout 版的定时器是如何分布的。 这张分布图非常直观的体现出了我们上面所说的所有现象,左边的 postMessage 版本的定时器分布非常密集,大概在 5ms 以内就执行完了所有的计数任务。 而右边的 setTimeout 版本相比较下分布的就很稀疏了,而且通过上方的时间轴可以看出,前四次的执行间隔大概在 1ms 左右,到了第五次就拉开到 4ms 以上。 作用 也许有同学会问,有什么场景需要无延迟的定时器?其实在 React 的源码中,做时间切片的部分就用到了。 借用 React Scheduler 为什么使用 MessageChannel 实现 这篇文章中的一段伪代码: const channel = new MessageChannel(); const port = channel.port2; // 每次 port.postMessage() 调用就会添加一个宏任务 // 该宏任务为调用 scheduler.scheduleTask 方法 channel.port1.onmessage = scheduler.scheduleTask; const scheduler = { scheduleTask() { // 挑选一个任务并执行 const task = pickTask(); const continuousTask = task(); // 如果当前任务未完成,则在下个宏任务继续执行 if (continuousTask) { port.postMessage(null); } }, }; React 把任务切分成很多片段,这样就可以通过把任务交给 postMessage 的回调函数,来让浏览器主线程拿回控制权,进行一些更优先的渲染任务(比如用户输入)。 为什么不用执行时机更靠前的微任务呢?参考我的这篇对 EventLoop 规范的解读 深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系,关键的原因在于微任务会在渲染之前执行,这样就算浏览器有紧急的渲染任务,也得等微任务执行完才能渲染。 总结 通过本文,你大概可以了解如下几个知识点: setTimeout 的 4ms 延迟历史原因,具体表现。 如何通过 postMessage 实现一个真正 0 延迟的定时器。 postMessage 定时器在 React 时间切片中的运用。 为什么时间切片需要用宏任务,而不是微任务。 感谢大家 欢迎关注 ssh,前端潮流趋势、原创面试热点文章应有尽有。 记得关注后加我好友,我会不定期分享前端知识,行业信息。2021 陪你一起度过。

优秀的个人博客,低调大师

速度快50倍 欧洲敲响6G大门

全球范围内的主要运营商正在逐渐转向5G技术的使用,但似乎欧洲目前正集中精力向6G技术过渡,并准备应对随之而来的数字主权挑战。 吉尔达斯·德·罗索在法国报纸《费加罗报》上发表的一篇报告中,谈及5G技术在世界范围内的日益普及,并谈及该技术2020年底在法国的持续快速传播。 作者表示,5G将入侵法国,有关6G技术的讨论已经开始,但预计该技术不会在2030年之前进入服务范围。 数字主权 与其他国家一样,对欧洲人而言,风险是不可避免的,一些亚洲国家已经对未来做出了选择,例如韩国赌注于其工业基础,而中国去年宣布成功发射全球第一颗6G试验卫星。 芬兰设备制造商诺基亚牵头领导的“Hexa-X”6G研究项目——该项目由欧洲委员会部门资助——将于明年启动,该项目旨在开发将构成5G的“基本技术”,从而为下一代无线网络铺平道路,并将人类和物理世界与数字世界连接起来。 欧洲明年将启动“Hexa-X”研究项目(盖蒂图像) 传输速率和速度 鉴于技术层面数据不够清晰,预计6G的传输速度将达到5G的50倍。 与此同时,等待时间可以缩短至不足一毫秒。为此,6G必须切换到太赫兹频段,而5G使用高达30 GHz的毫米波频率。 这一进展将为讨论各种主题打开大门,例如太赫兹频段的损害,以及有关这种进步必要性等问题。 多功能性 这项技术的应用范围超出了人们的想象能力,从远程手术和3D会议,到自动驾驶汽车和智慧城市。 在6G技术统治下的世界中,除了实现人工智能之外,新的娱乐形式将会出现。此外,这项技术还可能对资源管理、生物多样性、天气预报甚至气候变化产生影响。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册