【RuoYi-Eggjs】:基于 Handlebars 模板引擎实现服务端渲染

宝塔 Apache 部署 Node.js 项目:挂到子路径,不影响同机其他站点 阅读详情

【RuoYi-Eggjs】:基于 Handlebars 模板引擎实现服务端渲染

前言

在 Web 开发中,选择合适的模板引擎能让前端开发事半功倍。Handlebars 作为一款轻量级的语义化模板引擎,以其简洁的语法和强大的功能深受开发者喜爱。[ruoyi-eggjs-handlebars](https://github.com/undsky/ruoyi-eggjs-handlebars) 就是为 Egg.js 框架量身定制的 Handlebars 插件,让你在 Egg.js 中也能享受 Handlebars 的便利。

为什么选择 Handlebars?

📝 语法简洁直观

Handlebars 使用双花括号 {{}} 作为标记,语法清晰易懂:

<h1>Hello {{name}}!</h1>
<p>年龄:{{age}} 岁</p>

🔒 逻辑分离

Handlebars 强调"无逻辑"模板(logic-less),将业务逻辑与视图层严格分离,模板只负责展示数据,逻辑处理在 Controller 或 Service 层完成。这种设计让代码结构更清晰、更易维护。

🎯 功能强大

虽然是"无逻辑"模板,但 Handlebars 通过 Helper 机制提供了丰富的功能扩展,既保持了模板的简洁性,又满足了实际开发的需求。

核心特性

🚀 性能优化

插件针对不同环境做了优化:

  • 开发环境:每次渲染时重新加载模板,支持热更新
  • 生产环境:启动时预编译所有模板,缓存在内存中,提升渲染性能

🧩 Partials 支持

Partials(代码片段)功能让你可以复用页面的公共部分,比如头部、尾部、侧边栏等:

<!-- app/view/partials/header.html -->
<header>
  <h1>{{title}}</h1>
  <nav>...</nav>
</header>

<!-- 在其他模板中使用 -->
{{> header}}

🛠️ 内置实用 Helper

插件内置了几个常用的 Helper,开箱即用:

1. xif - 强化的条件判断

支持复杂表达式,比原生的 {{#if}} 更强大:

{{#xif "age > 18"}}
  <p>成年人</p>
{{else}}
  <p>未成年</p>
{{/xif}}

{{#xif "score >= 60 && score < 80"}}
  <p>及格</p>
{{/xif}}

2. math - 数学运算

在模板中直接进行数学计算:

<p>原价:{{price}}</p>
<p>折后价:{{math price "*" 0.8}}</p>
<p>库存剩余:{{math total "-" sold}}</p>

3. link - CSS 引入

快速引入样式文件,自动处理时间戳:

{{link "/static/css/style.css"}}
<!-- 输出: <link rel="stylesheet" href="/static/css/style.css?ts=1234567890"> -->

4. script - JS 引入

快速引入脚本文件,同样支持时间戳:

{{script "/static/js/app.js"}}
<!-- 输出: <script src="/static/js/app.js?ts=1234567890"></script> -->

时间戳功能:默认开启,可有效避免浏览器缓存导致的静态资源更新问题。

快速上手

安装

npm i ruoyi-eggjs-handlebars --save

配置

1. 启用插件

// config/plugin.js
exports.handlebars = {
  enable: true,
  package: "ruoyi-eggjs-handlebars",
};

2. 基础配置

// config/config.default.js
config.handlebars = {
  options: {
    data: true,
    compat: true,
    noEscape: false,        // 是否转义 HTML
    strict: false,          // 严格模式
    preventIndent: true,    // 防止自动缩进
  },
  runtimeOptions: {
    allowProtoMethodsByDefault: true,
    allowProtoPropertiesByDefault: true,
  },
  partialsPath: null,       // Partials 目录,默认为 view.root/partials
  ts: true,                 // 静态资源是否添加时间戳
};

使用示例

Controller 层

// app/controller/home.js
class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    await ctx.render('index.html', {
      title: '欢迎使用 Handlebars',
      user: {
        name: '张三',
        age: 25,
      },
      products: [
        { name: '商品A', price: 99 },
        { name: '商品B', price: 199 },
      ],
    });
  }
}

模板文件

<!-- app/view/index.html -->
<!DOCTYPE html>
<html>
<head>
  <title>{{title}}</title>
  {{link "/static/css/style.css"}}
</head>
<body>
  {{> header}}
  
  <main>
    <h2>用户信息</h2>
    <p>姓名:{{user.name}}</p>
    <p>年龄:{{user.age}}</p>
    
    {{#xif "user.age >= 18"}}
      <p class="badge">成年用户</p>
    {{/xif}}
    
    <h2>商品列表</h2>
    <ul>
      {{#each products}}
        <li>
          {{this.name}} - 
          <span class="price">¥{{this.price}}</span>
          <span class="discount">折后价:¥{{math this.price "*" 0.8}}</span>
        </li>
      {{/each}}
    </ul>
  </main>
  
  {{> footer}}
  {{script "/static/js/app.js"}}
</body>
</html>

实战场景

场景 1:后台管理系统布局

后台系统通常有固定的布局结构,使用 Partials 可以很好地复用:

app/view/
├── partials/
│   ├── header.html      # 顶部导航
│   ├── sidebar.html     # 侧边栏
│   └── footer.html      # 底部
├── layout.html          # 布局模板
├── user/
│   ├── list.html        # 用户列表
│   └── detail.html      # 用户详情
└── dashboard.html       # 仪表盘

布局模板

<!-- app/view/layout.html -->
<!DOCTYPE html>
<html>
<head>
  <title>{{title}} - 管理后台</title>
  {{link "/static/css/admin.css"}}
</head>
<body>
  {{> header}}
  
  <div class="container">
    {{> sidebar}}
    
    <main class="content">
      {{{body}}}  <!-- 三个花括号表示不转义 HTML -->
    </main>
  </div>
  
  {{> footer}}
  {{script "/static/js/admin.js"}}
</body>
</html>

场景 2:数据列表渲染

使用 Handlebars 的 {{#each}} 和内置 Helper 轻松实现数据列表:

<!-- app/view/user/list.html -->
<div class="user-list">
  <h2>用户列表(共 {{users.length}} 人)</h2>
  
  <table>
    <thead>
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>状态</th>
        <th>操作</th>
      </tr>
    </thead>
    <tbody>
      {{#each users}}
        <tr>
          <td>{{math @index "+" 1}}</td>
          <td>{{this.name}}</td>
          <td>{{this.age}}</td>
          <td>
            {{#xif "this.age >= 18"}}
              <span class="badge success">成年</span>
            {{else}}
              <span class="badge warning">未成年</span>
            {{/xif}}
          </td>
          <td>
            <a href="/user/{{this.id}}">查看</a>
            <a href="/user/{{this.id}}/edit">编辑</a>
          </td>
        </tr>
      {{/each}}
    </tbody>
  </table>
</div>

场景 3:条件渲染

使用 xif Helper 实现复杂的条件判断:

<!-- app/view/product/detail.html -->
<div class="product-detail">
  <h1>{{product.name}}</h1>
  <p class="price">¥{{product.price}}</p>
  
  <!-- 库存状态显示 -->
  {{#xif "product.stock > 10"}}
    <span class="stock success">库存充足</span>
  {{else}}
    {{#xif "product.stock > 0"}}
      <span class="stock warning">仅剩 {{product.stock}} 件</span>
    {{else}}
      <span class="stock danger">已售罄</span>
    {{/xif}}
  {{/xif}}
  
  <!-- 折扣信息 -->
  {{#xif "product.discount < 1"}}
    <div class="discount-info">
      <p>原价:¥{{product.price}}</p>
      <p>折扣价:¥{{math product.price "*" product.discount}}</p>
      <p>节省:¥{{math product.price "-" (math product.price "*" product.discount)}}</p>
    </div>
  {{/xif}}
</div>

最佳实践

1. 合理组织 Partials

将公共部分抽取为 Partials,提高代码复用性:

partials/
├── common/
│   ├── header.html      # 页头
│   ├── footer.html      # 页脚
│   └── meta.html        # Meta 标签
├── components/
│   ├── pagination.html  # 分页组件
│   ├── breadcrumb.html  # 面包屑
│   └── alert.html       # 提示框
└── forms/
    ├── input.html       # 输入框
    └── select.html      # 下拉框

2. 善用内置 Helper

充分利用 xif 和 math 简化模板逻辑:

<!-- ✅ 推荐:使用 xif 进行复杂判断 -->
{{#xif "score >= 90"}}
  <span class="grade">优秀</span>
{{else}}
  {{#xif "score >= 60"}}
    <span class="grade">及格</span>
  {{else}}
    <span class="grade">不及格</span>
  {{/xif}}
{{/xif}}

<!-- ❌ 不推荐:在 Controller 中预处理 -->
<!-- 这会增加 Controller 的复杂度 -->

3. 静态资源管理

合理使用时间戳功能,避免缓存问题:

// config/config.default.js
config.handlebars = {
  ts: process.env.NODE_ENV === 'production',  // 生产环境启用
};

4. 避免过度嵌套

虽然 Handlebars 支持嵌套,但过度嵌套会降低可读性:

<!-- ✅ 推荐:扁平化结构 -->
{{#each users}}
  {{> userCard}}
{{/each}}

<!-- ❌ 不推荐:过度嵌套 -->
{{#each categories}}
  {{#each this.products}}
    {{#each this.variants}}
      ...
    {{/each}}
  {{/each}}
{{/each}}

配置参数详解

编译选项(options)

参数类型默认值说明
dataBooleantrue是否启用 @data 跟踪
compatBooleantrue允许递归查找
noEscapeBooleanfalse是否禁用 HTML 转义
strictBooleanfalse严格模式(缺失参数时抛异常)
preventIndentBooleantrue防止自动缩进
ignoreStandaloneBooleantrue不移除单独的标签

运行时选项(runtimeOptions)

参数类型默认值说明
allowProtoMethodsByDefaultBooleantrue允许访问原型方法
allowProtoPropertiesByDefaultBooleantrue允许访问原型属性

插件选项

参数类型默认值说明
partialsPathString/ArraynullPartials 目录路径
tsBooleantrue静态资源是否添加时间戳

总结

ruoyi-eggjs-handlebars 是一个功能完善、性能优异的 Egg.js 模板引擎插件,它的优势在于:

  • 简单易用:语法简洁,学习成本低
  • 性能优秀:生产环境预编译,开发环境热更新
  • 功能实用:内置 Helper 满足常见需求
  • 代码复用:Partials 机制支持组件化开发
  • 灵活配置:丰富的配置项,适应不同场景

如果你正在使用 Egg.js 开发传统的服务端渲染应用,或者需要一个轻量级的模板引擎来生成 HTML 邮件、导出报表等,ruoyi-eggjs-handlebars 都是一个不错的选择!


ASP.NET前后端用户安全管理技术全解析 本文系统介绍ASP.NET Core中用户管理的核心技术,涵盖注册登录、密码加密(PBKDF2)、JWT身份认证及AccessToken/RefreshToken机制。通过轻量级Web API项目演示,强调安全实践:密码明文不存储,使用加盐哈希;登录后生成带有效期的JWT令牌,结合短时效AccessToken与安全存储的RefreshToken实现无状态身份验证,提升系统安全性与用户体验。 阅读详情

相关推荐

使用Docker搭建SearXNG搜索引擎

【代码】使用Docker搭建SearXNG搜索引擎。

janthinasnail的博客 1168

Windows开发工具环境管理:Git、Node.js、Python多版本与PATH冲突排查

Windows开发工具安装成功却无法运行,或始终调用错误版本?本文围绕Git、Node.js、Python及Codex CLI,系统讲解PowerShell命令解析、PATH环境变量、版本管理器冲突、npm脚本入口、Python install manager与虚拟环境管理。通过可复制的排查命令、Mermaid流程图、只读诊断工具和离线PATH实验,帮助开发者建立稳定、清晰、可复现的Windows开发工具链。

flyingonpine的博客 694

WinServer 2012 R2 搭建 AD 单域多站点 及 DNS各站点的子网掩码排序调整

WinServer 2012 R2 搭建 AD 单域多站点 及 DNS各站点的子网掩码排序调整

一直被模仿,从未被超越 5535

Node.js CLS 布局偏移检查:图片不标尺寸,页面内容跳来跳去

本文介绍一个无依赖的 Node.js 工具,用于检查网页中导致累积布局偏移(CLS)的图片和 iframe 缺失尺寸问题。通过原生 fetch 抓取页面,匹配未声明 width/height 的 img 与 iframe,快速定位布局跳动风险点。建议为所有媒体元素显式设置尺寸,提升页面稳定性与 SEO 排名。

SEO_juper的博客 174

深度学习在地质勘探中的应用:使用Python构建卷积神经网络进行地震数据分析

在本文中,我们介绍了如何利用深度学习技术,特别是卷积神经网络(CNN),来处理和分析地震数据。我们使用了Python编程语言和TensorFlow框架构建了一个CNN模型,并使用地震数据进行了训练和评估。在本文中,我们将探讨如何利用深度学习技术,特别是卷积神经网络(CNN),来处理和分析地震数据。首先,我们需要获取地震数据集。通过本文的介绍,希望您能对深度学习在地质勘探领域的应用有更深入的了解,并能够应用这些技术来解决实际问题。在准备好地震数据和构建CNN模型后,我们需要将数据分为训练集和测试集。

斌擎科技 1472

最新Python爬虫实战(入门爬虫篇)——案例15:微博热搜数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过 Python 爬虫技术,成功实现了对微博热搜 API 接口数据的批量爬取与 Excel 保存。代码采用模块化设计,包含接口请求、JSON 解析、数据提取、Excel 持久化等完整流程;通过模拟真实浏览器的请求头和 cookies,有效规避基础反爬策略,保证请求的稳定性。整个爬虫逻辑遵循“API请求 → JSON解析 → 数据提取 → 保存到Excel”的标准流程,与异步加载类网站的爬取范式高度一致。AJAX 接口抓包与分析。

努力让自己发光,对的人才能迎着光而来 7万+

用 Node.js 搭建 EPUB 问答助手:从文本切片、向量检索到 RAG

本文用 Node.js 串起了一个 EPUB 问答助手的完整链路:用 adm-zip 与 cheerio 解析电子书,按句子边界做带重叠的文本切片,用本地 Embedding 模型建立向量索引,通过余弦相似度召回相关片段,最后把片段拼进提示词交给大模型生成有依据的回答。整条链路没有黑盒,每个环节都可以单独替换和调优。下一步可以尝试的方向包括:引入 BM25 与向量检索的混合召回、增加重排序模型、把索引迁移到向量数据库,以及为回答补充更精确的页码或段落定位。

m0_62937412的博客 295

YOLOv9原创自研:卷积魔改 | 一种新颖的风车形卷积(PConv)融合注意力机制,加强微弱小目标检测能力

为了进一步提升小目标检测能力,风车形卷积(PConv)融合注意力机制进一步提升小目标检测能力

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 362

Node.js 标题层级跳级检查:H1 直接蹦到 H3,机器读着费劲

本文介绍一个无需依赖的 Node.js 工具,用于检查网页标题层级是否跳级(如 H1 直接到 H3),确保内容结构清晰。工具通过原生 fetch 获取页面内容,解析所有标题并按顺序输出,标出跳级位置。强调标题应逐级递进、每页仅一个 H1、标题需有实际内容。合理层级有助于搜索引擎和 AI 理解页面结构,提升可读性与排名。运行命令:node heading-check.js https://example.com/page。

SEO_juper的博客 210

讲透 ABAP CDS 注解名称:简单名、结构化名、@ 与 @<、作用域与分组

本文从开发者角度梳理ABAP CDS注解的命名规则与实战写法,重点解析: 语法规则:@与@<的使用场景、结构化命名规范、作用域唯一性要求 评估机制:ABAP运行时与组件框架的注解处理差异 分组技巧:花括号分组简化重复前缀的书写 实战示例:包含完整CDS View Entity(演示注解分组与@<用法)和ABAP报表(读取打印注解) 常见问题:命名错误导致激活失败、框架忽略等注意事项 最后通过航空预订统计案例,展示如何结合多种注解类型实现业务需求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 262

llama2-7b下载并转llama-2-7b-hf

④输入https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py会下载 convert_llama_weights_to_hf.py 文件,我们需要用到这个文件将llama2-7b转成llama-2-7b-hf。③下载完之后是这四个文件,这里我是在windows操作系统中安装的WSL,没有linux操作系统,没办法。

wenling54321的博客 1031

TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践

本文分析了前端路由框架升级带来的隐性风险,以 TanStack Router 2026 年更新为例,揭示现代路由系统深度参与构建流程的特性。文章指出,依赖升级不仅影响运行时行为,更可能改变代码分割、模块加载与构建输出。重点讨论了 Node.js 版本兼容性(要求 ^20.19.0 或 >=22.12.0)、Vite 5 不再支持、esbuild 自动分割配置的显式报错等变化,并强调“构建成功”不等于“优化生效”。通过实操示例,建议开发者通过 engines 字段、CI 检查和环境一致性管理,将路由、构建工具

weixin_47502228的博客 828

第1课:开篇扫盲——OpenClaw是什么?能帮你解决什么问题?(入门必看)

核心目标:学会安装、卸载、管理OpenClaw技能,自定义AI代理的性格与权限,让AI贴合自己的使用习惯。核心内容技能市场详解:ClawHub市场核心技能分类(办公、学习、开发、生活),热门技能推荐(web-search、文件处理、邮件管理)[superscript:3][superscript:4]。技能安装与卸载:终端命令实操(openclaw skill install/uninstall),技能更新与版本管理[superscript:3]。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1758

IT日报|2026-11-10:Node.js 安全更新预告、GitHub 密钥扫描、AI 审查指标

2026 年 11 月 10 日 IT日报聚焦运行时安全、代码供应链与 AI 开发治理。Node.js 官方预告 11 月 11 日前后发布安全更新,涉及 22、24、26 三条维护线;GitHub 扩充密钥扫描能力,并为 Agent Package Manager 引入 Dependabot 版本更新支持。此外,Copilot 代码审查新增反馈处理率与遥测质量指标,Pull Request 页面也迎来公开预览改版。本文结合官方公告,分析这些变化对开发、协作与安全运维的实际影响。

代码不止,探索不息 342

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

从组卷到阅卷:基于 Node.js + Vue3 的在线考试管理系统全栈实践(含深度学习文档总结)

本项目构建了一个覆盖题库管理、组卷考试、在线答题、自动评分与人工阅卷、成绩统计的完整闭环在线考试系统,基于Node.js全栈技术实现。通过前后端分离架构,结合Express、Vue 3、MySQL与RBAC权限体系,解决了题目分散、组卷低效、权限混乱等真实业务痛点,实现了从出题到分析的全流程数字化与可追溯,具备企业级开发实践价值。

Json的知识梦工厂 514

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Node.js AI 就绪度体检:一个脚本查清页面有没有为 AI 爬虫准备好

本文介绍一个无需依赖的 Node.js 脚本,一键检测网页对 AI 爬虫的友好度。通过检查 robots.txt 是否允许 GPTBot/ClaudeBot、是否存在 llms.txt、结构化数据(JSON-LD/FAQ)、标题层级与正文字数,全面评估页面的 AI 就绪度,助力内容被 AI 正确抓取与理解。

SEO_juper的博客 236

Node.js 10min 完成批量新增/延期 500+ 数据:三段式回退链路处理,将“已存在”转延期

没有幂等的写接口,就用"业务错误码"当哨兵。不代表失败,message里的"已存在"才是真正的分岔点。把这类人类文案抽成配置,比硬编码在 if 里稳。降级链路要有终点。新增 → 查询 → 延期是三段,每一段都要有"拿不到结果怎么办"的显式分支,而不是一路?点到黑。模糊查询必须二次精确匹配。plate参数看着是唯一键,实际不是;这一行是防延错车的最后一道闸。Excel 的日期永远是数字。是标准解法,加上"抽 10 条比对原表"的验收动作。幂等设计靠"有效期一致则跳过"。

qnxb0628的博客 408

成为全栈·基础补充·Node.js 运行时:事件循环与异步

Node.js 如何在一个主 JavaScript 执行线程上处理大量网络请求?本文解释同步阻塞、异步 I/O、事件循环、Promise 微任务、libuv 线程池和 CPU 并行的区别,并说明 async/await 不会自动开启线程。文章还介绍异步错误、超时、取消、性能诊断和 Worker Threads 的适用边界,最后与 Go goroutine 做概念对照。

FungLeo's Blog 290

Node.js + Vue3 全栈实战:社区志愿者服务管理系统(含深度学习文档)

基于Node.js+Express与Vue3+MySQL的志愿者服务管理系统,实现活动发布、在线报名、签到签退、时长自动统计等全生命周期管理。采用前后端分离架构,集成JWT认证、RBAC权限控制、菜单/按钮级权限管理,保障系统安全。支持管理员与志愿者双角色协同,解决信息分散、审核低效、时长出错等问题,具备高可扩展性与教学实践价值,适合作为全栈开发实战项目。

Json的知识梦工厂 138

SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的

# SpringBoot 新闻推荐系统:88个Java文件105个接口,首页推荐位是后端按点击数排出来的 > 这是一套基于 Spring Boot 的新闻推荐系统源码,配套 `db.sql` 建表脚本,业务覆盖新闻发布、排行榜管理、评论回复、点赞点踩、收藏夹和轮播图配置。形态是**前后台双端**:前台是读者用的 layui 静态站,后台是管理员用的 Vue 单页应用(编译产物已嵌在工程里)。最值

面朝大海 255

BLG大战T1导致应用大规模启动

2026年11月9日,BLG对战T1赛事结束后4小时,因iOS灵动岛功能特性引发大规模应用后台启动。赛事期间用户开启灵动岛,赛后系统推送结束消息,但锁屏UI延迟4小时集中移除,触发大量客户端后台唤醒,导致登录态续期、设备指纹等服务告警。经排查,问题仅限iOS端,根源为灵动岛默认4小时后移除锁屏界面时自动唤醒应用。优化措施包括:临时扩容、推送打散(多通道串行+时间错峰)、客户端识别并保护后端请求,有效缓解压力。

weixin_42448366的博客 201

【寻币打靶笔记】服务端模板注入(SSTI)练习:Jinja2指纹识别、Python对象链遍历与RCE

寻币xuncoin靶场模板注入(template-injection)房间打靶笔记,记录用{{7*'7'}}区分Jinja2与Twig、导出Flask config敏感配置、Python魔术方法继承链与self.__init__.__globals__任意文件读取和os.popen执行命令,以及排查邮件主题行旁路接口的过程。

QAQerji的博客 195

HTML+CSS+JS对话式实战(5)-活动管理页之查看报名名单的实现

本文实现活动管理中的“查看报名名单”功能,通过POST接口 /activity/getSignList 根据活动ID查询报名信息,返回统一格式数据。前端在活动列表页新增【查看报名】按钮,点击后弹出独立窗口展示报名人员列表,支持空数据提示。使用 postRequest 封装请求,动态渲染表格,逻辑清晰可扩展。测试验证了正常、空名单及错误场景,最终优化弹窗样式,提升用户体验。

编程副队长 212

AMD显卡上的 ROCm、HIP 与 Vulkan 是什么?它们对大模型推理起什么关键作用?

ROCm 是 AMD 的GPU计算平台,支撑大模型推理框架运行;HIP 是类CUDA的编程接口,决定算子性能上限;Vulkan 为无ROCm环境下的备选推理路径。在R9700等专业卡上,优先部署ROCm(HIP后端)以获最佳性能,支持量化加速与多卡扩展;仅当环境受限时使用Vulkan保底。三者关系:ROCm为平台,HIP为语言,Vulkan为通用后备。

Denuin多啦咧梦的专栏 361

【AI】Agent 全栈进阶|AgentScope 沙箱源码解析

本文基于AgentScope源码,解析沙箱机制在DockerWorkspace中的实现原理。沙箱通过隔离执行环境,限制Agent对宿主机的副作用,保障安全;统一根路径/workspace,支持技能、会话与数据隔离,并借助MCP Gateway实现容器内进程通信。核心设计包括Backend抽象层、生命周期模板、目录结构规范及中转通信机制,实现权限与隔离解耦,适用于生产级Agent安全运行场景。

qq_45797138的博客 323

流式输出 SSE:实现 AI 对话打字机效果后端开发

摘要解决传统 HTTP 请求在 LLM 长文本生成时导致的客户端长时间阻塞与 TTFT 极高的问题。适用于需为 AI 应用提供打字机效果、优化交互体验的后端开发工程师。读完可获得基于 FastAPI 与 SSE(Server-Sent Events)技术的流式响应实现代码、协议规范及生产环境避坑指南。关键词SSE、流式输出、FastAPI、打字机效果、TTFT、大模型推理背景与问题大模型(LLM)生成完整回复通常耗时数秒至数十秒,传统请求-响应模型导致用户界面长时间无响应,体验极差。

2402_85729970的博客 184
上一篇: 【RuoYi-Eggjs】:缓存,让你的应用飞起来
下一篇: 【AI工具箱】Docker:便捷的运行你的AI工具
undsky_
博客等级 码龄20年 6粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

undsky_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值