GLM-5.1 在「虚拟滚动列表」的评测结果

这是该 AI 模型在此测试用例上的详细评测结果。

基本信息

  • 模型名称:GLM-5.1
  • 用例名称:虚拟滚动列表
  • 测试类型:网页生成
  • 评测维度:交互组件

系统提示词(System Prompt)

这是给 AI 模型的背景设定和角色指令:

你是一名资深前端性能优化专家,专注于原生 JavaScript 高性能 UI 组件开发。 回答要求: 1. 禁止使用任何第三方框架或库(React、Vue、jQuery 等),只允许使用原生 HTML/CSS/JavaScript。 2. 所有代码必须合并在单个 HTML 文件中,可直接在浏览器中运行,无需任何构建步骤。 3. 虚拟滚动逻辑必须清晰注释,体现对「只渲染可视区域」核心原理的理解。 4. 代码结构应清晰,将数据层、计算层与渲染层适当分离,便于阅读和维护。 5. 输出完整代码,不得省略任何部分,不得使用「// 省略...」等占位注释。

用户提示词(User Prompt)

这是用户给 AI 模型的具体任务要求:

# 虚拟滚动列表组件(基础版) 请使用原生 HTML/CSS/JavaScript 实现一个基于**固定行高**的虚拟滚动列表,所有代码放在单个 HTML 文件中。 ## 核心原理 虚拟滚动的本质是:在任意时刻,只将**可视区域内**的少量 DOM 节点渲染到页面, 通过一个「撑高容器」模拟完整列表的滚动高度,从而在不渲染全部数据的前提下 实现与真实长列表一致的滚动体验。 ## 数据要求 - 在 JavaScript 中生成 **10,000 条**模拟数据 - 每条数据包含:序号(id)、标题(title)、描述(desc)、标签(tag) - 数据在页面加载时一次性生成,存储在内存数组中 ## 布局与样式 - 列表容器:固定高度(建议 600px),`overflow-y: scroll`,宽度自适应 - 每个列表项:固定高度 **60px**,包含序号、标题、描述的基础样式 - 页面顶部显示一个信息栏,实时展示: - 当前滚动位置(scrollTop,单位 px) - 当前可视的起始/结束索引 - 当前实际渲染的 DOM 节点数量 ## 虚拟滚动实现要求 1. **总高度占位**:在滚动容器内放置一个高度为 `总条数 × 60px` 的占位元素, 使滚动条长度与真实列表一致。 2. **可视区域计算**:根据 `scrollTop` 和容器高度,计算出应渲染的起始索引 `startIndex` 和结束索引 `endIndex`。 3. **DOM 偏移定位**:渲染的列表项通过 `transform: translateY(...)` 或 `position: absolute; top: ...` 定位到正确的视觉位置,而非渲染全部节点。 4. **DOM 节点数量控制**:无论列表有多少条数据,实际渲染的 DOM 节点数量 应始终保持在一个固定的小范围内(约为可视区域能容纳的条数 + 少量缓冲)。 ## 跳转功能 - 在页面顶部提供一个输入框和「跳转」按钮 - 用户输入行号(1 ~ 10000),点击跳转后,列表滚动到该行并将其显示在可视区域顶部 - 需对输入值进行边界校验,超出范围时给出提示 ## 性能与体验 - 滚动过程中不应出现明显的白屏或闪烁 - 信息栏中的数据随滚动实时更新 请直接输出完整的、可独立运行的 HTML 代码。

任务要求

AI 模型需要满足以下要求:

  1. 虚拟滚动核心逻辑正确:任意时刻实际渲染的 DOM 节点数量应固定在可视条数的 1~2 倍以内(不超过 30 个),而非随数据量增长。
  2. 滚动位置计算准确:列表项通过绝对定位或 translateY 精确定位,滚动时内容与滚动条位置严格同步,无错位或跳动。
  3. 10,000 条数据下滚动流畅:快速拖动滚动条时不出现明显白屏,渲染逻辑在 scroll 事件中高效执行。
  4. 信息栏实时更新:正确显示 scrollTop、当前起始/结束索引、实际 DOM 节点数量,数值随滚动同步变化。
  5. 跳转功能可用:输入行号后能准确滚动到目标位置,并对非法输入(超范围、非数字)给出明确提示。
  6. 代码结构清晰:虚拟滚动的计算逻辑(startIndex/endIndex 计算、偏移量计算)与 DOM 渲染逻辑分离,关键步骤有注释。

评测结果

综合得分

该模型在此用例的得分为:92.6 分(满分 100 分),已通过

基础难度评测结果

  • 得分:92.6 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

```html 高性能虚拟滚动列表 :root { --primary-color: #3498db; --bg-color: #f5f7fa; --text-color: #2c3e50; --border-color: #e1e4e8; --item-hover-bg: #eef5fc; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: var(--bg-color); color: var(--text-color); padding: 20px; display: flex; flex-direction: column; align-items: center; } h1 { margin-bottom: 20px; font-weight: 600; color: #1a1a1a; } /* 控制面板 */ .control-panel { width: 100%; max-width: 800px; background: #fff; padding: 16px 24px; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,0.06); margin-bottom: 16px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; } .info-bar { display: flex; gap: 20px; font-size: 14px; color: #555; } .info-item span { font-weight: bold; color: var(--primary-color); font-variant-numeric: tabular-nums; } .jump-bar { display: flex; gap: 8px; } .jump-bar input { width: 100px; padding: 6px 12px; border: 1px solid var(--border-color); border-radius: 4px; outline: none; transition: border-color 0.2s; } .jump-bar input:focus { border-color: var(--primary-color); } .jump-bar button { padding: 6px 16px; background-color: var(--primary-color); color: #fff; border: none; border-radius: 4px; cursor: pointer; transition: background-color 0.2s; } .jump-bar button:hover { background-color: #2980b9; } .error-msg { color: #e74c3c; font-size: 12px; align-self: center; margin-left: 4px; min-width: 120px; } /* 虚拟滚动容器 */ .virtual-list-container { width: 100%; max-width: 800px; height: 600px; overflow-y: auto; position: relative; background: #fff; border-radius: 8px; box-shadow: 0 2px 12px rgba(0,0,0,0.06); border: 1px solid var(--border-color); } /* 滚动条美化 */ .virtual-list-container::-webkit-scrollbar { width: 8px; } .virtual-list-container::-webkit-scrollbar-thumb { background-color: #c1c1c1; border-radius: 4px; }...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】这是一个高质量的虚拟滚动列表实现。代码完整展示了虚拟滚动的核心原理:通过占位元素撑起滚动条、动态计算可视区域、仅渲染必要的 DOM 节点并精确定位。性能优化到位,使用 requestAnimationFrame 节流、transform 硬件加速和缓冲区策略,确保 10,000 条数据下滚动流畅无白屏。算法实现精确,边界处理完善,跳转功能健壮。代码结构清晰,注释详尽,充分体现了对虚拟滚动技术的深入理解。样式设计专业,信息栏功能完整。整体达到了生产级虚拟滚动组件的基本标准,是一个优秀的原生 JavaScript 实现范例。 【GEMINI】这是一个非常专业且高质量的虚拟滚动实现。不仅完全满足了所有功能性要求,还在性能优化(requestAnimationFrame, will-change, buffer)和代码工程化结构上表现出色。代码注释清晰,逻辑自洽,是原生 JavaScript 高性能 UI 组件开发的典范。 【KIMI】该实现是一个功能完整、结构清晰的基础虚拟滚动方案,核心原理正确,在10,000条数据下能保持流畅滚动。主要优势在于代码分层明确、注释充分、使用了requestAnimationFrame优化滚动性能。但存在innerHTML全量重建的渲染策略、跳转功能的时序问题、缺少XSS防护和resize适配等可改进点。作为基础版实现已达到良好水平,距离生产级方案还需在节点复用、边界处理和响应式适配方面加强。

进阶难度评测结果

  • 得分:87.2 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

下面是完整的单文件实现。代码中包含了详细的注释,将数据生成、位置缓存算法、虚拟滚动核心逻辑与 UI 渲染进行了模块化分离,并实现了所有要求的功能。 ```html 高性能动态高度虚拟滚动列表 :root { --bg-color: #f4f6f9; --card-bg: #ffffff; --text-primary: #333333; --text-secondary: #666666; --accent-color: #4a90e2; --border-radius: 8px; --shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } * { box-sizing: border-box; margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif; } body { background-color: var(--bg-color); color: var(--text-primary); padding: 20px; } /* 顶部控制栏 */ #controls { display: flex; justify-content: center; align-items: center; gap: 12px; margin-bottom: 20px; padding: 16px; background: var(--card-bg); border-radius: var(--border-radius); box-shadow: var(--shadow); } #controls input { padding: 8px 12px; border: 1px solid #ddd; border-radius: 4px; width: 180px; font-size: 14px; outline: none; transition: border-color 0.3s; } #controls input:focus { border-color: var(--accent-color); } #controls button { padding: 8px 20px; background-color: var(--accent-color); color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 14px; transition: background-color 0.3s; } #controls button:hover { background-color: #357abd; } /* 滚动容器 */ #scroll-container { position: relative; height: 70vh; margin: 0 auto; overflow-y: auto; border-radius: var(--border-radius); background: #e9ecef; box-shadow: inset 0 2px 8px rgba(0,0,0,0.1); } /* 占位容器,用于撑开总高度 */ #placeholder { width: 100%; } /* 实际渲染列表容器 */ #list-wrapper { position: absolute; top: 0; left: 0; width: 100%; padding: 0 16px; } /* 列表项样式 */ .list-item { position: absolute; left: 16px; right: 16px; display: flex; background: var(--card-bg); border-radius: var(--border-radius); box-shadow: var(--shadow); margin-bottom: 12px; overflow: hidden; opacity: 0; transition: opacity 0.3s ease-in-out; will-change: transform, opacity; } .list-item.highlight { background-color: #fffacd; box-shadow: 0 0 0 2px #ffeb3b, var(--shadow); transition:...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】这是一个高质量的虚拟滚动列表实现,完整满足了所有功能要求。代码展现了扎实的前端性能优化能力和算法功底:动态高度的预估修正机制设计合理,位置缓存通过二分查找和批量更新保证了效率,DOM 复用策略有效控制了内存开销。滚动性能优秀,通过缓冲区、rAF 节流、transform 优化等手段实现了流畅的用户体验。代码架构清晰,模块划分合理,关键算法有详细注释,具备良好的可维护性。性能监控面板真实反映了虚拟化效果(DOM 数量远小于数据总量)。美中不足的是部分全局状态管理可进一步封装,以及极端场景下的容错处理可以更完善。整体而言,这是一个接近生产级别的实现,充分体现了对虚拟滚动技术的深入理解。 【GEMINI】这是一个非常优秀的原生 JavaScript 实现。不仅完全满足了所有功能要求和性能约束,还在算法细节上表现出色,特别是解决了动态高度修正时常见的滚动闪烁和跳位问题。性能监控面板真实反映了虚拟化效果,代码编写符合资深前端专家的水准。 【KIMI】该实现基本覆盖了所有功能需求,代码结构清晰且有模块化意识,但在核心算法正确性上存在关键缺陷:findEndIndex逻辑错误、高度修正与滚动同步机制不匹配、CSS margin未纳入positionCache计算等问题会直接影响用户体验,导致滚动跳动、内容错位或白屏。动态高度虚拟滚动的核心挑战在于'预估-测量-修正'闭环的稳定性,当前实现未能完全闭环。建议修复二分查找结束索引逻辑、统一高度修正与滚动同步策略、将margin纳入位置计算,并考虑将全局状态封装为VirtualScroller类以提升可维护性。

困难难度评测结果

  • 得分:91.67 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

```html 极致性能虚拟滚动列表 /* ========== 主题变量 ========== */ :root { --bg: #f0f2f5; --fg: #1a1a2e; --card: #ffffff; --card-hover: #fafbfc; --border: #e2e8f0; --muted: #64748b; --accent: #d63031; --accent-soft: rgba(214,48,49,0.10); --accent-mid: rgba(214,48,49,0.25); --shadow: 0 1px 4px rgba(0,0,0,0.06), 0 2px 8px rgba(0,0,0,0.04); --shadow-hover: 0 4px 16px rgba(0,0,0,0.10); --scrollbar-track: #e8ecf0; --scrollbar-thumb: #b0b8c4; --skeleton-base: #e8ecf0; --skeleton-shine: #f5f7fa; --tag-red: #d63031; --tag-emerald: #00b894; --tag-amber: #e17055; --tag-violet: #6c5ce7; --tag-pink: #e84393; --tag-cyan: #00cec9; --highlight-bg: rgba(214,48,49,0.13); --panel-bg: rgba(255,255,255,0.92); --transition: 0.3s ease; } [data-theme="dark"] { --bg: #0c1222; --fg: #e2e8f0; --card: #162032; --card-hover: #1c2a42; --border: #253348; --muted: #8899aa; --accent: #ff6b6b; --accent-soft: rgba(255,107,107,0.12); --accent-mid: rgba(255,107,107,0.28); --shadow: 0 1px 4px rgba(0,0,0,0.25), 0 2px 8px rgba(0,0,0,0.18); --shadow-hover: 0 4px 16px rgba(0,0,0,0.35); --scrollbar-track: #162032; --scrollbar-thumb: #3a4f6a; --skeleton-base: #253348; --skeleton-shine: #3a4f6a; --tag-red: #ff6b6b; --tag-emerald: #55efc4; --tag-amber: #fab1a0; --tag-violet: #a29bfe; --tag-pink: #fd79a8; --tag-cyan: #81ecec; --highlight-bg: rgba(255,107,107,0.18); --panel-bg: rgba(22,32,50,0.94); } /* ========== 基础重置 ========== */ *,*::before,*::after{margin:0;padding:0;box-sizing:border-box} html{-webkit-text-size-adjust:100%} body{ background:var(--bg);color:var(--fg); font-family:'SF Pro Display',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; transition:background var(--transition),color var(--transition); overflow:hidden;height:100vh;line-height:1.5; } /* ========== 自定义滚动条 ========== */ .scroll-container::-webkit-scrollbar{width:7px} .scroll-container::-webkit-scrollbar-track{background:var(--scrollbar-track);border-radius:4px}...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】这是一个高质量的虚拟滚动列表实现,核心亮点在于使用树状数组优化动态高度场景下的位置索引,将关键操作从 O(n) 降至 O(log n),这对 100,000 条数据的性能提升至关重要。代码架构清晰,PositionManager 与 VirtualScroll 职责分离良好,算法实现严谨且有详细注释。性能监控面板、键盘导航、ARIA 无障碍支持、主题切换等功能均完整实现。DOM 节点数量控制在 28 个以内,滚动性能优秀。唯一可改进之处是缓冲区计算可以更智能(如根据已测量项的平均高度动态调整),以及 ARIA 播报可以更详细。整体而言,该实现完全满足 Hard 级别要求,展现了扎实的前端性能优化能力和对底层算法的深刻理解。

相关链接

您可以通过以下链接查看更多相关内容:

加载中...