欢迎光临
我们一直在努力

Chatbot 中的聊天记录是如何显示出来的?—— Message Rendering 学习总结

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 对话。

赞(0)
未经允许不得转载:171主机测评 » Chatbot 中的聊天记录是如何显示出来的?—— Message Rendering 学习总结
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址