1.1 减少重绘和重排 重绘(Repaint):当元素的某些属性发生变化,但不需要重新布局时,浏览器只需要重新绘制该元素,例如改变 color 或 background-color。 重排(Reflow):当元素的几何属性(如宽度、高度、位置等)发生变化时,浏览器需要重新计算元素的位置和大小,这会导致重排,进而可能引起重绘。 优化方法:
批量修改:尽量将多个样式修改合并成一次操作,减少重排次数。 使用 transform 和 opacity:使用 transform 和 opacity 可以避免重排,因为它们是硬件加速的。 脱离文档流:使用 position: absolute 或 fixed 可以使元素脱离文档流,减少重排的影响。 避免强制同步布局:避免在读取布局信息后立即修改布局,这会导致多次重排。 1.2 使用节流和防抖技术 节流(Throttle):限制函数在一定时间内只执行一次,即使频繁触发也只执行一次。 防抖(Debounce):在一定时间内,只有最后一次触发才有效,之前的触发都会被忽略。 应用场景:
滚动事件:使用节流技术处理滚动事件,避免频繁触发。 输入框搜索:使用防抖技术处理输入框的搜索请求,等待用户输入完毕后再发送请求。 示例代码:
Javascript
// 节流 function throttle(func, wait) { let timeout = null; return function(...args) { if (!timeout) { timeout = setTimeout(() => { func.apply(this, args); timeout = null; }, wait); } }; }
// 防抖 function debounce(func, wait) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => { func.apply(this, args); }, wait); }; } 1.3 使用性能分析工具 Chrome DevTools:提供了 Performance 面板,可以记录和分析页面的性能。 Lighthouse:可以生成页面性能报告,提供优化建议。 WebPageTest:在线工具,可以测试页面加载速度和性能。 题目解析 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
思路 使用哈希表(对象)来存储已经遍历过的数字及其索引。 遍历数组,对于每个元素,检查哈希表中是否存在 target - nums[i],如果存在则找到答案。 图解 浅色版本 nums = [2, 7, 11, 15], target = 9
- i = 0, nums[0] = 2, 查找 9 - 2 = 7 不存在
- i = 1, nums[1] = 7, 查找 9 - 7 = 2 存在,返回 [0, 1] 代码详解 Javascript 浅色版本 function twoSum(nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { const complement = target - nums[i]; if (map.has(complement)) { return [map.get(complement), i]; } map.set(nums[i], i); } return []; } 知识总结 新知识点 哈希表的应用:哈希表(Map)在查找和插入操作上的平均时间复杂度为 O(1),非常适合解决这类问题。 空间换时间:通过使用额外的空间(哈希表)来换取时间效率,这是一种常见的优化策略。 性能优化技巧:了解如何减少重绘和重排,使用节流和防抖技术,以及如何使用性能分析工具。 学习心得 理解算法原理:不仅要会写代码,还要理解算法背后的原理和逻辑。 多做练习:通过刷题来巩固所学的知识点,提高解决问题的能力。 总结经验:每次做完题目后,总结解题思路和技巧,形成自己的知识体系。 学习计划
- 制定刷题计划 每天固定时间刷题:比如每天晚上 1 小时。 每周设定一个主题:如数组、字符串、动态规划等,集中攻克一类问题。 记录进度:使用表格或日志记录每天的学习进度和遇到的问题。
- 利用错题进行针对性学习 错题整理:将错题整理成笔记,记录错误原因和正确解法。 定期复习:每周或每月复习错题,确保不再犯同样的错误。 拓展练习:针对错题类型,寻找更多类似的题目进行练习。 工具运用
- 结合 AI 刷题功能 生成题目:使用 AI 刷题功能生成题目,自动检查答案,提高效率。 获取提示:利用 AI 的提示和解释,理解题目和解法。 记录进度:AI 刷题功能通常会记录学习进度,帮助你更好地跟踪学习情况。
- 结合其他学习资源 在线课程:参加 Coursera、edX 等平台的在线课程,系统学习算法和数据结构。 阅读书籍:阅读经典的算法书籍,如《算法导论》、《编程珠玑》等。 GitHub 项目:查看开源项目,学习实际应用中的代码。