网站权限怎么弄郑州做网站企业汉狮
2026/4/17 17:23:26 网站建设 项目流程
网站权限怎么弄,郑州做网站企业汉狮,网站推广平台排行,餐饮小程序开发一、为什么需要性能测试#xff1f;想象一下#xff1a;你发明了一辆新车#xff0c;不测试速度就上路 ❌你写了代码#xff0c;不测试速度就上线 ❌性能测试就是给代码测速#xff0c;找出堵车的地方#xff01;二、最简单的性能测试#xff1…一、为什么需要性能测试想象一下你发明了一辆新车不测试速度就上路 ❌你写了代码不测试速度就上线 ❌性能测试就是给代码测速找出堵车的地方二、最简单的性能测试秒表计时法方法1用time模块就像手机秒表import time # 记录开始时间 start_time time.time() # 这里是你要测试的代码 total 0 for i in range(1000000): # 循环100万次 total i # 记录结束时间 end_time time.time() # 计算用时 time_used end_time - start_time print(f代码执行耗时: {time_used:.4f} 秒) print(f相当于: {time_used * 1000:.2f} 毫秒)实际输出代码执行耗时: 0.0451 秒 相当于: 45.10 毫秒方法2time.perf_counter()更精确的秒表import time # 这个比time.time()更精确 start time.perf_counter() # 测试代码 numbers [i for i in range(1000000)] end time.perf_counter() print(f耗时: {end - start:.6f} 秒) # 显示6位小数方法3timeit模块专业计时器import timeit # 测试两种写法的速度 code1 numbers [] for i in range(1000): numbers.append(i) code2 numbers [i for i in range(1000)] # 每种方法运行1000次取最快结果 time1 timeit.timeit(code1, number1000) time2 timeit.timeit(code2, number1000) print(f传统循环: {time1:.4f} 秒) print(f列表生成式: {time2:.4f} 秒) print(f列表生成式快了 {(time1-time2)/time1*100:.1f}%)三、找到代码的堵车点性能分析方法1cProfile代码交通摄像头import cProfile def slow_function(): 模拟一个慢函数 total 0 for i in range(100000): total i return total def fast_function(): 模拟一个快函数 return sum(range(100000)) def main(): 主函数 result1 slow_function() result2 fast_function() print(f结果: {result1}, {result2}) # 性能分析 print( 开始性能分析 ) cProfile.run(main())输出结果解读200005 function calls in 0.025 seconds # 总共调用了200005次函数耗时0.025秒 Ordered by: standard name # 按函数名排序 ncalls tottime percall cumtime percall filename:lineno(function) # 调用次数 本函数总时间 每次调用时间 累计时间 累计每次时间 文件名:行号(函数名) 1 0.020 0.020 0.020 0.020 test.py:5(slow_function) # slow_function被调用1次自己花了0.020秒 1 0.001 0.001 0.001 0.001 test.py:10(fast_function) # fast_function只花了0.001秒方法2line_profiler逐行分析需要先安装pip install line_profiler# test_performance.py profile # 添加这个装饰器 def process_data(): data [] # 第1行创建空列表 for i in range(10000): # 第2行循环 if i % 2 0: # 第3行判断是否为偶数 data.append(i * 2) # 第4行计算并添加 return sum(data) # 第5行求和返回 if __name__ __main__: process_data()运行分析kernprof -l -v test_performance.py输出结果Line # Hits Time Per Hit % Time Line Contents 1 profile 2 def process_data(): 3 1 2.0 2.0 0.0 data [] 4 10001 4040.0 0.4 5.8 for i in range(10000): 5 10000 4563.0 0.5 6.6 if i % 2 0: 6 5000 5987.0 1.2 8.7 data.append(i * 2) 7 1 54321.0 54321.0 78.9 return sum(data)关键发现sum(data)占了78.9%的时间是主要瓶颈。四、内存使用分析你的代码吃多少内存方法1memory_profiler内存监测仪安装pip install memory_profiler# memory_test.py from memory_profiler import profile profile # 内存分析装饰器 def memory_intensive(): 消耗内存的函数 # 第1步创建一个很大的列表 big_list [i for i in range(100000)] # 10万个数字 print(f列表长度: {len(big_list)}) # 第2步创建另一个大列表 big_list2 [str(i) for i in range(100000)] # 10万个字符串 # 第3步删除第一个列表 del big_list return big_list2 if __name__ __main__: memory_intensive()运行python -m memory_profiler memory_test.py输出解读Line # Mem usage Increment Line Contents 3 38.262 MiB 38.262 MiB profile 4 def memory_intensive(): 5 41.809 MiB 3.547 MiB big_list [i for i in range(100000)] 6 41.809 MiB 0.000 MiB print(f列表长度: {len(big_list)}) 7 48.094 MiB 6.285 MiB big_list2 [str(i) for i in range(100000)] 8 41.809 MiB -6.285 MiB del big_list 9 41.809 MiB 0.000 MiB return big_list2发现字符串列表比数字列表多占用约6.3MB内存方法2sys.getsizeof()查看对象大小import sys # 查看各种数据类型占多少内存 data_types [ 100, # 整数 100.0, # 浮点数 hello, # 短字符串 hello * 100, # 长字符串 [1, 2, 3], # 小列表 [i for i in range(1000)], # 大列表 ] for item in data_types: size sys.getsizeof(item) print(f{type(item).__name__:15} 占用 {size:6} 字节)五、实战案例优化一个慢程序原始版本慢速# slow_version.py import time def find_duplicates_slow(numbers): 找出列表中的重复元素慢版本 duplicates [] for i in range(len(numbers)): for j in range(i 1, len(numbers)): if numbers[i] numbers[j]: if numbers[i] not in duplicates: # 这里又循环一次 duplicates.append(numbers[i]) return duplicates # 测试 data [1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8] * 1000 # 放大问题 start time.time() result find_duplicates_slow(data) end time.time() print(f找到 {len(result)} 个重复元素) print(f耗时: {end - start:.2f} 秒)优化版本快速# fast_version.py import time from collections import Counter def find_duplicates_fast(numbers): 找出列表中的重复元素快速版本 # 使用Counter统计每个元素出现的次数 counter Counter(numbers) # 只保留出现次数1的元素 duplicates [num for num, count in counter.items() if count 1] return duplicates # 同样的测试数据 data [1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8] * 1000 start time.time() result find_duplicates_fast(data) end time.time() print(f找到 {len(result)} 个重复元素) print(f耗时: {end - start:.2f} 秒)对比结果慢版本: 12.45 秒 快版本: 0.08 秒 速度快了: 155倍六、性能测试工具箱总结工具/方法用途何时使用简单程度time.time()简单计时快速测试代码块⭐⭐⭐⭐⭐timeit精确计时比较不同写法的速度⭐⭐⭐⭐cProfile函数级分析找出哪个函数最慢⭐⭐⭐line_profiler行级分析找出函数中哪一行最慢⭐⭐memory_profiler内存分析找出内存泄漏或高消耗⭐⭐sys.getsizeof()对象大小查看单个对象内存占用⭐⭐⭐⭐⭐七、初学者性能优化黄金法则法则1避免不必要的循环# ❌ 不好三层循环 result [] for i in range(100): for j in range(100): for k in range(100): result.append(i j k) # ✅ 好使用列表生成式 result [i j k for i in range(100) for j in range(100) for k in range(100)]法则2使用合适的数据结构# ❌ 不好用列表检查是否存在慢 items [1, 2, 3, 4, 5] if 5 in items: # 需要遍历整个列表 print(找到了) # ✅ 好用集合检查是否存在快 items_set {1, 2, 3, 4, 5} if 5 in items_set: # 瞬间完成 print(找到了)法则3批量操作代替单个操作# ❌ 不好每次打开关闭文件 for i in range(100): with open(data.txt, a) as f: f.write(f行{i}\n) # ✅ 好批量写入 lines [f行{i}\n for i in range(100)] with open(data.txt, w) as f: f.writelines(lines) # 一次写入所有行八、简单记忆口诀性能测试很重要代码速度要知晓。 time计时最简单timeit更精确。 cProfile找瓶颈哪个函数最耗时。 line_profiler看细节哪行代码拖后腿。 内存分析别忘记memory_profiler帮大忙。 优化法则记心间 循环嵌套要小心数据结构选合适。 批量操作效率高避免重复计算多。 测试优化再测试代码性能节节高九、最后的小贴士先让代码工作再让代码变快- 正确性第一优化真正的瓶颈- 不要过度优化不重要的部分保持代码可读- 不要为了速度让代码难以理解记录基准数据- 优化前后对比才知道效果记住性能优化就像减肥需要先称体重测试找到胖的地方瓶颈然后针对性锻炼优化最后再称体重验证效果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询