WarsawJS Slides: Template

We talk about JavaScript. Each month in Warsaw, Poland.

Speaker

Piotr Leniec

"Cookies, Web Storage i IndexedDB. Co, gdzie i jak?" [PL]

2018-04-11

@piotrleniec

O mnie:

Expanding brain meme
Cookies

JS Cookies API

            
                console.log(document.cookie) // "a=1; b=2; c=3"

                document.cookie = 'd=4'

                const expires = new Date(0).toString()
                document.cookie = 'b=;expires=' + expires
            
        

Problemy z ciastkami

Kiedy używać ciastek

Kiedy nie używać ciastek

DOM Storage

Local Storage & Session Storage

DOM Storage API

            
                localStorage.setItem('a', 'b')
                localStorage.getItem('a') // 'b'

                localStorage.removeItem('a')
                localStorage.getItem('a') // null
            
        

DOM Storage API

            
                localStorage.a = 'b'
                localStorage.a // 'b'

                delete localStorage.a
                localStorage.a // undefined
            
        

DOM Storage API

            
                const object = { a: 1, b: 2, c: 3 }
                localStorage.setItem('object', object)

                localStorage.getItem('object') // "[object Object]"
            
        

DOM Storage API

            
                let object = { a: 1, b: 2, c: 3 }
                let objectString = JSON.stringify(object)
                localStorage.setItem('object', objectString)

                objectString = localStorage.getItem('object')
                JSON.parse(objectString) // { a: 1, b: 2, c: 3 }
            
        

Wsparcie DOM Storage

Co przechowywać w DOM Storage

Czego nie przechowywać w DOM Storage

WebSQL API

            
                const size = 5*1024*1024
                const db = window.openDatabase("name", "1.0", "description", size)

                db.executeSql('SELECT * FROM users', onSuccess, onError)

                db.transaction(tx => {
                    tx.executeSql('INSERT INTO users(name) VALUES(?)', ['Pete'])
                    tx.executeSql('INSERT INTO users(name) VALUES(?)', ['Paul'])
                }, onTransactionError, onTransactionSuccess)
            
        

IndexedDB

IndexedDB API

            
                const open = indexedDB.open('dbname', 3)
                open.onupgradeneeded = (event) => {
                    if (event.oldVersion < 1) {
                        // create v1 schema
                    }
                    if (event.oldVersion < 2) {
                        // upgrade v1 to v2 schema
                    }
                }
            
        

IndexedDB API

            
                const tx = db.transaction(['Users'], 'readwrite')
                const store = tx.objectStore('Users')

                store.put({ id: 1, name: 'John Doe' })
                store.put({ id: 2, name: 'Jane Doe' })
            
        

IndexedDB API

            
                const tx = db.transaction(['Users'], 'readonly')
                const store = tx.objectStore('Users')

                const getJohn = store.get(1)
                getJohn.onsuccess = () => {
                    getJohn.result // { id: 1, name: 'John Doe' }
                }
            
        

IndexedDB API

            
                const tx = db.transaction(['Users'], 'readwrite')
                const store = tx.objectStore('Users')

                store.delete(1)
            
        

Wsparcie IndexedDB

Co przechowywać w IndexedDB

Czego nie przechowywać w IndexedDB

Pytania?