Javascript打印输出一次一个而不是整个页面?

时间:2018-05-21 17:31:10

标签: javascript performance

只是玩了一下,但注意到它占用了太长时间才能加载页面,无论如何要让它一次打印出一行而不是等到整个页面加载

File "/usr/local/lib/python2.7/dist-packages/antlr4/Lexer.py", line 109,     
  in nextToken
    tokenStartMarker = self._input.mark()
AttributeError: 'str' object has no attribute 'mark'

现在我怎样才能更好地控制这个问题,无论一旦准备好加载打印需要多长时间,甚至放慢速度就可以了。

2 个答案:

答案 0 :(得分:1)

javascript方法window.requestAnimationFrame(callback)将在下一个动画帧上调用您的回调函数。它通常用于动画,并且可能适用于你正在做的事情。

要修改代码以使用requestAnimationFrame,您必须让您的函数自行打印一个小块,并引用以了解要打印的块。例如,如果您将页面内容存储在数组中,那么它可能只是一个起始索引和一个长度。由于您打印的增加功率为2,因此您可以传递最后一次2的幂和每次运行函数时要打印的行数。

您还需要退出条件 - limits内的检查,如果为真,则返回而不请求下一帧。我只是对a的值设置了一个硬帽,但你也可以检查索引是否小于数组长度(对于我上面的页面内容数组的想法)。

因为requestAnimationFrame将函数名作为回调传递,所以不能将参数传递给它。因此,您必须使用bind将值附加到函数。然后,在函数中,您可以使用this访问它们。 config只是一个对象,用于保存您希望函数具有的初始参数,然后绑定它,这允许您使用this.numLinesthis.a在函数中访问它们。 / p>

然后,当您请求下一帧时,您必须再次将值绑定到limits。如果您保持参数相同,那么您可以limits.bind(this)。但是如果你想要改变它们,你可以用类似于我写config的方式创建另一个对象并将其绑定。

以下代码似乎是您正在寻找的基本示例:

var foo = document.getElementById('foo');
var maxA = 1000000000000000000000000000000000;
function limits() {
    for(var i=0; i<this.numLines; ++i) {
        foo.innerHTML += "<p>" + this.a + "</p>";
        this.a *= 2;
        if(this.a > maxA) {
            return;
        }
    }
    requestAnimationFrame(limits.bind(this));
}

config = {
    numLines: 3,
    a: 1
};
requestAnimationFrame(limits.bind(config));

并在JSFiddle here中实现。我还实现了一个版本,它将每一行放在页面的顶部(而不是将其附加到底部),这样你就可以看到它发生得更好(你可以找到一个here)。

答案 1 :(得分:0)

您可以这样做:

string ApiGatewayPassthroughHeader = context.HttpContext.Request.Headers["ApiGatewayPassthroughHeader"];

if (ApiGatewayPassthroughHeader != Environment.GetEnvironmentVariable("ApiGatewayPassthroughHeader"))
{
    throw new error;
}

您可以在setTimeout中调整时间,但即使将其保留为零,也可以在页面构建时提供更具交互性的体验。如果你愿意,将它设置为10或100当然会大大减慢它。

相关问题