Walidacja popularnych bibliotek w JSLint
Jakiś czas temu (poprzedni post) natknąłem się na Google Tech Talk przygotowany przez guru JavaScript-u, Douglasa Crockforda. Część wykładu przeznaczył na zapoznanie słuchaczy z mocno rozwijanym przez niego walidatorem języka JavaScript. Postanowiłem przetestować to cudo na popularnych bibliotekach JS. Okazało się to jednak niełatwym zadaniem, ponieważ wiele popularnych błędów skutkuje zatrzymaniem walidatora.
Test
Każda biblioteka została przetestowana w trzech trybach trybach. Wszystkie tryby miały ustawione maksymalną ilość błędów na 99999, a wcięcie ustawione na 0.
- Tryb tolerancyjny – W opcjach zaznaczone są wszystkie checkboxy z ostatniej kolumny rozpoczynające się od słowa Tolerate….
- Tryb „Good Parts” – Zaznaczone są jedynie opcje zalecane przez Douglasa Crockforda (wciśnięcie przycisku „Good Parts”).
- Tryb racjonalny – W opcjach zaznaczone są checkboxy: Allow one var statement per function, Disallow undefined variables, Require Initial Caps for constructors, Disallow dangling _ in identifiers, Disallow . and [^...] in /RegExp/, Disallow ++ and –, Tolerate unfiltered forin, Tolerate continue.
Z kodu testowanych bibliotek zostały usunięte puste linie, komentarze oraz błędy powodujące zatrzymanie walidatora JSLint (var w definicji pętli, blok with, pętle bez ciała, przypisania w jednej linii z return). Nie są one brane pod uwagę.
Wyniki
Ilość błędów całej bibliotece:
| Biblioteka | Tryb tolerancyjny | Tryb „Good Parts” | Tryb racjonalny ⇑ |
| SizzleJS 1.5 | 42 | 2064 | 167 |
| YUI 3.3 | 48 | 1942 | 257 |
| JQuery 1.5 | 157 | 6038 | 529 |
| ExtJS 3.1 | 496 | 10023 | 1268 |
| Prototype 1.7 | 682 | 7729 | 1508 |
| MooTools 1.3 | 843 | 7430 | 1307 |
| Dojo 1.5 | 534 | 7172 | 2203 |
| JQuery-UI 1.8.9 | 1035 | 8926 | 2608 |
Średnia ilość błędów w jednej linii:
| Biblioteka | Tryb tolerancyjny | Tryb „Good Parts” | Tryb racjonalny ⇑ |
| JQuery 1.5 | 0.03 | 1.08 | 0.1 |
| YUI 3.3 | 0.03 | 1.14 | 0.15 |
| SizzleJS 1.5 | 0.04 | 2.04 | 0.16 |
| ExtJS 3.1 | 0.09 | 1.78 | 0.22 |
| JQuery-UI 1.8.9 | 0.12 | 1.03 | 0.30 |
| MooTools 1.3 | 0.21 | 1.84 | 0.32 |
| Prototype 1.7 | 0.4 | 4.55 | 0.89 |
| Dojo 1.5 | 0.53 | 7.1 | 2.18 |
Wnioski
Według walidatora JSLint biblioteka jQuery jest napisana najlepiej ze wszystkich testowanych bibliotek. Prawie tak samo dobrze napisane są YUI i SizzleJS. Okazuje się również, że najgorzej napisaną biblioteką jest Dojo, Prototype odrobinę lepiej.
Wyniki, moim zdaniem, nie są zaskakujące ![]()
Biblioteki z kodem nie blokującym walidatora można pobrać TUTAJ.

Nie ma sensu ślepo podążać za JSLint. Narzędzie jest dobre dla samo-kontroli dla początkujących JavaScriptowców. W projektach, gdzie pracuje wiele osób też jest przydatny, żeby pilnować porządku, oczywiście pod warunkiem, że dobrze przedyskutuje się zasady/opcje.
JSLint ogranicza programistów w stosowaniu paru przydatnych „sztuczek”, które wynikają ze specyfiki języka, a to tylko w imię wyznawanej przez kogoś (tutaj Douga Crockforda) wizji. Nie bez powodu powstały forki typu JSHint.