2012-11-02 6 views
0

아래 함수는 반복 할 때마다 밀도 DPI가 20dpi가되도록 <meta ... content="...densityDPI=250dpi" /> 을 변경합니다.재귀 함수의 속도를 올리는 것

이 방법은 속도를 높일 수 있으므로 이전 값의 비율을 비교하여 약 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); 
    }); 

명확하지 않은 경우 더 자세히 설명 드리겠습니다.

+0

'2500ms'시간 초과 지연을 변경할 수 있습니까? 아니면 내가 알지 못하는 방식으로 이것이 필요합니까? – aefxx

+0

그게 문제가 아니에요, 전체 기능이 시작될 때를 알려주는 것입니다 ... 픽업하기가 더 쉽습니다.이 모든 것을 단순화 할 수 있다고 생각합니다. 몇 번 변경하면 그 비율을 알아낼 수 있습니다. 그것은 하나의 요소 만 바뀌기 때문에 정밀도가 증가하거나 감소하지만, 오늘은 금요일이며, 수학을 할 수없는 것처럼 보입니다 ... 어떤 창 너비가 될지 알고, dpi가 무엇인지 알기 때문에 필요한 모든 것 변화의 비율을 찾고 있습니다 ... 얼마나 많은 픽셀 dpi 당 너비 : – Val

+0

픽셀과 dpi 사이의 일정한 비율입니까? 왜냐하면 존재한다면, 단순한 교차 곱셈이 가능하기 때문입니다. 참조 http://en.wikipedia.org/wiki/Cross-multiplication – aefxx

답변

1

좋아, 그럼 바로 알겠습니다. 클라이언트의 뷰포트의 너비가 정확히 480px이되도록 클라이언트의 dpi를 x 값으로 설정하면됩니다.

이제 dpi 설정과 표시된 픽셀 사이의 관계에 따라 두 가지 옵션이 있습니다.

다른 관계의 경우
$(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);    
}); 
  • 당신이 최악의/평균 경우가 있습니다 binary search을 사용할 수 있습니다 : (나에게 가장 적합한) 선형 관계의 경우

    1. O (log n)의 성능. 귀하의 250 dpi와 스케일링을 감안할 때 - 72 dpi라고 가정하면 올바른 해상도를 찾기 위해 평균 7 회 시도합니다.
      (예를 들어 내 게시물을 내일 업데이트 할 예정입니다 ...).

  • +0

    No.3은 No.1 ('dpi = Math.round ((480 * dpi)/width);')에서 행해진 것입니다. 시간 초과 (더 나은 접근 IMHO). 어쨌든, 당신이 그것을 해결해 주어서 다행입니다. – aefxx

    +0

    좋아, 나는 지금 어리석은 기분이 들린다. :) 그래, 네가 맞아. – Val

    +0

    Hehe, 절대 신경 쓰지 마. 이것은 우리 모두에게 때로는 발생합니다. – aefxx

    관련 문제