bandwidth 에 해당하는 글1 개
2007/08/01   Checking user bandwidth (1)

flash/Tip | 2007/08/01 12:00

우리나라의 웹환경에서는 초고속 인터넷과 같은 인프라의 발전으로 대역폭(bandwidth)을 고려해야할 만큼 네트워크 속도가 절대적으로 중요하지는 않다.
워낙 전송 속도가 빨라서 왠만한 웹사이트는 로딩시간없이 실시간으로  보여진다. 하지만 이는 특수한 우리나라의 경우에서만 해당하는 사항일뿐 아직까지 대부분의 다른나라에서의 전송속도는 생각하는 것 만큼 빠르지 않다. 좀더 범용적인 사이트의 개발을 위해서는 반드시 고려해야 할 사항이다.

특히 영상위주의 컨텐츠가 포함된 사이트의 경우 사용자의 대역폭을 고려하는 것이 좀더 사용자에게 좋은 컨텐츠를 제공하는 방법이 될 수 있다. 대부분 영상을 보여주는 방법으로 점진적 다운로드 방식(progressive download)을 사용한다. 실시간으로 다운로드 한만큼 플레이하는방식으로 이는 사용자 환경의 대역폭이 서비스의 질을 크게 좌우하게 된다.

영상을 보여주는 데 있어 점진적 다운로드 방식은 영상의 전체적인 용량보다는 영상의 압축률에 더 큰 영향을 받는다. 다시말해 데이타를 로드하면서 플레이하는 방식이기 때문에 비디오의 압축률을 높여 단위시간당 받을 수 있는 용량을 보다 크게 하여 좀더 원할하게 플레이 할 수 있다.

 따라서 미리 사용자의 대역폭을 알아내어 거기에 알맞는 압축률의 비디오를 제공할 수 있는 것이다.
플래시에서 일반적으로 대역폭을 측정하는 방법으로는 일정크기의 샘플파일을 다운로드하여 걸린시간을 측정하여 구할 수 있다. 하지만 이 대역폭은 절대적인 속도를 의미하는 것은 아니다.
네트워크 사용량, 네트웍크 지연과 같은 여러가지 요인에 의해 언제든지 속도가 변경될 수 있다. 항상 측정된 속도로 데이타를 받을 수 있다는 의미가 아니다. 현재 시간에서 대략적인 사용자의 네트워크 속도를 가늠해 볼 수 있는데 의미가 있다. 불안정한 네트워크 일수록 측정 대역폭의 편차가 크게 발생한다.

대역폭 측정의 정확성을 높이기 위해서는 테스트하기 위해 사용하는 샘플의 용량을 크게 하거나,측정하는 테스트의 횟수를 늘려야한다. 하지만 이는 전송속도 측정을 위해 불필요하게 자원을 소모하게 되기 때문에 어느정도 적정선을 유지해야한다.
여기서 제공하는 방법은 샘플파일의 크기를 50~100 KB 로 제한하고 측정횟수를 2회로 한정하였다.
위 조건으로 측정한다고 해도 사용자의 네트워크 속도가 50KB 미만일 경우 100~200KB 를 테스트를위해 최소 2~4초정도의 시간이 걸리게 된다.

<bandwidthCheck class>

import com.dstrict.UB.events.Dispatcher;
import com.dstrict.UB.events.Event;

class com.dstrict.UB.util.system.BandwidthCheck extends Dispatcher {
 
 private var _bandwidthSet:Array;
 private var _bandwidth:Number;
 
 private var _startTime:Number;
 private var _checkCount:Number;
 
 private var _loader:MovieClipLoader;
 private var _container:MovieClip;
 
 public function get bandwidth():Number{
  return _bandwidth;
 }
 
 public function BandwidthCheck() {
  _checkCount=0;
  _bandwidth=0;
  _bandwidthSet=new Array();
 }
 
 public function check():Void{
  _container= _root.createEmptyMovieClip("container", _root.getNextHighestDepth());
  var nocache:Number=Math.random()*1000000;
  _loader=new MovieClipLoader();
  _loader.addListener(this);  
  _loader.loadClip("bandwidthDummy.png?nocache="+nocache,_container);
 }
 
 private function calculateBandwidth():Void{
  for(var i in _bandwidthSet){
   _bandwidth+=_bandwidthSet[i];
   }
  _bandwidth=_bandwidth/_checkCount;
 
  //dispatch a complete event
  startEvent(new Event(Event.COMPLETE,this));
 }
 
 private function onLoadStart(targetMc:MovieClip):Void{
  _startTime=getTimer();
 }
 
 private function onLoadComplete(targetMc:MovieClip):Void{
  _loader.unloadClip(_container);
  var elapsedTime:Number=(getTimer()-_startTime)/1000;  
  _checkCount++;
 
  var progress:Object = _loader.getProgress(targetMc);
  var kilobytes:Number=progress.bytesTotal/1024;  
  var kBps:Number=kilobytes/elapsedTime;
  _bandwidthSet.push(kBps);
 
  if(_checkCount==1){
   check();
  }else{
    calculateBandwidth();
  }
 }
}

<sample code>

var bandwidthCheck:BandwidthCheck=new BandwidthCheck();
bandwidthCheck.addEventListener(Event.COMPLETE,onBandwidthCheck);
bandwidthCheck.check();

function onBandwidthCheck(evt:Event){
 trace("bandwidth----------------->"+evt.target.bandwidth);
}


대역폭(bandwidth) 의 단위로는 KBps(kilobytes per second) 이다. 브라우저 캐쉬로 부터 다운받는것을 방지하기 위해 첨부한 문자열로 인해 반드시 웹상에서 다운받아야 로드할수 있다.



download sample files.......
 


 
 
태그 : , , ,
이 글의 관련글(트랙백) 주소 :: http://kimkijeung.com/trackback/100
BlogIcon 김진혁 2007/08/24 13:41 ReplyDelete
오.... 글쿠나..

Name 
Password 
Homepage 
  secret
Comment 
  글쓰기


[PREV] [1] [NEXT]

 
전체 (105)
flash (74)
math&physics (4)
programming (11)
Flex2 (1)
Mac (2)
photo (0)
project (6)
주저리주저리 (3)
유용한 자료들 (1)
diary (0)
Book (1)
web (2)
«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31