为何更大的Base64文件下载耗时比Multipart格式更短?
Base64与Multipart在JSON API中的传输性能对比测试
研究背景与测试方案
近期针对Base64编码与其他传输方式在JSON API中的应用可行性展开研究,考虑到Base64会带来33-37%的体积开销,搭建Flask服务器开展对比测试:上传100MB JPG图片分别采用Base64与multipart方式,同时实现两种方式的下载展示以全面对比性能。
测试核心代码
Flask服务器中实现两种传输方式的响应路由代码如下:
@app.route('/image-multipart/<filename>') def serve_multipart(filename): return send_from_directory(UPLOAD_FOLDER, filename) @app.route('/image-base64/<filename>') def serve_base64(filename): path = os.path.join(UPLOAD_FOLDER, filename) if not os.path.exists(path): return jsonify(error='Not found'), 404 ext = filename.rsplit('.', 1)[1] with open(path, 'rb') as f: encoded = base64.b64encode(f.read()).decode('utf-8') data_uri = f"data:image/{ext};base64,{encoded}" return jsonify(image=data_uri)
测试结果与分析
多次测试后得到以下结论:
- 体积差异:Base64编码后的文件体积约137MB(140000 kB),远大于multipart格式的约100MB(105229 kB)
- 浏览器下载阶段表现:无论使用何种浏览器,multipart的Content Download(蓝色进度条)耗时始终更长,经分析该耗时差异源于浏览器Queuing阶段的磁盘缓存空间分配,差值约600ms
- 服务器与上传性能:经优化后,服务器响应时间因磁盘资源加载延迟升至32ms;multipart上传的Request sent与Waiting for response耗时均减半(从450ms、450ms降至200ms、160ms),整体multipart上传性能更优
内容的提问来源于stack exchange,提问作者tfn
相关产品推荐
相关产品推荐

