如何减少此javascript代码';什么是cpu使用率?
现在我正在优化一些js代码。如何减少此javascript代码';什么是cpu使用率?,javascript,performance,cpu-usage,Javascript,Performance,Cpu Usage,现在我正在优化一些js代码。 有一个名为appendXYZ的函数,它与其他函数一起在循环中调用。 如下所示: function OuterFunc (){ for(...){// about 150 times ... appendXYZ(); //other dependent functions ... } } 现在我非常确定appendXYZ会导致高cpu使用率-它可以达到50%, 但如果我删除此函数,cpu使用率仅为1%。 当cpu使用率
有一个名为appendXYZ的函数,它与其他函数一起在循环中调用。
如下所示:
function OuterFunc (){
for(...){// about 150 times
...
appendXYZ();
//other dependent functions
...
}
}
现在我非常确定appendXYZ会导致高cpu使用率-它可以达到50%,但如果我删除此函数,cpu使用率仅为1%。
当cpu使用率为50%时,浏览器几乎冻结,页面缺乏响应。
此外,OuterFunc每20秒执行一次,appendXYZ来自第三方脚本代码,我无法修改它。
那么如何优化此代码?
现在我尝试使用setTimeout,但我不知道它是否有效。我不知道该函数的作用,但您可以尝试使其调用异步 它可能工作,也可能不工作,仍然需要相同数量的CPU,但它至少应该释放浏览器一点空间
function OuterFunc (){
for( var i = 0; i < 150; i++ ){
// ...
setTimeout( appendXYZ, 0 );
//other dependent functions
// ...
}
}
函数OuterFunc(){
对于(变量i=0;i<150;i++){
// ...
setTimeout(appendXYZ,0);
//其他相关函数
// ...
}
}
这可能会再次破坏功能。如果看不到更多代码,就无法判断
如果要传递参数,则需要以下内容:
function invoker( j ) {
return function() {
appendXYZ( j );
};
}
function OuterFunc (){
for( var i = 0; i < 150; i++ ){
// ...
setTimeout( invoker( i ), 0 );
//other dependent functions
// ...
}
}
函数调用程序(j){
返回函数(){
附录xyz(j);
};
}
函数OuterFunc(){
对于(变量i=0;i<150;i++){
// ...
setTimeout(调用程序(i),0);
//其他相关函数
// ...
}
}
我不知道该函数做什么,但您可以尝试使其调用异步
它可能工作,也可能不工作,仍然需要相同数量的CPU,但它至少应该释放浏览器一点空间
function OuterFunc (){
for( var i = 0; i < 150; i++ ){
// ...
setTimeout( appendXYZ, 0 );
//other dependent functions
// ...
}
}
函数OuterFunc(){
对于(变量i=0;i<150;i++){
// ...
setTimeout(appendXYZ,0);
//其他相关函数
// ...
}
}
这可能会再次破坏功能。如果看不到更多代码,就无法判断
如果要传递参数,则需要以下内容:
function invoker( j ) {
return function() {
appendXYZ( j );
};
}
function OuterFunc (){
for( var i = 0; i < 150; i++ ){
// ...
setTimeout( invoker( i ), 0 );
//other dependent functions
// ...
}
}
函数调用程序(j){
返回函数(){
附录xyz(j);
};
}
函数OuterFunc(){
对于(变量i=0;i<150;i++){
// ...
setTimeout(调用程序(i),0);
//其他相关函数
// ...
}
}
一种可能性是,OuterFunc
执行时间大于重复间隔。换句话说,
OutherFunc
执行时间超过20毫秒,每20秒调用一次它将产生一个异常,因为函数在无限循环中完成执行之前被调用。如果使用
setInterval
每20毫秒执行一次OuterFunc
函数,则可以通过使用setTimeout
调用模拟setInterval
函数来解决此问题:
(function helper(){
OutherFunc();
// after the OutherFunc is done executing, trigger it after 20 milliseconds
setTimeout(helper, 20);
})();
只有当setInterval
是浏览器冻结的原因时,这可能会对您有所帮助。如果这对您没有帮助,如果您不太关心旧浏览器,也许您可以使用实现一种“线程化”。这样,你的代码就会在不同的线程中执行,这肯定会加快你的应用程序的速度(又称“再见,再见,浏览器冻结”)
希望这有帮助 一种可能性是,
OuterFunc
执行时间大于重复间隔。换句话说,
OutherFunc
执行时间超过20毫秒,每20秒调用一次它将产生一个异常,因为函数在无限循环中完成执行之前被调用。如果使用
setInterval
每20毫秒执行一次OuterFunc
函数,则可以通过使用setTimeout
调用模拟setInterval
函数来解决此问题:
(function helper(){
OutherFunc();
// after the OutherFunc is done executing, trigger it after 20 milliseconds
setTimeout(helper, 20);
})();
只有当setInterval
是浏览器冻结的原因时,这可能会对您有所帮助。如果这对您没有帮助,如果您不太关心旧浏览器,也许您可以使用实现一种“线程化”。这样,你的代码就会在不同的线程中执行,这肯定会加快你的应用程序的速度(又称“再见,再见,浏览器冻结”)
希望这有帮助 如果您无法对实际代码进行优化,则可以分散循环迭代的执行,以保持浏览器的响应性。根据,您可以按住UI并使其感觉对用户有响应的最长时间是100毫秒。有关如何使用
setTimeout
执行此操作的技术,请参见。如果无法优化实际代码,则可以分散循环迭代的执行以保持浏览器响应。根据,您可以按住UI并使其感觉对用户有响应的最长时间是100毫秒。有关如何使用setTimeout
执行此操作的技术,请参见。但是appendXYZ的作用是什么?知道它被执行了150次并没有多大帮助。所以你基本上是在问“我如何使代码修改得更快”?你可以使用web workers:。但是循环本身可能无法优化,您需要优化appendXYZ
。appendXYZ是一个包装函数,它有点复杂。它在地图中查找所有标记节点并设置位置。这段代码基于谷歌地图(百度地图)。但是appendXYZ做什么呢?知道它被执行了150次并没有多大帮助。所以你基本上是在问“我如何使代码修改得更快”?你可以使用web workers:。但是循环本身可能无法优化,您需要优化appendXYZ
。appendXYZ是一个包装函数,它有点复杂。它在地图中查找所有标记节点并设置位置。这段代码是基于谷歌地图(百度地图)的。这难道不会更快地冻结浏览器吗?我的意思是这样,OuterFunc
执行得更快,但是