Google Chrome在大型表单数据提交方面有所滞后

时间:2013-04-24 00:16:12

标签: javascript django forms google-chrome lag

要点:

我试图通过表单字段输入传递base64编码的图像数据。我的代码在我测试过的所有浏览器上运行良好,但是在谷歌浏览器上有大量的CPU延迟,提交后提交 - 其长度与提交的数据长度成正比。

详细说明:

我在做什么: 我的网站上有一个SVG编辑器,用户可以在其中创建要保存到其个人资料中的图像。一旦用户完成他们的工作,他们点击“保存” - 启动一些javascript以通过canvas.toDataURL()将SVG转换为编码数据字符串,将其存储在隐藏的输入字段中,提交表单,并返回用户概述他们的设计。

有什么问题? 代码本身似乎在Firefox和谷歌浏览器中都没有问题。无论data_string大小如何,Firefox页面加载需要1-2秒。但是,在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会发生什么?

我想重申服务器以相同的速度响应,无论浏览器如何;它绝对是Google Chrome的客户端浏览器特定问题。

我也很欣赏其他建议。我花了一些时间试图欺骗浏览器认为数据是文件上传(通过将文本输入更改为文件输入字段,然后手动尝试形成数据并通过javascript提交,但我似乎无法让Django识别伪造的文件(所以它出错了,认为没有上传文件)。

2 个答案:

答案 0 :(得分:0)

摘要

当将所述数据放入实际输入字段时,Google Chrome似乎在处理大量数据时遇到问题。我怀疑这是Chrome尝试清理用于显示数据的内存的问题。

详细

我能够通过完全取消客户端表单并通过javascript XMLHttpRequest提交数据来实现解决方法(正如我在问题末尾所提到的那样),然后将用户重定向到AJAX回调中的下一页。

我永远无法让Django识别手动形成的FileField对象(作为multipart / form-data),但我 能够让它接受手动形成的CharField字符串(这是我的base64)编码的画布数据)。

由于数据永远不会放入输入字段,因此Google Chrome会毫不拖延地做出响应。

我希望能帮助任何可能遇到类似问题的人。

答案 1 :(得分:0)

我也遇到了同样的问题,我正在寻找解决方案。 在我的情况下,页面的初始几次运行没有这样的问题。 然后它突然开始滞后占用大量内存,这反过来使我的整个系统运行得非常慢。 我在另一台PC上试过,比如预计在前几次运行中提交大尺寸svg数据没有问题,但后来它也显示出相同的滞后问题。

阅读完您的帖子后,我计划使用jquery的ajax发布数据。我希望这能解决问题。