页面在脚本加载之前不加载,循环控制台在完成后产生结果



我有这个密码,我只是很无聊,我想看看破解密码需要多长时间。

<!DOCTYPE html>
<html>
<head>
<title> Password Cracker </title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<main>
<h1> Password Cracker </h1>
</main>
<script defer>
function makeid(length) {
var result           = '';
var characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~`!@#$%^&*()-_=+{}|:;"<,>.?/';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * 
charactersLength));
}
return result;
}
var Passwords = [];
var PasswordsTime = [];
for (var count = 0; count < 30; count++){
const d = new Date();
let time = d.getTime();
var pass = makeid(5)
loopone:
for (var i = 33; i <= 126; i++){
for (var j = 33; j <= 126; j++){
for (var k = 33; k <= 126; k++){
for (var l = 33; l <= 126; l++){
for (var m = 33; m <= 126; m++){
if (String.fromCharCode(i, j,k,l, m) === pass){
console.log("Password cracked!nPassword = "  + pass);
Passwords.push(pass);
const e = new Date();
let time2 = e.getTime();
PasswordsTime.push(time2 - time1);
break loopone;
}
}
}
}
}
}
}
var sum = 0;
for (var i = 0; i < PasswordsTime.length; i++){
sum = sum + PasswordsTime[i];
console.log("Password: " + Passwords[i]);
console.log("Time: " + PasswordsTime[i]);
} 
console.log("Total Time: " + sum);
console.log("Average time: " + (sum / 30));
</script>
</body>
</html>

代码工作得很好,但是h1不显示,直到脚本完成,这是冗长的,而且,它控制台记录所有循环后的for循环中的所有内容,而不是当每个密码被找到时,为什么?

代替" web workers"(复杂),最好的解决方案是将您的Loopone:及其5个for语句包装在0 ms的setTimeout中,如下所示:

setTimeout(i => {
Loopone:
// its 5 "for" statements
}/* , 0 */);

事实上,你的问题是页面渲染和JIT编译(由浏览器)的混合问题。其他渲染解决方案可以在这里找到。

最新更新