Javascript 加速递归函数

Javascript 加速递归函数,javascript,jquery,Javascript,Jquery,下面的功能将更改 因此,每次循环时,密度DPI将降低20 DPI 有没有一种方法可以加速这个过程,所以它通过比较以前的值的比率,在大约4个循环中完成。。。?我认为在x++之前应该有一个东西,它可以将5改大一点,这样$(window).width()==480就快多了 $(document).ready(function (){ $('meta[name="viewport"]').remove(); $('<meta name="viewport" id="

下面的功能将更改
因此,每次循环时,密度DPI将降低20 DPI

有没有一种方法可以加速这个过程,所以它通过比较以前的值的比率,在大约4个循环中完成。。。?我认为在
x++
之前应该有一个东西,它可以将5改大一点,这样
$(window).width()==480
就快多了

$(document).ready(function (){
        $('meta[name="viewport"]').remove();
        $('<meta name="viewport" id="the_vp_special" content="width=320,target-densityDPI=250dpi"/>').appendTo('head');
        setTimeout(function (){
            var x = 0;
            var changeDPI = function (curr){
                x++;
                var sub = 5;
                if(x>500)  return false;
                var curr = curr?parseInt(curr):320;
                curr = curr-sub;
                var txt = $('<meta/>',{name:"viewport",id:"the_vp_special",content:"width=320,initial-scale=1,target-densityDPI="+(parseInt(curr))+"dpi"}); 
                $('#the_vp_special').replaceWith(txt)
                if($(window).width()==480) {}
                else setTimeout(function (){ changeDPI(curr); },5);
            }
            changeDPI(250);
        }, 2500);
    });
$(文档).ready(函数(){
$('meta[name=“viewport”]”)。删除();
$('')。附于('head');
setTimeout(函数(){
var x=0;
var changeDPI=功能(当前){
x++;
var sub=5;
如果(x>500)返回false;
var curr=curr?parseInt(curr):320;
curr=curr sub;
var txt=$('',{name:“viewport”,id:“the_vp_special”,内容:“width=320,initial scale=1,target densityDPI=“+(parseInt(curr))+”dpi“});
$(“#"vp_special')。替换为(txt)
如果($(窗口).width()==480){}
else setTimeout(函数(){changeDPI(curr);},5);
}
更改dpi(250);
}, 2500);
});

请提问,如果这不清楚,我会尝试更好地解释。

好的,让我直截了当地说:您想要的是将客户端的dpi设置为一个值
x
,以便客户端的视口的宽度精确地
480px

现在,根据设置的dpi和显示的像素之间的关系,您有两个选项

  • 如果是线性关系(这对我来说最有意义):

    $(函数)({
    var dpi=250,
    宽度;
    $('meta[name=“viewport”]”)。删除();
    $('')。附于('head');
    setTimeout(函数(){
    宽度=$(窗口).width();
    dpi=数学圆((480*dpi)/宽度);
    $('u vp_special')。替换为(
    $('', {
    名称:“视口”,
    id:“特别节目”,
    内容:“宽度=320…目标密度dpi=“+dpi+”dpi”
    })
    );
    }, 2500);            
    });
    
  • 对于您可能希望使用的任何其他关系,其最坏/平均情况性能为O(logn)。如果您的分辨率为250 dpi,并将其缩小到72 dpi,则平均需要7次尝试才能找到正确的分辨率。
    (明天我会用一个例子更新我的帖子……等等)


  • 您可以更改
    2500ms
    超时延迟吗?或者这是以我不知道的方式需要的?这不是问题,它只是在那里指示整个函数何时开始…只是更容易理解,我认为整个事情可以简化,如果我更改几次,并计算出它随精度增加或减少的比率,因为只有一个因素在变化,但是今天是星期五,我今天似乎不能做数学…,我知道窗口的宽度,我知道dpi是多少,所以我所需要的就是找到它们的变化率。。。每个dpi的宽度有多少像素:)像素和dpi之间的比率是恒定的吗?因为如果有,简单的交叉乘法就可以了。参见第3条,这与第1条中的操作完全相同(
    dpi=Math.round((480*dpi)/width);
    ),但没有超时(更好地接近IMHO)。不管怎样,很高兴你解决了这个问题。
    $(function)( {
        var dpi = 250,
            width;
    
        $('meta[name="viewport"]').remove();
        $('<meta name="viewport" id="the_vp_special" content="width=320,target-densityDPI=250dpi"/>').appendTo('head');
    
        setTimeout(function() {
            width = $(window).width();
            dpi   = Math.round((480 * dpi) / width);
    
            $('#the_vp_special').replaceWith(
                $('<meta/>', {
                    name: "viewport",
                    id: "the_vp_special",
                    content: "width=320 ... target-densityDPI="+dpi+"dpi"
                })
            );
        }, 2500);            
    });