【问题标题】:Pass very large variable from Java app to Javascript将非常大的变量从 Java 应用程序传递给 Javascript
【发布时间】:2011-06-23 15:41:41
【问题描述】:

将一个非常大的字符串(几兆字节)从 Java 应用程序导出到页面 javascript 的最快方法是什么?目前,浏览器需要很长时间才能停止。

这是我用来修改 DOM 的代码:

window = JSObject.getWindow(this);
document = (JSObject) window.getMember("document");
for (int i = 0; i < encHexFileUploadStr.length(); i++){
    char c = encHexFileUploadStr.charAt(i); 
    document.eval("document.getElementById('encOutgoingData').value += '"+c+"';");
    if (i % 100 == 0) document.eval("console.log("+i+");");
}

在此之前,我尝试直接一次性分配 encHexFileUploadStr 变量,但效果并不好。

有什么不那么慢的好方法吗?

谢谢!

【问题讨论】:

  • 转换为评论:这看起来很可怕document.eval("document.getElementById('encOutgoingData').value += '"+c+"';"); 不使用 eval 怎么样

标签: java javascript html


【解决方案1】:

我没有尝试将您提到的数据量从 Java 应用程序传输到网页,但是,如果您使用 document.eval,您遇到的性能问题很可能是由于 eval 所需的处理陈述。另一种方法是直接调用执行实际数据更新工作的 JavaScript 方法。以下是您将如何使用这种方法的示例:

Java

JSObject jso = JSObject.getWindow(this);
// invoke JavaScript method updateData with parameter encHexFileUploadStr
jso.call("updateData", new String[] { encHexFileUploadStr });

JavaScript

function updateData(s) {
    document.getElementById('encOutgoingData').value = s;
}

【讨论】:

    【解决方案2】:

    我会将 Kris 的建议与将字符串分解为 1024 字节或类似的块并附加到 JavaScript 中的字符串,最后在 JavaScript 中将字符串复制到字段

    How do I optimize this method for breaking a string in chunks?

    也在循环中,养成做事的习惯

    for (int i = 0, n=something.length();i<n; i++){
    

    而不是

    for (int i = 0; i < something.length(); i++){
    

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 2017-10-07
      • 2015-07-23
      • 1970-01-01
      • 2013-05-18
      • 2012-05-25
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多