Chatbot 中的聊天记录是如何显示出来的?—— Message Rendering 学习总结
在开发 KK Chat 的过程中,我终于把聊天记录完整显示到了网页上。
表面上只是把一条消息放到页面里,但真正实现之后才发现,里面涉及了 DOM、JavaScript、HTML、CSS、事件处理等很多知识点。
今天就总结一下 Message Rendering(消息渲染)。
为什么需要 Message Rendering?
当用户发送一句话:
你好
如果只是:
console.log("你好")
浏览器控制台能看到。但是网页上什么都没有。
所以需要把消息:
渲染(Render) 到 HTML 页面。
整个流程其实就是:
用户输入
↓
JavaScript 获取内容
↓
创建消息元素
↓
插入聊天区域
↓
浏览器重新渲染页面
所以 Message Rendering 的本质就是:
把 JavaScript 中的数据变成用户真正能看到的网页内容。
浏览器页面其实就是 DOM
很多刚开始学前端的人都会疑惑:HTML 为什么能够被 JavaScript 修改?
原因就是:浏览器读取 HTML 后,会生成一棵树:
Document
├── body
│ ├── div
│ ├── input
│ └── button
这棵树叫:
DOM(Document Object Model)
JavaScript 操作的其实不是 HTML 文件,
而是:
DOM 树。
所以:
HTML
↓
DOM
↓
JavaScript 修改 DOM
↓
浏览器重新绘制页面
如何创建一条聊天消息?
例如:
你好
对应网页就是:
<div class="user-message">
你好
</div>
JavaScript 可以动态创建:
const message = document.createElement("div");
message.className = "user-message";
message.textContent = "你好";
这里发生了三件事情:
第一:创建一个 div
第二:添加样式
第三:放入消息内容
这时候,消息还没有出现在网页。
appendChild() —— 放进聊天窗口
创建只是第一步。
还要把它放进聊天区域:
chatBox.appendChild(message);
可以理解成:
聊天窗口
├── 第一条消息
├── 第二条消息
└── 第三条消息
每调用一次:
appendChild()
都会把新的消息放到最后,于是聊天记录越来越长。
为什么消息能够左右显示?
很多聊天机器人都是:
我 AI
其实不是 JavaScript 实现的。
真正控制布局的是:CSS 。
例如:
.user-message{
align-self: flex-end;
}
.ai-message{
align-self: flex-start;
}
JavaScript 只负责:
这是用户消息
或者
这是 AI 消息
CSS 再决定:
它应该显示在哪。
所以:
JavaScript 负责逻辑,CSS 负责样式。
为什么发送一条消息页面立刻更新?
例如:
发送
↓
马上出现聊天气泡
很多人会觉得:是不是整个网页刷新了?
其实没有。
浏览器只会 重新绘制发生变化的 DOM。
所以:
新增一个 div
↓
浏览器重新渲染
↓
聊天框更新
整个页面不会刷新。
这也是现代 Web 应用流畅的原因。
在 KK Chat 中的流程
结合自己的项目
整个发送流程就是:
输入内容
↓
点击发送
↓
JavaScript 获取输入
↓
创建用户消息
↓
appendChild()
↓
立即显示
↓
调用后端 API
↓
等待 AI 回复
↓
创建 AI 消息
↓
再次 appendChild()
↓
页面更新
整个聊天,其实就是不断重复:
创建消息
↓
渲染消息
↓
追加消息
所以 Message Rendering 是整个 ChatBot 前端最核心的部分之一。
Message Rendering 与 REST API 的关系
之前总结过 REST API 负责:
浏览器
↓
Python 后端
↓
AI
而今天学习的 Message Rendering:
负责:
AI 返回数据
↓
JavaScript
↓
聊天窗口
可以理解成:
REST API
负责通信
↓
Message Rendering
负责显示
一个负责"拿数据",
一个负责"把数据展示出来"。
二者缺一不可。
今天遇到的问题
开发过程中,我也遇到了一些典型问题。
1. 消息创建了但页面没有显示
原因:忘记调用:
appendChild()
对象虽然创建成功,但没有加入 DOM,自然不会显示。
2. 消息全部挤在一起
原因:
CSS 没有设置聊天布局。
后来通过不同的 class 分别控制用户消息和 AI 消息的位置,聊天界面才更符合实际使用习惯。
3. 用户消息和 AI 消息混在一起
开始时所有消息都使用同一个样式。
后来分别使用:
user–message
ai–message
不同 class,让聊天界面更加清晰。
今天学到了什么
今天最大的收获不是学会了几个 JavaScript API,而是理解了浏览器是如何把数据真正显示出来的。
总结一下今天掌握的知识点:
- Message Rendering(消息渲染)
- DOM(文档对象模型)
- document.createElement()
- appendChild()
- textContent
- CSS 控制消息布局
- JavaScript 与 CSS 的职责划分
- 浏览器局部渲染机制
- ChatBot 消息显示完整流程
总结
开发聊天机器人时,我越来越发现,一个完整的 ChatBot 不只是调用一次大模型 API。
从用户输入,到前后端通信,再到消息渲染,每一个环节都缺一不可。
今天学习的 Message Rendering,让我真正理解了 JavaScript 如何操作 DOM,把数据转换成网页内容。
这部分虽然属于前端基础,但却是所有聊天应用的核心能力之一。只有把消息正确地渲染到页面上,用户才能真正完成一次完整、流畅的 AI 对话。




