Javascript 渲染大型元素集

Javascript 渲染大型元素集,javascript,jquery,Javascript,Jquery,如何使用“停止脚本编写对话框”呈现此对话框。任何解决方案都值得赞赏。提前谢谢 document.write("<ul>"); for(var i=0;i<1000000;i++){ document.write("<li>"); document.write("<div><input value='"+i+"'/></div>"); document.write("</li>");

如何使用“停止脚本编写对话框”呈现此对话框。任何解决方案都值得赞赏。提前谢谢

document.write("<ul>");

for(var i=0;i<1000000;i++){


    document.write("<li>");

    document.write("<div><input value='"+i+"'/></div>");

    document.write("</li>");


}

document.write("</ul>");
document.write(
    );
    对于(var i=0;i首先,我假设这是一个理论讨论,因为任何页面设计都不应该考虑数百万个DOM元素。如果曾经认为可能有这么多元素,那么应该制定一个不同的设计,每次显示较小的数据窗口

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    要绕过无响应对话框,您必须将javascript进程分成若干部分,并分别执行每一部分,同时允许系统在各个部分之间处理其他事件。这通常是通过将工作分成若干部分,然后在
    setTimeout()上执行每一部分来完成的
    。您可以在此处看到几个处理大型阵列的示例:

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    但是,此测试存在许多问题,因为您还必须停止使用
    document.write()
    ,因为一旦让系统在
    setTimeout()
    操作之间处理其他事件,您就不能再使用
    document.write()
    在解析流中插入新元素,因为文档将完成解析。相反,您必须更改为在DOM中的适当位置动态插入DOM元素

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    下面是一些代码:

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    function insertElements(num) {
        var totalCntr = 0;
        var chunkSize = 1000;
        var parent = document.getElementById("container");
        var progress = document.getElementById("progressCntr");
    
        function doChunk() {
            var chunkCntr = 0;
            var fragment = document.createDocumentFragment();
            while (chunkCntr < chunkSize && totalCntr < num) {
                var li = document.createElement("li");
                li.innerHTML = "<div><input value='" + totalCntr + "'/></div>";
                fragment.appendChild(li);
                ++totalCntr;
                ++chunkCntr;
            }
            parent.appendChild(fragment);
            progress.innerHTML = totalCntr;
            if (totalCntr < num) {
                setTimeout(doChunk, 0);
            }
        }    
        // start the whole thing
        doChunk();
    }
    
    insertElements(100000);
    
    函数插入元素(num){
    var totalCntr=0;
    var chunkSize=1000;
    var parent=document.getElementById(“容器”);
    var progress=document.getElementById(“progressCntr”);
    函数doChunk(){
    var-chunkCntr=0;
    var fragment=document.createDocumentFragment();
    while(chunkCntr
    工作演示:

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    当前设置为100000个元素。如果您想尝试更高的值,欢迎使用(取决于系统的内存限制)

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    如果减小
    chunkSize
    值,系统将在运行时对用户输入做出更大响应。如果增大
    chunkSize
    值,整个端到端时间可能会更快

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    如果每个块都可以是它自己的DOM树,这样就可以在一个DOM操作中插入,那么这里的端到端时间会更快。但是,如果插入所有
  • 元素,这是不可能的。在这里使用文档片段试图帮助解决这个问题,但最后,它仍然必须插入每个
  • 自动插入文档,这确实会减慢此操作

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    

    注意:将工作分块可能会降低整体端到端性能。我没有尝试优化此代码的性能,而是想说明这一概念。

    首先,我假设这是一个理论讨论,因为任何页面设计都不应该考虑数百万个DOM元素。如果有的话它被认为可能有这么多的元素,然后一个不同的设计,涉及显示较小的窗口的数据在同一时间应该制定出来

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    要绕过无响应对话框,您必须将javascript进程分成若干部分,并分别执行每一部分,同时允许系统在各个部分之间处理其他事件。这通常是通过将工作分成若干部分,然后在
    setTimeout()上执行每一部分来完成的
    。您可以在此处看到几个处理大型阵列的示例:

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    但是,此测试存在许多问题,因为您还必须停止使用
    document.write()
    ,因为一旦让系统在
    setTimeout()
    操作之间处理其他事件,您就不能再使用
    document.write()
    在解析流中插入新元素,因为文档将完成解析。相反,您必须更改为在DOM中的适当位置动态插入DOM元素

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    下面是一些代码:

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    function insertElements(num) {
        var totalCntr = 0;
        var chunkSize = 1000;
        var parent = document.getElementById("container");
        var progress = document.getElementById("progressCntr");
    
        function doChunk() {
            var chunkCntr = 0;
            var fragment = document.createDocumentFragment();
            while (chunkCntr < chunkSize && totalCntr < num) {
                var li = document.createElement("li");
                li.innerHTML = "<div><input value='" + totalCntr + "'/></div>";
                fragment.appendChild(li);
                ++totalCntr;
                ++chunkCntr;
            }
            parent.appendChild(fragment);
            progress.innerHTML = totalCntr;
            if (totalCntr < num) {
                setTimeout(doChunk, 0);
            }
        }    
        // start the whole thing
        doChunk();
    }
    
    insertElements(100000);
    
    函数插入元素(num){
    var totalCntr=0;
    var chunkSize=1000;
    var parent=document.getElementById(“容器”);
    var progress=document.getElementById(“progressCntr”);
    函数doChunk(){
    var-chunkCntr=0;
    var fragment=document.createDocumentFragment();
    while(chunkCntr
    工作演示:

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    当前设置为100000个元素。如果您想尝试更高的值,欢迎使用(取决于系统的内存限制)

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    如果减小
    chunkSize
    值,系统将在运行时对用户输入做出更大响应。如果增大
    chunkSize
    值,整个端到端时间可能会更快

    document.write("<ul>");
    
    for(var i=0;i<1000000;i++){
    
    
        document.write("<li>");
    
        document.write("<div><input value='"+i+"'/></div>");
    
        document.write("</li>");
    
    
    }
    
    document.write("</ul>");
    
    如果每个块都可以是它自己的DOM树,这样就可以在一个DOM操作中插入,那么这里的端到端时间会更快。但是,如果插入所有
  • 元素,这是不可能的。在这里使用文档片段试图帮助解决这个问题,但最终,它是错误的