return대신 yield를 사용하여 웹페이지 로딩을 빠르게 하기
최근들어 Bottle 관련 포스팅을 많이 하고 있는데요, 일단은 minor한 툴이다 보니 직접 쓰면서 여러가지 내용을 포스팅하면 도움이 될 것 같다는 생각이 많이 들어서입니다. Bottle은 Django나 Flask처럼 Python으로 개발할 수 있는 Web framework입니다. 간단한 어플리케이션을 작성하는데에 Django 대신 사용하기에 부족함이 없진 않지만 다 되긴 하는듯 하네요. 오늘 포스팅할 내용은 간단한 내용인데요, 바로 yield를 사용하여 페이지 로딩 전에 user에게 일부 내용을 반환시키는 방법을 사용하는 것입니다.
Main code
메인에 해당하는 부분은 아래처럼 코딩합니다.
@route('/test') def test(): yield template_header() yield 'body' yield template_footer()
return으로 한번에 반환하는 방법 말고, template_header()와 template_footer()로 앞과 뒷부분을 따로 만들어서 할당하는 방법입니다. return으로 반환하는 경우에는 페이지 내용에 해당하는 부분의 연산이 모두 끝난 뒤에 내용이 뿌려지게 됩니다만, 위처럼 작성하게 될 경우에는 먼저 template_header()에 해당하는 내용이 뿌려지고, 뒤따라서 나머지 내용들이 나오게 됩니다.
나머지 부분
나머지 부분의 코드는 아래처럼 될 것입니다.
def template_header(): return """ <html> <head><title>test</title></head> <body> """ def template_footer(): return """ </body> </html> """
이렇게 페이지의 header와 footer를 따로 분리해놓으면, 반복되는 부분의 코딩도 피할 수 있으면서 가독성 또한 높아지니 가히 1석 3조라고 이야기 할 수 있겠습니다.
참고할 점
이런식으로 yield 문을 사용할 때 서버의 종류가 매우 중요한데요, basic 서버의 경우에는 yield문이 잘 먹지 않는 경향이 있습니다. bottle 공식 문서에서도 paste 서버를 추천하고 있으니, paste 서버로 open하는 것이 좋아보입니다.
'연재 > Project Jarvis' 카테고리의 다른 글
[Pexpect] Telegram-cli 제어하기 (0) | 2016.03.20 |
---|---|
[Bottle] paste 서버를 사용하여 Server load량 늘리기 (0) | 2016.03.09 |
간단한 Naver Endic(영어사전) 파싱 예제 (0) | 2016.02.28 |
[WebFramework] Bottle - Django의 간략판 (0) | 2016.02.27 |
[IFTTT] 텔레그램 봇으로 최신 Feed 받아보기 (9) | 2016.02.21 |
Telegram cli 윈도우에 깔기 (0) | 2016.02.21 |