[개발] steem 보팅금액 계산 소스와 $.Deferred

최근 보팅금액 계산 프로그램을 만들었다. 물론 주요내용은 스팀나우거를 베꼈다. 웹에 오픈된 소스 정도를 참고하는 것 정도는 문제가 없다고 본다. 어떤 과정을 거쳐 만들었는지 포스팅해보려고 한다.
보팅금액 계산 프로그램 - steemd가 안열릴 때 쓰려고 만든 보팅파워+보팅금액 정보 조회 페이지
1. 참고하려는 사이트에 접속한다.
https://steemnow.com/upvotecalc.html
2. 개발자 도구를 연뒤에 source를 열어보면 굳이 설명하지 않더라도 upvotecalc.min.js에 있겠다는 것을 유추할 수 있다.
3. js 파일을 열어본다. steem-js를 사용해서 가져와서 계산하는 부분이 여기에 있을 것 같다.
상당히 보기 힘들게 한줄로 쭉 되어있다. js 파일 이름에 min이라고 붙어있으니 아마 한줄로 쭈욱 되어있을 거다. 좀 보기 편하게 atom을 이용해보자. 처음에 붙여넣으면 이렇게 보기가 힘들게 쭈욱 나와있다.
package -> atom beautify -> beautify를 눌러보자.
오... 기능대로 아름답게 정리되었다.
이제 이걸 가져와서 쓰면 된다. 보팅파워와 보팅금액을 계산하기 위해선 steem api 4개가 필요하다.
getDynamicGlobalProperties
getCurrentMedianHistoryPrice
getRewardFund
getAccounts
이걸 가져오기 위해선 async-await나 콜백 처리를 네번 해도 되겠지만 api 간에 간섭이 없으니 동시에 병렬 수행하기 위해서 $.Deferred 구현체를 사용했다. 즉... 이렇게 네번을 순차적으로 call하게 되면 그만큼 느리겠지만 병렬로 네번을 요청해서 동시다발적으로 데이터를 가져오면 빠를 것이다.
- 일반적인 callback 처리 예
getDynamicGlobalProperties(){
getCurrentMedianHistoryPrice(){
getRewardFund(){
getAccounts(){
}
}
}
}
$.Deferred를 이용한 병렬 처리 예
https://github.com/nhj7/nhj7.github.io/blob/master/steem.apps/Home.vue
// $.Deferred()를 이용. steem api를 감싸준다.
// 4개의 api를 모두...
function getDynamicGlobalProperties(){
var deferred = $.Deferred();
//console.error(deferred);
//steem.api.getRewardFundAsync("post")
steem.api.getDynamicGlobalProperties(function(err, result){
if(err){
deferred.reject(err);
}else{
deferred.resolve(result);
}
});
return deferred.promise();
}
function inqryAccountInfo(){
try{
if( !data.acct_nm ){
return;
}
waitingDialog.show('계정정보를 조회하고 있습니다.', { progressType: 'primary'});
var combinedPromise = $.when(
getCurrentMedianHistoryPrice()
, getRewardFund("poste")
, getDynamicGlobalProperties()
, getAccounts([data.acct_nm])
);
combinedPromise.fail(function(f1Val, f2Val, f3Val, f4Val) {
waitingDialog.hide();
alert('Steem Node Error!');
console.error('fail!', f1Val, f2Val, f3Val, f4Val);
});
localStorage.setItem('steem.id', data.acct_nm);
data.inqry_acct = data.acct_nm;
// 네개의 함수가 잘 호출되면~!! _inqryAccountInfo에 값 전달.
combinedPromise.done(function(marketInfo, rewardFund, gprops, acctInfo){
console.log("We get data: " , marketInfo, rewardFund, gprops, acctInfo);
_inqryAccountInfo(marketInfo, rewardFund, gprops, acctInfo);
});
}catch(err){
console.error("error!", err);
}finally{
}
}
function _inqryAccountInfo(marketInfo, rewardFund, gprops, acctInfo){
try{
//var acctInfo = await steem.api.getAccountsAsync( [ data.acct_nm ] );
if( acctInfo.length == 0 ){
return;
}
waitingDialog.hide();
.......... 계산 부 생략 소스 참고 .............
// 계산하는 소스가 상당히 길기 때문에 github 참고.
}catch(err){
}finally{
$("#acct_info").removeClass("hidden");
waitingDialog.hide();
//$("#acct_nm").focus();
}
}
순차적으로 가져오는것보다 빠를수밖에 없는지 시각적으로 확인해보자.
- steemnow
- steem.apps
계산에 필요한 정보를 동시에 가져오기 때문에 더 빠르다. 처음에는 4개의 api를 순차적으로 호출하도록 만들었다가 너무 느려서 한번에 가져오려고 하다가 jquery $.Deferred를 활용하는 방법을 검색해 적용해보았다. 속도는 확연히 차이가 난다. ^^
필요할때를 위한 작은 개발을~ #kr-dev
Leave [개발] steem 보팅금액 계산 소스와 $.Deferred to:
Read more #kr-dev posts
Best Posts From nhj12311
We have not curated any of nhj12311's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From nhj12311
- 스팀잇 신조어 '보클'은 어뷰징 행위에 해당하는 것이 아닐까요?
- 유머, 귀염, 감동 각종 짤 방출(데이터 주의)
- 신규 가입자를 위한 계정 생성 중개 서비스가 있다면 어떨까?
- 대역폭 문제는 과거에도 있었다.
- [개발] HF20 관련 steem.apps 사이트 - RC 퍼센트와 회복 시간 추가
- 정말 대단한 하드포크다. - 500 스파 계정은 댓글 20개 달고 끝?
- [개발] 업비트 api로 직장인을 위한 코인질 같지 않은 업비트 시세조회 개발
- [개발] Node & Steem #11 - 글 아카이브 기능으로서의 첫 걸음. 포스팅 분류하기.
- [개발] Node & Steem #10 - 형태소 분석을 해보자. - mecab, mecab-ya 활용
- 새벽에 컴터를 하는데 시끄러워 살펴보니 소방차들이 몰려와있다.
- 맥북 프로 2018 15인치 고급형 몇일간의 사용후기, 리뷰
- 돈이 되는 팁! 자동차보험 갱신, 가입 시 최저가 알아보며 앉아서 4만원 벌기 ㅎㅎ
- [통계] #kr 한국 커뮤니티 현재를 진단해보자.
- [판타지] 던전 드래곤2 게임 못다한 기사 공략 #2 (2/2)
- [개발] 스팀잇 본문 마크다운 뷰어 만들기 #1 - 태그와 멘션에 링크 걸기.
- [판타지게임] 던전 드래곤2 게임 이야기와 기사(fighter) 공략 #1 (1/2)
- [개발] 개발자들이여 소스코드 올리는 것을 두려워말지어다- highlight.js 적용방법
- [개발] 나는 그저 이미지 로딩을 기다리고 싶었다. jquery.waitforimages
- [개발] 내가 만약 스팀잇을 만든다면... Feed와 Post 기능 추가 #1 - 잡탕 가즈아2
- [개발] 스팀앱 사이트 내 포스트, 코멘트, 댓글 정보 확인과 `who mute me?` 기능을 추가했습니다 - 잡탕 사이트 가즈아!