Rev. 2.73

Prototype 코어팀의 Tobie Langel씨가 GitHub에 흥미로운 커밋을 했군요. Prototype의 DOM 셀렉터 엔진을 사용자가 지정하여 빌드할 수 있게 한 것입니다. "NWMatcher" 셀렉터를 사용하려면 아래와 같은 명령으로 빌드할 수 있다고 합니다. 자세한 빌드 방법을 Outsider님께서 포스팅 해 주셨네요.

C:\Workspace\prototype>rake dist SELECTOR_ENGINE=nwmatcher

일전에 "Prototype with Sly is 3x faster"라는 글을 작성했습니다. 그리고 SlickSpeed를 이용하여 개인적인 테스트도 해 보고 실제로 적용하여 사용하고 있습니다. 문득 성능이 궁금하여 Sizzle과 NWMatcher로 빌드된 Prototype을 측정해 본 결과 아래와 같았습니다. NWMatcher가 짱먹었네요.

browsers / selectors Sizzle+ NWMatcher+ Sly+ Prototype jQuery
Chrome(v4.0) 3772 4283 4052 2715 4226
Firefox(v3.5) 844 1895 942 565 900
IE(v8.0) 569 854 1156 408 1034
Safari(v4.0) 4302 6035 4845 2418 4805
final points (more is better)

Comments

HTML :

<script type="text/javascript" src="prototype.js"></script> 
<script type="text/javascript" src="Sly.js"></script> 

Javascript :

// Overriding CSS Selector Engine.
Sly.handlers = Selector.handlers;
Sly.prototype.findElements = Sly.prototype.search;
Sly.findElement = function(elements, expression, index) {
  if (Object.isNumber(expression)) {
    index = expression; expression = false;
  }
  return Sly(expression || '*').filter(elements)[index || 0];
};
Sly.findChildElements = function(element, expressions) {
  var result = Sly(expressions.join(',')).search(element);
  return Prototype.BrowserFeatures.ElementExtensions ?
    result : result.filter(Element.extend);
};
Selector = Sly;

Prototype의 성능이 다른 프레임웍들에 비해 떨어지는 주된 원인 중 하나는 DOM 셀렉터(Selector) 엔진에 있는 것으로 판단하고 위와 같은 코드를 작성하여 Prototype의 셀렉터 엔진을 더욱 성능이 좋은 Sly로 교체하는데 성공하였습니다. 그리고 SlickSpeed를 이용하여 실험하였는데, 그 결과가 매우 만족스럽습니다. 오옷! jQuery 와 비등비등하거나 더 빠르군요! 특히, 파이어폭스 3.0에서는 날아 다닙니다. 푸하핫!

My SlickSpeed Result :

  • Internet Explorer 8 : 2.5x faster
  • Internet Explorer 7 : 1.4x faster
  • Internet Explorer 6 : 1.6x faster
  • Mozilla Firefox 3.5 : 1.7x faster
  • Mozilla Firefox 3.0 : 8.7x faster
  • Mozilla Firefox 2.0 : 6.2x faster
  • Google Chrome 2.0 : 1.4x faster
  • Google Chrome 1.0 : 1.2x faster
  • Apple Safari 4.0 : 1.9x faster
  • Apple Safari 3.2 : 1.5x faster
  • Opera 9.6 : 4.7x faster

Comments