概括:
我正在尝试通过表单字段输入传递 base64 编码的图像数据。我的代码在我测试过的所有浏览器上都可以正常工作,但是在 Google Chrome 上存在严重的 CPU 延迟、提交后延迟——其长度与提交的数据长度成正比。
细节:
我在做什么: 我的网站上有一个 SVG 编辑器,用户可以在其中创建图像以保存到他们的个人资料中。一旦用户完成他们的工作,他们点击“保存”——这会启动一些 JavaScript,通过 canvas.toDataURL() 将 SVG 转换为编码数据字符串,将其存储在隐藏的输入字段中,提交表单,然后返回用户对他们的设计进行概述。
有什么问题? 代码本身似乎在 Firefox 和 Google Chrome 上都没有问题。Firefox 页面加载需要 1-2 秒,无论 data_string 大小如何。但是,在 Google Chrome 上,加载“概览”页面所需的时间与隐藏字段中提交的数据字符串的大小成正比。
例如,如果我截断不同长度的数据字符串,我会收到不同的页面加载时间:
测试图像 1:
- 5000 个字符 - 1.78 秒
- 50000 个字符 - 8.24 秒
- 73198 个字符 - 11.67 秒(未截断)
测试图像 2:
- 5000 个字符 - 1.92 秒
- 50000 个字符 - 8.79 秒
- 307466 个字符 - 42.24 秒(未截断)
我的问题:
延迟是不可接受的(因为大多数图像的大小至少为 100k);有谁知道谷歌浏览器发生了什么?
我想重申一下,无论浏览器如何,服务器都以相同的速度响应;这绝对是 Google Chrome 的客户端浏览器特定问题。
我也将不胜感激替代建议。我花了一些时间试图欺骗浏览器认为数据是文件上传(通过将文本输入更改为文件输入字段,然后手动尝试形成数据并通过 javascript 提交,但我似乎无法让 Django 识别伪造的文件(所以它会出错,认为没有上传文件)。