在 Ubuntu 24.04 LTS 一台机子上同时部署Dify 1.3.1 和 RAGflow 0.18.0
一、RAGflow 0.18.0 简介
有关 Dify 的简介,可以查看我之前分享的 《在 Ubuntu24.04 LTS 上 Docker Compose 部署 Dify 社区版 1.0.1》文章。RAGFlow是一款基于深度文档理解(deepdoc)构建的开源 RAG引擎。其中,深度文档理解,是 RAGFlow 对文档解析的一个解决方案,它包含两个组成部分:视觉处理和解析器。其中视觉处理是通过OCR,布局识别,表结构识别来完成图像,PDF,表格的识别的。针对PDF、DOCX、EXCEL和PPT四种文档格式,都有相应的解析器。能够从各类复杂格式的非结构化数据中提取信息,文本切片过程可视化,还支持手动调整。支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。更重要的是,他还集成了各种嵌入模型,rerank模型,提供易用的 API,可以轻松集成到各类企业系统。
RAGflow 官网地址:https://ragflow.io/
RAGflow 0.18.0 官方文档地址:https://ragflow.io/docs/v0.18.0/
RAGflow 系统架构:
RAGflow 主要功能:
(1) "Quality in, quality out"
基于深度文档理解,能够从各类复杂格式的非结构化数据中提取真知灼见。
真正在无限下文(token)的场景下快速完成大海捞针测试。
(2)基于模板的文本切片
不仅仅是智能,更重要的是可控可解释。
多种文本模板可供选择
(3)有理有据、最大程度降低幻觉(hallucination)
文本切片过程可视化,支持手动调整。
有理有据:答案提供关键引用的快照并支持追根溯源。
(4)兼容各类异构数据源
支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。
(5)全程无忧、自动化的 RAG 工作流
全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。
大语言模型 LLM 以及向量模型均支持配置。
基于多路召回、融合重排序。
提供易用的 API,可以轻松集成到各类企业系统。
RAGflow 0.18.0 升级内容说明:
新功能
MCP服务器: 允许通过MCP访问RAGFlow的知识库。
DeepDoc支持在文档布局识别过程中采用VLM模型作为处理管道,从而可以对pdf中的图像进行深入分析。
代理版本控制: 所有更新都将持续记录,并且可以通过导出回滚到以前的版本。
团队协作: 可以与团队成员共享座席。
与OpenAI兼容的api: 可以通过与OpenAI兼容的api调用代理。
用户注册控制: 管理员可以通过环境变量启用或禁用用户注册。
改进
增强的答案引用: 提高了生成的响应中的引用准确性。
增强的问答体验: 用户现在可以在对话期间手动停止流式输出。
其他详见RAGflow的release的tag说明( https://github.com/infiniflow/ragflow/releases/tag/v0.18.0 ),如下:
二、RAGflow 安装软硬件条件检查
(1)官方支持x86 CPU和Nvidia GPU 硬件,其他 ARM 等硬件官方截至目前尚未暂不作为正式支持硬件。
(2)Linux 操作系统内核不建议低于6.0 的 LTS 版本;Windows 操作系统不建议低于 Win10 专业版 22H2 或 Window Server 2025 最新稳定版。
(3)CPU 大于等于 8核(x86);一会有杠精要抬杠说官方是不少于4核,亲咱们是Dify和RAGflow安装同一台机子。
(4)RAM 大于等于 32 GB 。
(5)磁盘 大于等于 512 GB 。
(6)Docker 大于等于 28.1.1 ,并且 Docker Compose 大于等于 2.35.1 。
(7)Git 大于等于 2.43.0 。
三、在 Ubuntu 24.04 LTS 部署 RAGflow 0.18.0
3.1 控制进程可以拥有的内存映射区域(Memory Mapped Regions)的最大数优化
vm.max_map_count。该值设置进程可能具有的存储器映射区域的最大数量。其默认值为65530。虽然大多数应用程序需要少于一千个映射,但减少此值可能会导致异常行为,并且当进程达到限制时,系统将抛出内存不足错误。RAGFlow v0.18.0使用Elasticsearch或无穷大多次召回。设置vm.max_map_count的值为正确地对Elasticsearch组件的正常运行至关重要。以下命令操作需要高级权限(root或sudo等):
# 检查的值vm.max_map_count
sysctl vm.max_map_count# 重置vm.max_map_count设置为大于等于262144的值 (如果不是);本机(八张A100的8U机架人工智能一体机)内存2TB , 所以设置100万负载
sysctl -w vm.max_map_count=1048576在 /etc/sysctl.conf 文件里把 vm.max_map_count 的值再相应更新一遍:vm.max_map_count=1048576sysctl -p# 验证限制是否生效
cat /proc/sys/vm/max_map_count
3.2 下载 RAGflow 社区版源代码
git clone https://github.com/infiniflow/ragflow.gitcd ragflow/dockergit checkout -f v0.18.0
3.3 修改 .env 配置文件里 RAGFlow 版本
把 docker/.env 配置文件里,RAGFLOW_IMAGE=infiniflow/ragflow:v0.18.0-slim 修改为 RAGFLOW_IMAGE=infiniflow/ragflow:v0.18.0 ;然后保存。
3.4 修改 RAGflow 对外暴露映射端口(80端口已经分配给 Dify 使用)
(1)修改 docker-compose.yml 默认的端口 80 和 443
(2)修改 docker-compose-gpu.yml 默认端口 80 和 443
3.5 进行构建
# 进入docker目录
cd ragflow/docker# 使用CPU执行嵌入和DeepDoc任务使用下面命令
docker compose -f docker-compose.yml -p ragflow up -d# 使用GPU加速嵌入和DeepDoc任务 (这个命令和上面的命令二选一,或者,把docker-compose-gpu.yml里配置英伟达GPU加速的复制到docker-compose.yml 里也可以)
docker compose -f docker-compose-gpu.yml -p ragflow up -d
3.6 docker-compose.yml 和 docker-compose-gpu.yml 的主要区别
deploy:resources:reservations:devices:- driver: nvidiacount: allcapabilities: [gpu]
3.7 打开浏览器访问 RAGflow 配置账号
由于前面,我们把web端口设置为了38080端口,docker镜像拉取后,等待容器启动完成,在浏览器输入: http://127.0.0.1:38080 即可访问。
四、在 Ubuntu 24.04 LTS 部署 Dify 1.3.1
4.1 克隆 Dify 源代码至本地环境
git clone https://github.com/langgenius/dify.git --branch 1.3.1
4.2 启动 Dify
# 进入 Dify 源代码的 Docker 目录
cd dify/docker# 复制环境配置文件
cp .env.example .env# 修改 .env 配置文件配置,规避插件安装异常将 FORCE_VERIFYING_SIGNATURE=true 修改为 FORCE_VERIFYING_SIGNATURE=false # 启动 Docker 容器
cd dify/docker
docker compose -f docker-compose.yaml -p dify down
git pull origin main
docker compose pull
docker compose -f docker-compose.yaml -p dify up -d

4.3 前往管理员初始化页面设置设置管理员账户
# 本地环境(Dify使用的是默认的80端口,所以访问地址可以省略)
http://localhost/install# 服务器环境
http://your_server_ip/install

4.4 访问 Dify 主页面
# 本地环境(Dify使用的是默认的80端口,所以访问地址可以省略)
http://localhost# 服务器环境
http://your_server_ip
五、Dify 外部知识库对接 RAGflow
为什么要 RAGflow 和 Dify 结合呢?是因为 RAGflow 可以解决 Dify 在RAG 和 知识库解析和检索短板。
5.1 创建 RAGflow 知识库
输入网址:http://localhost:38080 打开ragflow界面,填入注册的账号和密码登录。然后创建供Dify调用的知识库。
5.2 Dify与ragflow联通
同样的我们在浏览器地址栏输入:http://localhost:80 即可打开Dify 。
点击知识库,配置外部知识库。
图中Name填写对应RAGflow即将被调用的知识库名字。
图中API Endpoint填写RAGflow地址,http://RAGflow的IP:38080/api/v1/dify
图中API Key填写RAGflow 的 api key 密钥。
然后,连接外部知识库。
在Dify里进行召回测试,看是否查询RAGflow知识库内容。
--------------------------------------
没有自由的秩序和没有秩序的自由,同样具有破坏性。
相关文章:
在 Ubuntu 24.04 LTS 一台机子上同时部署Dify 1.3.1 和 RAGflow 0.18.0
一、RAGflow 0.18.0 简介 有关 Dify 的简介,可以查看我之前分享的 《在 Ubuntu24.04 LTS 上 Docker Compose 部署 Dify 社区版 1.0.1》文章。RAGFlow是一款基于深度文档理解(deepdoc)构建的开源 RAG引擎。其中,深度文档理解&#…...
小熊派BearPi-Pico H3863(二)环境配置 Ubuntu编译源码与VSCode远程开发指南
BearPi-H3863 Ubuntu编译源码与VSCode远程开发指南 摘要开发环境配置方案选型环境部署实战手册一、基础环境配置1. 镜像准备2. 虚拟机初始化3. 网络异常处理 二、VSCode远程开发配置1. SSH服务验证2. VSCode插件安装3. 远程连接实战4. 项目管理 关键要点总结 摘要 本文针对Bea…...
组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)
首发日期 2025-04-26, 以下为原文内容: 家里的 PC 主机比较多, 如果同时开机, 显示器就不够用了. 因为穷, 窝租住的房间又很小, 放不下很多显示器. 所以, 窝希望买一台支持 分屏 功能的显示器. 最好是 4K 分辨率 (3840x2160) 的屏幕, 然后 4 分屏 (有 4 个 DP 或 HDMI 输入接口…...
SwiftUI 8.List介绍和使用
SwiftUI 的 List 组件用于展示可滚动的内容集合,支持静态或动态数据、交互操作(如点击、滑动删除)、分组、自定义样式等。以下是其详细介绍及使用方法: 一、基本用法 1. 静态列表 直接声明固定内容: struct Content…...
Android Kotlin ViewModel 错误处理:最佳 Toast 提示方案详解
在 Android Kotlin 的 ViewModel 中显示 Toast 提示需要特殊处理,因为 ViewModel 不应该直接持有 Context(避免内存泄漏),且 UI 操作(如 Toast)必须在主线程执行。以下是几种标准解决方案: 方案…...
Vue 集成 wangEditor5 公式编辑器的实现步骤
Vue 集成 wangEditor5 公式编辑器的实现步骤 1. 安装公式依赖库2. 配置公式编辑器插件3. 启用工具栏公式按钮4. 组件模板与事件绑定功能验证与调试注意事项版本兼容性: 1. 安装公式依赖库 安装 KaTeX 或 kityformula:根据项目需求选…...
go语言八股文(五)
1.go的局部变量是分配在栈上还是在堆上 在Go语言中,局部变量的内存分配(栈或堆)由编译器基于逃逸分析(escape analysis)来决定。以下是总结和具体示例: 栈上分配 当局部变量的生命周期严格限定在函数作用…...
C++ 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例)
使用 C 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例),并且使用 Graphviz 库来生成结果图。 在图论中,“边权之和最小” 是最小生成树(MST)的核心目标,其含义和背景可以从以下几个…...
OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介
OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介 0. 前言1. OpenCV 安装与配置1.1 安装 Python-OpenCV1.2 配置开发环境 2. OpenCV 基础2.1 图像读取与显示2.2 图像保存 3. 摄像头实时捕获小结系列链接 0. 前言 OpenCV (Open Source Computer Vision …...
pgrep和pkill命令详解
pgrep 与 pkill 命令详解 一、基础功能 命令作用核心机制pgrep根据条件查找进程ID (PID)通过进程名、用户、终端等属性筛选进程,输出匹配的PID列表pkill根据条件终止进程向符合条件的进程发送信号(默认发送SIGTERM,可指定其他信号&am…...
Python----卷积神经网络(卷积为什么能识别图像)
一、卷积的概念 卷积是一种数学运算,通常用于信号处理和图像分析。在卷积神经网络中,卷积操作用于提取输入数据(如图像)中的特征。通过将输入数据与卷积核(滤波器)进行卷积运算,CNN能够识别图像…...
web3.js 和 ethers.js 的核心区别
1. 核心设计理念 ---------web3.jsethers.js开发背景以太坊基金会官方维护独立开发者创建,社区驱动架构风格集中式对象 (web3 为核心)模块化设计(分离 Wallet/Provider/Contract)包体积较大(1MB)更轻量(压…...
Atcoder Help 有关Atcoder 的介绍-1 涨分规则
AtCoder 的 Rating 计算系统基于改进的 Elo 算法,主要包含以下核心机制: 一、基础计算公式 Rating 是「表现分(Performance)」的加权平均值减去衰减函数 f ( n ) f(n) f(n),其中: 新用户初始 f ( 1 ) 1200 f(1)1200 f(1)120…...
Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)
文章目录 1. 项目准备1.1 创建新项目1.2 添加必要依赖 2. 数据库设计3. 实现数据库3.1 创建实体类 (Entity)3.2 创建数据访问对象 (DAO)3.3 创建数据库类 4. 创建 Repository5. 创建 ViewModel6. 实现 UI 层6.1 创建笔记列表 Activityactivity_notes_list.xmlNotesListActivity…...
K8S学习笔记01
是什么 高可用,可扩展,自动化,容器化,管理多容器 组件 master API server controller manager scheduler etcd node 对应一台机器 负责运行和托管容器化 kubelet container runtime kube-proxy pod 同一个pod内的容器…...
奥威BI+AI数据分析解决方案
在数字化时代,数据已成为企业决策的核心驱动力。随着大数据、云计算、人工智能等技术的快速发展,企业对数据分析的需求日益迫切。奥威BI(Business Intelligence)与AI(Artificial Intelligence)的结合&#…...
第36课 常用快捷操作——用“鼠标右键”退出当前命令
概述 在AD 20软件中,很多的命令都是可以一直连续下去的,比方说放置一个元器件符号,如果你当中不取消的话,那就可以一直执行下去,放完一个接着放下一个,放完一个接着放下一个…… 想要退出这种连续进行的命…...
用Java模拟打字:深入解析 java.awt.Robot 的键盘控制艺术
作为开发者,我们有时会遇到需要自动化用户界面交互的场景,比如自动化测试、脚本编写、或者制作一些辅助工具。而模拟键盘输入,尤其是“打字”,是这类自动化任务中非常基础且常见的一环。 在 Java 中,实现这一目标的利…...
基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计
一、简介: ATSHA204A是Microchip公司生产的一款高性能加密认证芯片,主要特性包括: 基于SHA-256哈希算法的安全认证 4.5KB EEPROM存储空间(可配置为密钥存储、OTP区域等) 唯一的72位序列号 支持I2C和单线接口 工作…...
2.2.1goweb内置的 HTTP 处理程序
net/http 使用源码分析 在 Go 语言的 HTTP 服务器里,HTTP handler 是实现了http.Handler接口的对象。该接口定义如下: type Handler interface {ServeHTTP(ResponseWriter, *Request) }ServeHTTP方法接收两个参数: http.ResponseWriter&am…...
vscode以管理员身份运行报错
1. 问题现象 对vscode设置了管理员权限,但是打开文件时报错或闪退。 2. 解决方法 可以看一下官方网址:[Visual Studio Code on Windows](https://code.visualstudio.com/docs/setup/windows#_unable-to-run-as-admin-when-applocker-is-enabled) 2.1 …...
【Unity】 Dropdown默认选择不选择任何选项
你需要新建一个text文本并将其拖入Placeholder里面,这样你就可以在代码里面设置value-1了,从而实现默认为空...
gem5教程 第七章 如何在 gem 5 中运行我自己的程序
首先,您必须决定是否运行完整系统(FS)或系统调用仿真(SE)。 在 gem5 仿真器中,“完整系统仿真(Full System Simulation, FS)”与“系统调用仿真(System Call Emulation, SE)”是两种不同的仿真模式,各自有其特点和适用场景。下面是对这两种模式的比较: 1. 完整系统仿…...
Java实现基数排序算法
1. 基数排序原理图解 基数排序是一种非比较的排序算法,其核心思想是通过将整数按位数切割成不同的数字,然后按每个位数分别比较。具体步骤如下: 1. 确定最大值:找到数组中的最大值,以确定需要处理的位数。 2. 分配到桶…...
Python项目-支持自然语言处理
研究生组-自然语言处理-第一章节 Python学习,数据挖掘基础 项目地址:pythonbook: 人工智能实战——从 Python 入门到机器学习...
科技助力防灾减灾:卫星电话走进应急救援队伍
在自然灾害与突发事件频发的当下,通信保障已成为应急救援的“生命线”。传统地面通信网络易受极端天气、地形环境等因素制约,而卫星通信技术的突破,尤其是国产天通卫星系统与北斗系统的成熟应用,正推动救援通信体系迈入全天候、无…...
Android adb 安装应用失败(安装次数限制)
adb安装应用失败 前言平台安装失败现象解决 前言 Android Debug Bridge (ADB) 是一个功能强大的命令行工具,用于与 Android 设备通信。 安装 APK 文件: 使用命令 adb install <apk文件路径> 可以将 APK 文件安装到设备上。如果需要覆盖安装&…...
100天精通Python挑战总览 | 零基础到应用实战!
目录 ✨ 为什么发起100天挑战?✨整体学习路线规划第一阶段|基础篇(第1天 - 第50天)第二阶段|应用篇(第51天 - 第100天)Web开发篇爬虫篇数据分析篇AI入门篇 🏆为什么这么划分…...
预训练大模型与元训练大模型在医疗AI项目中的选型对比分析
简要版: 以下是对预训练大模型与元训练大模型(基于元学习/Meta-Learning)在医疗AI项目中选型对比的总结表格: 对比维度预训练大模型元训练大模型(基于元学习)技术基础基于海量通用数据预训练,通过微调适配具体任务(如GPT-4、LLaMA)通过元学习框架训练,支持快速适应新…...
【JavaScript】相等运算符、条件运算符
1、相等运算符 (1)(相等) 相等运算符用来比较两个值是否相等,如果相等会返回true,否则返回false <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"…...
企业用电管理革新利器 —— Acrel-3000 电能管理系统应用解析
电能,以其方便传输、易于转换、便于控制等特性,早已成为广大企事业单位生产、办公的核心能量来源。在 “双碳” 战略目标的宏大背景下,能源结构转型加速推进,电能清洁、高效、零排放的特点愈发凸显。在能源消费侧,“以…...
学生管理系统审计
1.环境搭建 项目地址: https://gitee.com/huang-yk/student-manage 项目下载到本地后IDEA打开,等待项目加载 配置Maven,修改数据库配置文件 然后启动 访问 2.代码审计 1.垂直越权未授权敏感信息泄露 找到拦截器看看对登录做了什么校验 Override public b…...
OpenGL----OpenGL纹理与纹理缓存区
在现代计算机图形学中,纹理(Texture)是一个至关重要的概念。它不仅可以为几何体表面添加细节和真实感,还可以用于实现各种复杂的视觉效果和数据处理。在OpenGL中,纹理的应用范围非常广泛,从基本的颜色映射到高级的阴影映射、环境映射等。本文将深入探讨OpenGL纹理与纹理缓…...
QT开发技术【qcustomplot 曲线与鼠标十字功能】
一、效果 二、代码 #include "obsersingle.h" #include "ui_obsersingle.h" #pragma execution_character_set("utf-8")右键菜单acion回调 // 适应窗口大小 void ObserSingle::RescaleActionFun::fun(ObserSingle *form) {// 自适应y轴数据范围…...
[特殊字符] 大模型后训练指南:从毛坯引擎到智能助手的进化之路 [特殊字符]️
最近看了MIT 6.S191 2025这个讲座感觉讲的挺好的,然后写了一篇总结,大家感兴趣的话可以直接看视频,链接我放到文章最后。 🎯 讲座核心 这个讲座主要讲的是,当我们有了一个基础的大语言模型(就像刚出厂的毛…...
厚铜pcb生产厂家哪家好?
在为您的项目选择厚铜PCB供应商时,技术实力、生产经验与交付能力是决定产品可靠性的关键。随着新能源汽车、工业电源、5G通信等领域对高电流承载、高效散热的需求激增,厚铜PCB(铜厚3oz以上)的工艺门槛不断提升。本文结合行业头部企…...
【重走C++学习之路】22、C++11语法
目录 一、列表初始化 1.1 {}初始化 1.2 std::initializer_list 二、变量类型推导 2.1 auto 2.2 decltype 三、右值引用和移动语义 3.1 左值与左值引用 3.2 右值与右值引用 3.3 左值引用与右值引用比较 3.4 右值引用使用场景和意义 3.5 move 3.6 完美转发和万能引…...
Spring Security授权管理
授权是Spring Security的核心功能之一,是根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则可正常访问,没有访问的权限时则会被拒绝访问。认证是为了保证用户身份的合法性,而授权则是为了更细粒度地对隐私数据进行划分…...
2025A卷-正整数到Excel编号之间的转换
题目描述 用过 excel 的都知道excel的列编号是这样的: a b c … z aa ab ac … az ba bb bc … yz za zb zc … zz aaa aab aac … 分别代表以下编号: 1 2 3 … 26 27 28 29 … 52 53 54 55 … 676 677 678 679 … 702 703 704 705 … 请写个函数&…...
算法设计与分析(期末试卷)
目录 一、频度计算(15 分) 二、项目工期问题(20 分) 三、TSP 问题的贪心算法(15 分) 四、“秤心如意”(15 分) 五、工作指派问题(20 分) 六、计算复杂度…...
springboot(2.6.13)自定义用户授权管理
1.自定义用户访问控制 a.重写configure(HttpSecurity http)方法 在自定义配置类SecurityConfig中重写 Override protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/deta…...
JavaWeb:vueaxios
一、简介 什么是vue? 快速入门 <!-- 3.准备视图元素 --><div id"app"><!-- 6.数据渲染 --><h1>{{ msg }}</h1></div><script type"module">// 1.引入vueimport { createApp, ref } from https://unpkg.com/vu…...
uniapp常用
1.下载文件带进度提示 <template> <view> <button click"startDownload">下载文件</button> <progress :percent"progress" stroke-width"3" /> </view> </template> <…...
etcd 的安装及使用
介绍 Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接 watch 功能,能够及时收到数据变化通知,相较于 Zookeepe…...
uni-app vue3 实现72小时倒计时功能
功能介绍 ,数组项有一个下单时间 ,比如今天下单在72小时内可以继续支付,超过则默认取消订单 页面按钮处 加上倒计时 <!-- 倒计时 --> <text v-if"item.timeLeft > 0">{{ formatTime(item.remaining) }}</text&g…...
【C语言】初阶算法相关习题(二)
个人主页:夜晚中的人海 文章目录 ⭐一、两数之和🏠二、珠玑妙算🎡三、寻找奇数🚀四、截取字符串🎉五、寻找峰值 ⭐一、两数之和 题目描述:两数之和 解题思路: 1.先创建一个动态分配的数组ret&a…...
Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理
Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 目录 Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 一、简单介绍 二、Flutter 和 Android 原生之间的数据…...
STM32的SysTick
SysTick介绍 定义:Systick,即滴答定时器,是内核中的一个特殊定时器,用于提供系统级的定时服务。该定时器是一个24位的递减计数器,具有自动重载值寄存器的功能。当计数器到达自动重载值时,它会自动重新加载…...
【JS事件循环机制event-loop】
目录 0、总结1、Event-Loop 概念2、宏任务-微任务3、事件循环执行机制4、调用栈5、示例 0、总结 Tasks execute in order, and the browser may render between them 【宏任务按序执行,浏览器可以在它们之间进行渲染】Microtasks execute in order, and are execut…...
对比N+1查询和关联聚合查询
通常我们管第一种模式叫 “N1 查询”,第二种叫 “关联聚合查询”。下面从几个角度来比较,帮助你做出选择。 1. 性能与资源消耗 方案SQL 语句数网络往返次数数据库负载Java 处理N1 查询(先查项目,再遍历项目查设备状态数ÿ…...