총 게시물 39,104건, 최근 2 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

Jsoup 파싱 속도때문에 질문드립니다.

글쓴이 : emple 날짜 : 2018-01-07 (일) 01:51 조회 : 2500
글주소 : http://www.androidside.com/B49/169073
 
  임베디드 시스템 마이크로비젼
임베디드 개발보드, 개발용역, IAR 컴파일러 총판, 에뮬레이터.
www.mvtool.co.kr
  코리아정보보안IT학원 이준호
2018교육브랜드대상, 실무교육, 1:1멘토링, 신촌역위치, 여름방학 조기할인
koreaisitacademy.kr
  서울게임아카데미
추천게임학원, 2017년 한국 소비자만족지수 1위, 고용노동부국비지원, 수강료조회
www.seoulgame.co.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

안녕하세요, 안드로이드 네이티브 공부를 하고 있는 학생입니다.

이번에 Jsoup 를 이용해서 쇼핑몰들의 이미지(Glide이용) , 상품제목 등을 파싱하여 안드로이드 카드뷰에 어댑터로 붙인 후 

보여주는 어플을 만들고 있는데요,

AsyncTask 안에 DoInBackground 내에서 페이지 url을 담은 배열을 for문으로 돌려서 연결후 

Document에 저장한 뒤에, 배열에 셀렉터문을 이용하여 데이터를 저장한 뒤에 클래스를 이용하여 카드뷰에 뿌려주는

형식으로 코드를 짰습니다.

한개의 쇼핑몰을 예시로 했을때는 오류가 없다가,

여러개의 쇼핑몰을 한꺼번에 긁어오려고 하니 데이터를 긁어오는 시간이 굉장히 오래 걸리네요.


10개 기준 20초남짓 걸리는 것 같습니다.

이런 경우에는 왜 데이터를 긁어오는 시간이 오래 걸리는 건가요..?

Jsoup.connect 를 여러번 해서 그런건가요? 아니면 데이터의 양이 많아서일까요..?

데이터는 5천개 정도 되는 것 같습니다.



질문자가 자신의 포인트 50 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 40을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

안사 이쁜이 2018-01-07 (일) 01:51
축하드립니다. ;)
emple님은 안사 이쁜이에 당첨되어 3 포인트 지급되었습니다.
OSKiller 2018-01-08 (월) 10:06
쇼핑몰 좀 늘어났다고 1~20초 씩 걸리는건 뭔가 설계가 잘못 된것 같은데요
구현 하신 코드를 올려 주시면 좀더 확인 가능할듯 합니다
댓글주소 추천 0 반대 0
emple 2018-01-08 (월) 11:29
Jsoup Connect 하는 코드부분은 이렇게 짰습니다.

for(int i =0;i<10;i++){
long start = System.currentTimeMillis();
doc = Jsoup.connect(mainConnection[i].getConnection_url()).post();
title = doc.title();
long finish = System.currentTimeMillis();

System.out.println("실행시간은 : "+(finish - start)/1000);
//product_redirect_url[i] = doc.select("div.box > a");
size_of_product[i] = doc.select(mainConnection[i].getPrice_selector()).size();
count+=size_of_product[i];
product_name[i] = doc.select(mainConnection[i].getName_selector());
product_price[i] = doc.select(mainConnection[i].getPrice_selector());
product_pic[i] = doc.select(mainConnection[i].getImg_selector());
//System.out.println(doc.select(mainConnection[i].getImg_selector()));
//System.out.println("데이터를 불러왔습니다."+title+"이름 갯수는 : "+product_name[i].size()+" 가격 갯수는 : "+product_price[i].text()+" 사진 갯수는 : " +product_pic[i].size());
mainConnection[i].img_selector_arr = new String[size_of_product[i]];
mainConnection[i].price_selector_arr = new String[size_of_product[i]];
mainConnection[i].name_selector_arr = new String[size_of_product[i]];


for(int k = 0;k<size_of_product[i];k++){
mainConnection[i].name_selector_arr[k]= product_name[i].get(k).text();
mainConnection[i].price_selector_arr[k] = product_price[i].get(k).text();
mainConnection[i].img_selector_arr[k] = "http:"+product_pic[i].get(k).attr("src");
System.out.println(product_pic[i].get(k).text());
}
}

System.currentTimemilies() 통해서 살펴보니까
Jsoup.connect(); 
이 코드를 한줄씩 실행할 때마다 1~3초정도 걸리더라구요,
쇼핑몰의 갯수가 여러개가 되어서 connect를 여러번 하면 될 줄 알았는데
이렇게 하면 안되나요..?
댓글주소 추천 0 반대 0
OSKiller 2018-01-08 (월) 11:49
모든 데이터를 다 뽑아서 셋업 한다음에 화면에 보여 주는거라면 오래걸리는게 어쩔수 없겟네요
다만 하나씩 완료될때마다 화면에 보여준다면 딱히 느리게 보일것 같진 않네요

댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기