Javascript Performance Test


참조 URL
  1. http://jsperf.com/
  2. http://jsperf.com/faq#what
  3. http://jsperf.com/browse
  4. http://jsperf.com/jstest453534 - 2013.05.25일 6시간 전에 만든 테스트 케이스라서 링크가 깨질수도 있음.
  5. http://jsperf.com/dom-vs-innerhtml-based-templating/729


 필자가 개인적으로 생각하기에 Node.js가 나오고 나서부터 자바스크립트 프레임워크의 제2의 전성기가 도래된듯 싶다. Ajax를 통해 브라우저에서 조명을 받았다면 지금은 서버사이드 기술과 Template renderning, MVC Framwork, ... 같은 많은 종류의 구조화 지원 도구가 나오고 있다. 이런 시대상 때문에 비슷한 기능을 지원하는 스크립트들이 많이 나오고 있으나 개인적인 개발자 입장에서는 행복한 고민에 빠지지 않을 수 없다. 똑똑하고 편리하게 사용할 수 있는 자바스크립트 프레임웍이 많다 보니 선택을 하기고 힘들고 일일이 알아보고 비교하기도 힘들다. 


 이 힘들 작업을 인터넷이라는 세계 공동체 안에서 미리 시작한 사이트가 있으니 바로 "JsPerf.com" 이다. 비슷한 자바스크립트 프레임웍을 선별하여 퍼포먼스 테스트를 하면서 결과로 통계 데이터도 보여주고 있다. 내가 테스트한 데이터도 실시간으로 반영이 되고 있다.


 그렇지만 모든 성능 테스트가 마찬가지로 한정된 목표와 제한된 시스템 안에서 진행되기 때문에 결과에 맹신은 금물이다. 각각의 자바스크립트 프레임웍마다 지향하는 철학과 쓰임새가 다르게 추구하고 있기 때문에 절대적인 비교 보다는 참고용과 테스트 방법과 예제에 대한 참고 정도만 하면 될 것이다. 


 이제 간단한 페이지에 대해 설명 하면서 JSPerf가 어떤 것이라는 것을 아래 그림으로 간단하게 설명 하도록 하겠다.

'http://jsperf.com/jstest453534'은 jQuery에서 

  • $('li').first().text();
  • $('li:first').text();

두 문법에 대한 성능 차이를 알아 보는 페이지다. '그림1', '그림2'에서와 같이 준비된 코드가 있고 '그림3'과 같은 화면에서 'Run Tests'를 누르면 테스트가 진행이 된다. 가끔 javascript 로딩 문제로 에러가 발생할 수 있으니 IE나 Chrome을 번갈아 가면서 테스트를 해보고 브라우저 마다 스크립트의 성능 차이도 비교해 보기를 바란다.


[그림1] 준비 코드



[그림2] 렌더링 된 준비 코드




[그림3] 테스트 준비 화면



 '그림4'는 테스트가 된 결과 화면이며 '그림5'는 테스트 결과에 총 집계 차트다. 이 차트를 통해 나름 일반적인 통계치를 얻을 수 있을 것이다.



[그림4] 테스트 결과 화면




[그림5] 결과에 대한 통계 차트



Knockout-Kendo.js

참조 URL
  1. http://rniemeyer.github.io/knockout-kendo/
  2. http://www.kendoui.com/
  3. http://jquery.com/



 Knockout.js 2.2 + Kendo UI v2012.3.1114 + jQuery 1.8.2 를 같이 사용하여 개발할 수 있는 javascript가 있다. Knockout-Kendo.js를 통해 콜라보레이션이 가능해 진다. 간단한 예제로 확인해 보자.


아래는 Kendo UI를 사용하는 HTML 테그다.


[코드] Kendo UI를 사용하는 Html tag



아래는 Knockout.js에서 요구하는 ViewModel을 이용해서 Html tag에 데이터 바인딩을 하는 자바스크립트다.


[코드] Knockout의 Viewmodel로 바인딩 하는 코드


[그림2] 결과 화면

 '그림2'처럼 Knockout이용해 데이터 바인딩을 한 KendoUI의 결과 화면이다. 이 밖에도 여러가지 예제가 있으니 Knockout과 KendoUI에 관심이 있으신 분들은 도입을 검토해 보기 바란다. 


[표1] Kendo UI Web Widgets




Virtual scrolling - Infinite Scrolling


참조 URL
  1. http://www.datatables.net/blog/Introducing_Scroller_-_Virtual_Scrolling_for_DataTables
  2. http://www.jeasyui.com/tutorial/datagrid/datagrid27.php
  3. http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem=
  4. http://www.trirand.net/aspnetmvc/grid/performancevirtualscrolling
  5. http://www.telerik.com/help/aspnet-ajax/grid-virtual-scroll-paging.html



 Virtual scrolling이란 사용자의 페이지 이동의 행위 없이 스크롤 만으로 사용자가 인식하지 못하는 상태에서 페이징처리가 되도록 지원하는 기능이라고 할 수 있겠다. 아래 '그림1' 보면 쉽게 이해가 갈 것이다.


[그림1] jQery EasyUI Virtual Scrolling

http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem= )

( http://www.datatables.net/release-datatables/extras/Scroller/server-side_processing.html )

( http://www.trirand.net/aspnetmvc/grid/performancevirtualscrolling 에서도 확인 가능 - jqgrid )

 

 

 이번에는 Infinite scroll에 대해서 알아 보자. Infinite scroll은 일반 페이징 처럼 처음 1페이지에 해당하는 데이타와 그에 해당하는 스크롤 사이즈만 보여준다. 그렇지만 스크롤을 내리면 데이터가 추가되어 스크롤과 그리드가 동적으로 추가가 된다. 아래 '그림2'와 '그림3'을 비교해 보면 알 수 있을 것이다. 


[그림2] Infinite Scroll 초기 화면 - Scroll 사이즈 비교



[그림2] Infinite Scroll이 진행된 화면 - Scroll 사이즈 비교

http://www.datatables.net/release-datatables/examples/basic_init/scroll_y_infinite.html )



 Virtual scroll vs Infinite scroll은 비슷한 기능이지만 다른 사용자 경험을 제공해 주고 있는 것이다. 개발자 입장에서는 Virtual Scroll을 구현하기가 더 어려울 것이다. Infinite는 스크롤된 값을 가지고 추가된 데이터만 관리하면 되지만 Virtual은 스크롤된 값으로 현재 화면에 가져와야할 데이터의 범위에 대해서 계산해야 하는 작업이 필요 하게 된다. 그렇지만 사용자의 입장에서는 Virtual이 전체 데이터의 사이즈를 인지하고 있기 때문에 더 낳은 경험을 제공해준다. 어떤 경험을 제공해 주는지는 개발 프로젝트의 성격과 선택에 달려 있을 것이다. 그리고 계산 문제에 대해서 우리가 고민할 필요 없이 이미 개발되어 있는 라이브러리 들이 있으니 적극 활용하여 사용해 보도록 하자.


- jqGrid

- DataTable

- jQuery EasyUI


 이 밖에도 Telerik이나 별도의 컴포넌트 회사에서 개발된 툴에서도 지원하고 있으니 원하는 입맛에 맞게 도입하면 될 것이다.

Processingjs

Windows 8, Windows Phone multi-touch interactions


참조 URL
  1. http://processing.org/
  2. http://processingjs.org/
  3. https://processingjs.codeplex.com/
  4. http://processingjs.org/download/
  5. https://github.com/processing-js
  6. https://github.com/processing-js/processing-js
  7. http://channel9.msdn.com/Series/SketchbookTutorial
  8. http://apps.microsoft.com/windows/ko-KR/app/processing-for-windows/27e8a073-f881-45fc-b887-ef739ed7095a
  9. http://www.windowsphone.com/ko-kr/store/app/processingjs-reader/734ea3b3-d4db-46c3-b46c-45131fb748af?appid=734ea3b3-d4db-46c3-b46c-45131fb748af


 Windows 8, Windows Phone에서 멀티 터치 interaction 관련 개발 라이브러리다.


jQuery 1.9.1


참조 URL
  1. jQuery Download

 

- jQuery 1.9.x 버전은 ie 8 이하 버전을 지원하는 라이브러리


- jQuery 2.x 버전은 ie9 이상부터만 지원하는 라이브러리





jquery-1.9.1.zip



이 파일은 위의 네개의 파일을 포함하고 있다.


intellisense.js 파일을 구하기 어려워서 혹시 필요하신 분들을 위해 여기에 올려 놓습니다.

(''+[][[]])[!+[]+!+[]] + (''+[][[ ~



 잠깐 쉬어가는 것 처럼 두뇌의 여흥을 즐겨 보자.


아래와 같은 코드를 한번 보자~


이게 실행이 될 수 있는 코드일까라는 생각이 처음 들었다. 그리고 어떤 결과 값이 나올지 예상 하지도 못하였다.


(''+[][[]])[!+[]+!+[]] + (''+[][[]])[!+[]+!+[]+!+[]] + (''+[][[]])[!+[]+!+[]+!+[]+!+[]] + (''+[][[]])[!+[]+!+[]+!+[]+!+[]+!+[]] + (''+[][[]])[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]] + (''+[][[]])[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]


위 코드만으로 결과값을 예상할 수 있을까?



[코드] Javascript 코드


 어떤 방식으로 동작하는지 궁금해 하나하나 떼어내어 분석해 보았더니 생각보다 단순한 구조로 되어 있다. 구조를 알게 되면 생각보다 간단하게 조합할 수 도 있다. 배열이니까~


결과 값이 궁금하다면 직접 실행해 보기 바란다. ^^ㅋ



이와 같은 유형의 코드를 처음 접한건 아래 코드다. 이복영 강사님이 처음으로 알려 주셨다.


[코드] Javascript 코드


이 코드의 결과값은 'daniel15'로 얼럿이 뜬다. 별로 어렵지 않으니 직접 실행해 보면 답을 알 수 있을 것이다.


Responsive Multi-Level Menu


참조 URL
  1. http://tympanus.net/Development/ResponsiveMultiLevelMenu/index5.html

 

 메뉴 구성에 필요한 라이브러리.




Slicebox - slideshow


참조 URL
  1. http://tympanus.net/Development/Slicebox/index.html

 

 미려한 모양을 갖춘 3D 슬라이드쇼 라이브러리다. CSS Transition을 통해 구현되었으며 지원되지 않는 브라우저에서는 보통의 슬라이드와 같이 표현된다.



 [그림1] Slidebox

데이터 시각화 Library

( Data Visualization )


참조 URL
  1. 데이터 시각화 라이브러리 목록
  2. Visualization Libraries
  3. Data Visualization
  4. The 20 best tools for data visualization
  5. 50 JavaScript Libraries for Charts and Graphs

 

위 참조 링크 페이지로 한번 가보면 시각화에 필요한 라이브러리들을 정리한 사이트이다.



[그림1] Data Visualization 사이트


+ Recent posts