1

글타래: Widget 개발자들이 염두해 두어야 할 기본 지침들

Dashboard가 화면 상에서 감추어져 있을 경우, 모든 widget들은 불필요한 CPU 소비량이 없어야 합니다. 이것을 구현하기 위해서, O'Reilly Network에 소개된 The Widget Maker's Prime Directive라는 제목의 글에서는 크게 두 가지를 제시하고 있습니다.

우선, onshowonhide에 지정되어 있게 될 함수들을 잘 활용해야 합니다.

if (window.widget){
    widget.onhide = onhide;
    widget.onshow = onshow;
}

function onhide() {
    //stop processing...
}

function onshow() {
    //restart processing...
}

위에서처럼, onshowonhide에는 Dashboard가 보여지고 숨겨질 때마다, 실행되는 일종의 정리하는 코드들이 들어가는데, 이 곳에서 살펴야할 불필요한 주요 CPU 소비 형태들로는, 움직이는 .gif 파일들의 사용과 불필요한 Interval들의 사용이 있습니다.

움직이는 .gif 파일들의 경우에는, onhide 안에 다음과 같은 코드를 심어서 Dashboard가 감추어질 경우 불필요한 CPU 소모를 없앨 수 있습니다.

document.getElementById("myGifId").style.display = "none";

그리고, Dashboard가 열려서 다시 .gif 파일을 표시하려면 onshow에 다음과 같이 처리해 주면 됩니다.

document.getElementById("myGifId").style.display = "inline";

또 하나 setInterval()clearInterval()을 써서 어떤 지속적으로 반복해서 실행되는 동작을 구현했을 경우에는, 아래의 예에서와 같이 setInterval()을 부를 때 전역 변수에 넣어서 나중에 Dashboard가 감추어질 때 clearInterval()로 정지시킵니다.

var timer = null;
var active = false;
function someEvent(event){
    timer = setInterval("doSomethingOverAndOver()", 100);
    active = true;
}


function onhide(){
    if(null != timer){
        clearInterval(timer);
        timer = null;
    }
}

function onshow(){
    if(true == active){
        timer = setInterval("doSomethingOverAndOver()", 100);
    }
}

이러한 사항만 잘 지키면, 대부분의 불필요한 CPU의 부담을 덜어줄 수 있답니다.

+ = ²

2

댓글: Widget 개발자들이 염두해 두어야 할 기본 지침들

Widget에게 sudo의 마력을 얹어 주기

Giving Your Widget that sudo Voodoo

위에 소개된 글에서는, widget에서 system() 함수를 통한 광범위한 유닉스 터미널 도구들을 사용할 때 참고가 될 만한 여러 요령들과 더불어서 sudo 명령을 사용하고자 할 때, 그 구현 방법과 미리 염두에 두어야 할 여러 주의 사항들을 자세한 예제들을 통해 소개하고 있습니다.

+ = ²

3

댓글: Widget 개발자들이 염두해 두어야 할 기본 지침들

Javascript는 자체적으로 더 이상 사용되지 않는 object들이 차지했던 메모리 영역을 garbage collection 알고리듬을 이용해서 사용 가능한 영역으로 돌려주기는 하지만, widget을 개발하는데 있어서 메모리 사용량을 줄일 수 있는 몇 가지의 추가 조치가 필요할 때도 있습니다.

가령, widget이 많은 양의 그림 파일들을 사용할 경우에는 모든 그림 파일들을 메모리에 상주시키는 경향이 있기 때문에 사용하는 그림 파일들이 많아질 수록 메모리를 더 차지하게 됩니다. 그래서 위젯에서 사용하는 그림 파일들을 여러가지 그림 압축 도구들을 사용해서 크기를 줄여주면 메모리 사용량도 그 만큼 줄여줄 수도 있습니다.

또 하나 주의할 사항으로는 XMLHttpRequest objects를 사용한 후에는 반드시 바로 지워주어야 한다는 것입니다.
예를 들어 var someRequest = new XMLHttpRequest(); 구문으로 XMLHttpRequest object를 생성한 후에 var response = someRequest.responseXML; 로 요청 결과를 따로 저장한 후에는 다음처럼 XMLHttpRequest object를 지워줍니다.
someRequest = null;

이렇게 하면, 얼마간의 widget 메모리 사용량은 더 줄여줄 수 있을 겁니다. 물론 기본적으로 Javascript 코드의 알고리듬이나 효율도 잘 살펴보아야 할 부분이겠지요.

추가 참고 문서 - Efficient JavaScript - Opera Developer Community

+ = ²