WebSQL - fajna zabawka

Data publikacji: 2011-04-21 , Wyświetleń: 2276

Ostatnimi czasy przyszło zmierzyć mi się z problemem przechowywania danych użytkownika w przeglądarce. Problem ten z dawien dawna był rozwiązywany poprzez obsługę cookie. Ale co w przypadku gdy tych danych jest więcej niż te parę kilo jakie da się w cookie trzymać? Zaczynają się schody. Fajnie było by też żeby można było dostać się do tych danych w przystępny sposób. Na co pozwalają dzisiejsze przeglądarki?

 

Szału nie ma

Pomimo, że parcie na rozój technologi www jest niesamowity to twórcy przeglądarek dopiero zaczynają ten temat wdrażać. Silnik WebKit oraz Opera używają standardu o potocznej nazwie WebSQL. Jest to nic innego jak obsługa bazy danych SQLite z poziomu JavaScript. Trzeba przyznać że działa to całkiem fajnie. Praktycznie mamy nieograniczony dostep do rpzestrzeni (definiujemy jej rozmiar sami), użytkownik dostaje tylko komunikat o ilości jaką chcemy zarezerwować dla naszej bazy. W praktyce wygląda to tak:

 

var db = openDatabase("NazwaBazy", "1.0", "", 1024);
db.transaction(function(tx) {
	
	tx.executeSql('CREATE TABLE IF NOT EXISTS test1 (id INTEGER PRIMARY KEY, pole1 TEXT, pole2 TEXT)');
	
}, function(e){
    alert(e.message);
});

db.transaction(function(tx) {  
    tx.executeSql("SELECT  #  FROM test1", [], function(){
        // success
    }, function(){
        // error
    });
});

Prościucha. Jakbyśmy wykonywali zapytania SQL po stronie serwera w języku PHP. Inicjalizacja trochę inna oraz obsługa ale zasada ta sama. W przeglądarkach opartych o silnik WebKit zawartość takiej bazy można łatwo przeglądać oraz wykonywać na niej zapytania. Firefox nie obsługuje tej technologi a to ze względu, że nie została ona odpowiednio udokumentowana. Chodzi o to że jest to praktycznie nic innego jak przeniesienie tego co daje SQLite i dostarczenie mechanizmu obsługi. Racja nie racja, znając życie chłopaki z Mozilla wiedzą co robią. 

Do testów napisałem sobie klasę w JS do obsługi WebSQL. Zobacz kod

Przykładowy kod:

localDB.init();
localDB.initTable('changes', [
	{name: 'id', type:'INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE'},
	{name: 'data', type:'TEXT'},
	{name: 'timestamp', type:'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP'}
]);

IndexedDB

Jest to poniekąd odpowiedź na WebSQL. Na chwile obecną przeglądarki zaczynają wprowadzać ten standard. Na W3C jest draft dokumentacji (ostatnia aktualizacja z dnia 26 kwietnia 2011). Trzeba będzie ejszcze trochę poczekać zanim zacznie się to jakoś krystalizować. Na chwile obecną jest sporo zabawy żeby kod działał jak należy w więcej niż 1 przeglądarce. Prawdopodobnie standard będzie gotowy wraz z finlaną wersją HTML5. Zostaje tylko obserwować temat i czekać.

Tagi: websql, web, sql