Mozilla Hacks: Natywny JSON – większe bezpieczeństwo i wydajność

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:

  1. 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.
  2. 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:

2 responses to “Mozilla Hacks: Natywny JSON – większe bezpieczeństwo i wydajność

  1. 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.

  2. would

    A jak to się ma do formatu plików z zakładkami? Bo prawde mówiąć JSON tylko z tym mi się kojarzy.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

MDN

Better JavaScript docs for a better Web on MDN

Archiwum

%d bloggers like this: