提升用户体验:从《Don't Make Me Think》看51.com网站优化

1星 需积分: 9 10 下载量 15 浏览量 更新于2024-07-28 2 收藏 2.04MB PDF 举报
"《Don't Make Me Think》读书笔记,主要关注网站的用户体验设计,以51.com为例进行分析,指出网站在设计上的不足,并对比了人人网的界面设计。" 在网页设计领域,"Don't Make Me Think"是一本极具影响力的书籍,作者Steve Krug强调了设计应以用户为中心,使用户能够快速理解并使用网站。这本书的核心理念是,网站设计应该直观、清晰,避免让用户在使用过程中产生思考负担。 从描述中可以看出,作者在阅读这本书后,以51.com为例进行了实际的用户体验分析。51.com的首页虽然简洁,但缺乏独特性,无法突出其与其他社交网站的区别。"我的朋友,我的家"的口号可能对某些用户来说并不具有足够的吸引力,特别是对于年轻用户群体。此外,主页的更新频率不高,可能会给用户留下管理不活跃的印象。 作者提到,51.com的主页存在广告,这与人人网等其他主流社交平台的无广告设计形成了对比,可能导致用户对其专业性的质疑。而游戏体验不佳,如51新炫舞的安装和登录过程复杂,也是影响用户满意度的一个因素。 对比人人网,它的设计更接近Facebook,遵循了简洁明了的原则,减少了用户的认知负担。这种设计风格在全球范围内被广泛接受,体现了设计的国际趋势。而51.com的界面设计和功能布局可能没有达到同样的用户体验标准,导致其在用户心中留下了较为平淡甚至负面的印象。 总结这些知识点,我们可以得出以下几点关于网站客户体验的建议: 1. 网站设计应突出自身特色,明确传达网站的核心价值,使用户一眼就能明白网站的功能和目的。 2. 用户界面要保持简洁,减少用户的思考时间,避免复杂的操作流程。 3. 定期更新内容,保持网站的活力,让用户感受到网站的活跃度。 4. 考虑用户群体的需求和喜好,避免过于普遍或陈旧的设计元素。 5. 广告的使用应谨慎,过多或突兀的广告会影响用户体验,降低网站的专业形象。 6. 游戏或其他服务的用户体验同样重要,应优化流程,确保流畅、便捷。 通过以上分析,我们可以看出,"Don't Make Me Think"的理念在实践中是如何指导我们改进网站设计,提升用户体验的。对于任何希望在竞争激烈的网络环境中脱颖而出的网站,理解和应用这些原则至关重要。

请详细解释下这段代码void FaceTracker::OnNewFaceData( const std::vector<human_sensing::CrosFace>& faces) { // Given |f1| and |f2| from two different (usually consecutive) frames, treat // the two rectangles as the same face if their position delta is less than // kFaceDistanceThresholdSquare. // // This is just a heuristic and is not accurate in some corner cases, but we // don't have face tracking. auto is_same_face = [&](const Rect<float>& f1, const Rect<float>& f2) -> bool { const float center_f1_x = f1.left + f1.width / 2; const float center_f1_y = f1.top + f1.height / 2; const float center_f2_x = f2.left + f2.width / 2; const float center_f2_y = f2.top + f2.height / 2; constexpr float kFaceDistanceThresholdSquare = 0.1 * 0.1; const float dist_square = std::pow(center_f1_x - center_f2_x, 2.0f) + std::pow(center_f1_y - center_f2_y, 2.0f); return dist_square < kFaceDistanceThresholdSquare; }; for (const auto& f : faces) { FaceState s = { .normalized_bounding_box = Rect<float>( f.bounding_box.x1 / options_.active_array_dimension.width, f.bounding_box.y1 / options_.active_array_dimension.height, (f.bounding_box.x2 - f.bounding_box.x1) / options_.active_array_dimension.width, (f.bounding_box.y2 - f.bounding_box.y1) / options_.active_array_dimension.height), .last_detected_ticks = base::TimeTicks::Now(), .has_attention = std::fabs(f.pan_angle) < options_.pan_angle_range}; bool found_matching_face = false; for (auto& known_face : faces_) { if (is_same_face(s.normalized_bounding_box, known_face.normalized_bounding_box)) { found_matching_face = true; if (!s.has_attention) { // If the face isn't looking at the camera, reset the timer. s.first_detected_ticks = base::TimeTicks::Max(); } else if (!known_face.has_attention && s.has_attention) { // If the face starts looking at the camera, start the timer. s.first_detected_ticks = base::TimeTicks::Now(); } else { s.first_detected_ticks = known_face.first_detected_ticks; } known_face = s; break; } } if (!found_matching_face) { s.first_detected_ticks = base::TimeTicks::Now(); faces_.push_back(s); } } // Flush expired face states. for (auto it = faces_.begin(); it != faces_.end();) { if (ElapsedTimeMs(it->last_detected_ticks) > options_.face_phase_out_threshold_ms) { it = faces_.erase(it); } else { ++it; } } }

2023-06-08 上传