Mozilla Hacks to zbiór artykułów na temat nowych możliwości silnika Gecko w Firefoksie 3.5. Członkowie Aviary.pl zamierzają tłumaczyć co ciekawsze artykuły z Mozilla Hacks na polski. Na Techblogu zacznę od artykułu „Better security and performance with native JSON”, autorstwa Aruna Ranganathana. Oryginalny artykuł i jego tłumaczenie dostępne są na warunkach licencji Creative Commons Attribution 3.0 USA.
Większe bezpieczeństwo i wydajność dzięki natywnej obsłudze formatu JSON
Mechanizm reprezentacji danych JavaScript Object Notation (JSON) szybko stał się nieodzownym narzędziem programisty WWW, umożliwiając aplikacjom w języku JavaScript pobranie i przetworzenie danych w sposób intuicyjny, w skryptach, z prostą hermetyzacją danych. Firefox 3.5 zawiera natywną obsługę JSON-a, udostępnioną przez własność window.JSON
obiektu globalnego.
Natywny JSON, wbudowany w maszynę wirtualną JS, stał się możliwy dzięki specyfikacji ECMAScript 5 (specyfikacja w formacie PDF), której inne części również zostały
zaimplementowane w Firefoksie 3.5. Obecnie natywną obsługę JSON-a udostępniają Firefox 3.5 i IE8, można się też spodziewać, że i inne przeglądarki wkrótce będą miały ją zaimplementowaną.
Natywna obsługa formatu JSON ma dwie zalety:
- Bezpieczeństwo. Korzystanie z funkcji
eval
do wyznaczenia wartości wyrażeń zwróconych jako ciągi znaków nie jest bezpieczne. Ponadto, natywny JSON obsługuje wyłącznie dane. Nie można go użyć do przetworzenia obiektów zawierających wywołania metod – spowoduje to zgłoszenie błędu. - Wydajność. Przetwarzanie JSON-a przy użyciu zewnętrznych skryptów i bibliotek jest zwykle znacznie wolniejsze niż natywne przetwarzanie JSON-a przez przeglądarkę.
Oto kilka przykładów.
API JSON do wyszukiwania może wyglądać jak poniżej:
/* Załóżmy, że dane w zmiennej data zostały otrzymane z serwera. Dla przejrzystości, wyświetlamy je tutaj w osobnych liniach. */ var data = ' { "responseData": {"results": [ { "SafeSearch":"true", "url":"http://www.arunranga.com/i.jpg", }, { "SafeSearch":"false", "url":"http://www.badarunranga.com/evil.jpg", } ]}}';
Takie zasoby mogły zostać zwrócone na przykład przez proste żądanie HTTP GET z wykorzystaniem API typu REST.
Dzięki natywnemu JSON-owi, można napisać taki kod:
/* Pobranie uchwytu do ww. zasobu JSON. Najwygodniej zrobić to za pomocą zewnętrznych bibliotek obsługujących natywnego JSON-a. */ if (window.JSON) { var searchObj = JSON.parse(data); for (var i=0; i++; i < searchObj.responseData.results.length) { if (searchObj.responseData.results[i].SafeSearch) { var img = new Image(); img.src = searchObj.responseData.results[i].url; // ... Wstaw obrazek do drzewa DOM ... } }
Dzięki metodzie stringify można obiekt z powrotem zserializować (przekształcić do ciągu znaków w formacie JSON – przyp. tłum.):
// Powrót do wyjściowej sytuacji var data = JSON.stringify(searchObj); // zmienna 'data' zawiera teraz pierwotny ciąg znaków
Oczywiście, aby w pełni skorzystać z możliwości JSON-a, warto spróbować pobierać dane JSON z innych domen, poprzez mechanizmy callback takie jak JSONP. (JSONP nie skorzysta z natywnego JSON-a, nie wiem, czemu artykuł oryginalny o nim tu wspomina – przyp. tłum.). Wielu programistów raczej nie będzie korzystać z obiektu JSON
bezpośrednio. Najczęściej korzystać oni będą z mechanizmów udostępnianych przez biblioteki takie jak Dojo i jQuery. Biblioteki te ułatwiają odbieranie i przetwarzanie zasobów JSON
z różnych domen i udostępniają wiele “cukru składniowego” dla procesu wywołań callback i manipulacji drzewem DOM.
Natywna implementacja JSON-a współpracuje z popularną biblioteką json2.js (która prawidłowo rozpoznaje, czy dostępna jest natywna obsługa JSON-a), dzięki czemu programiści mogą bez problemu korzystać z przetwarzania JSON-a w przeglądarkach bez natywnej jego obsługi (API zdefiniowane w json2.js jest identyczne z natywnym API omawianym w tym artykule – przyp. tłum.). W chwili pisania tego artykułu, Dojo i jQuery ogłosiły, że będą wspierać natywną obsługę JSON-a:
Chciałem się za to wziąć już jakiś czas temu, ale brak mi teraz czasu (obrona pracy magisterskiej), no i przyznam szczerze, że materia jest dość trudna do tłumaczenia dla nie webmastera.
Chętnie poczytam kolejne tłumaczenia.
A jak to się ma do formatu plików z zakładkami? Bo prawde mówiąć JSON tylko z tym mi się kojarzy.