API lưu trữ web cung cấp một cách để lưu trữ dữ liệu trong trình duyệt. Nó xác định hai cơ chế lưu trữ rất quan trọng: Lưu trữ phiên và Lưu trữ cục bộ, một phần của tập hợp các tùy chọn lưu trữ có sẵn trên Nền tảng web
Giới thiệu
API lưu trữ web xác định hai cơ chế lưu trữ rất quan trọng:Lưu trữ phiênvàLưu trữ cục bộ.
Chúng là một phần của tập hợp các tùy chọn lưu trữ có sẵn trên Nền tảng Web, bao gồm:
Bộ đệm ứng dụng không được dùng nữa và Web SQL không được triển khai trong Firefox, Edge và IE.
Cả Bộ nhớ Phiên và Bộ nhớ Cục bộ đều cung cấp một khu vực riêng tư cho dữ liệu của bạn. Bất kỳ dữ liệu nào bạn lưu trữ không thể được truy cập bởi các trang web khác.
Session Storage duy trì dữ liệu được lưu trữ trong đó trong suốt thời gian của phiên trang. Nếu nhiều cửa sổ hoặc tab truy cập cùng một trang web, chúng sẽ có hai phiên bản Lưu trữ phiên khác nhau.
Khi một tab / cửa sổ bị đóng, Bộ nhớ Phiên cho tab / cửa sổ cụ thể đó sẽ bị xóa.
Lưu trữ phiên có nghĩa là cho phép kịch bản xử lý các quy trình khác nhau xảy ra trên cùng một trang web một cách độc lập, chẳng hạn như cookie được chia sẻ trong tất cả các phiên.
Thay vào đó, Local Storage vẫn tồn tại dữ liệu cho đến khi dữ liệu đó bị xóa rõ ràng bởi bạn hoặc bởi người dùng. Nó không bao giờ được dọn dẹp tự động và nó được chia sẻ trong tất cả các phiên truy cập vào một trang web.
Cả Bộ nhớ Cục bộ và Bộ nhớ Phiên đềugiao thức cụ thể: dữ liệu được lưu trữ khi trang được truy cập bằnghttp
không khả dụng khi trang được phân phát vớihttps
, và ngược lại.
Bộ nhớ Web chỉ có thể truy cập được trong trình duyệt. Nó không được gửi đến máy chủ như cookie.
Cách truy cập bộ nhớ
Cả bộ nhớ cục bộ và bộ nhớ phiên đều có sẵn trênwindow
đối tượng, vì vậy bạn có thể truy cập chúng bằng cách sử dụngsessionStorage
vàlocalStorage
.
Tập hợp các thuộc tính và phương thức của chúng hoàn toàn giống nhau, bởi vì chúng trả về cùng một đối tượng,Lưu trữvật.
Đối tượng lưu trữ có một thuộc tính duy nhất,length
, là số lượng mục dữ liệu được lưu trữ trong đó.
Phương pháp
setItem(key, value)
setItem()
thêm một mục vào bộ nhớ. Chấp nhận một chuỗi làm khóa và một chuỗi dưới dạng giá trị:
localStorage.setItem('username', 'flaviocopes')
localStorage.setItem('id', '123')
Nếu bạn chuyển bất kỳ giá trị nào không phải là một chuỗi, nó sẽ được chuyển đổi thành chuỗi:
localStorage.setItem('test', 123) //stored as the '123' string
localStorage.setItem('test', { test: 1 }) //stored as "[object Object]"
getItem(key)
getItem()
là cách để lấy một giá trị chuỗi từ bộ lưu trữ, bằng cách sử dụng chuỗi khóa đã được sử dụng để lưu trữ nó:
localStorage.getItem('username') // 'flaviocopes'
localStorage.getItem('id') // '123'
removeItem(key)
removeItem()
loại bỏ mục được xác định bởikey
từ bộ nhớ, không trả lại gì (anundefined
giá trị):
localStorage.removeItem('id')
key(n)
Mỗi mặt hàng bạn lưu trữ đều có số chỉ mục.
Nó có thể xuất hiện số liên tiếp, vì vậy lần đầu tiên bạn sử dụng
setItem()
, mục đó có thể được tham chiếu bằng cách sử dụngkey(0)
, tiếp theo vớikey(1)
và như vậy, nhưng nó không phải. MDN cho biết “Thứ tự của các khóa là do tác nhân người dùng xác định, vì vậy bạn không nên dựa vào nó”.
Nếu bạn tham chiếu một số không trỏ đến một mục lưu trữ, nó sẽ trả vềnull
.
clear()
clear()
xóa mọi thứ khỏi đối tượng lưu trữ mà bạn đang thao tác:
localStorage.setItem('a', 'a')
localStorage.setItem('b', 'b')
localStorage.length //2
localStorage.clear()
localStorage.length //0
Giới hạn kích thước bộ nhớ
Thông qua API lưu trữ, bạn có thể lưu trữ nhiều dữ liệu hơn những gì bạn có thể làm với cookie.
Dung lượng lưu trữ có sẵn trên Web có thể khác nhau theo loại lưu trữ (cục bộ hoặc phiên), trình duyệt và theo loại thiết bị. Anghiên cứubởi html5rocks.com chỉ ra những giới hạn đó:
Máy tính để bàn
- Chrome, IE, Firefox: 10MB
- Safari: 5MB cho bộ nhớ cục bộ, bộ nhớ phiên không giới hạn
Di động
- Chrome, Firefox: 10MB
- iOS Safari và WebView: 5MB cho bộ nhớ cục bộ, bộ nhớ phiên không giới hạn trừ khi trong iOS6 và iOS7 có 5MB
- Trình duyệt Android: bộ nhớ cục bộ 2MB, bộ nhớ phiên không giới hạn
Vượt quá hạn ngạch
Bạn cần xử lý lỗi hạn ngạch, đặc biệt nếu bạn lưu trữ nhiều dữ liệu. Bạn có thể làm như vậy bằng cách thử / nắm bắt:
try {
localStorage.setItem('key', 'value')
} catch (domException) {
if (
['QuotaExceededError', 'NS_ERROR_DOM_QUOTA_REACHED'].includes(
domException.name
)
) {
// handle quota limit exceeded error
}
}
Những công cụ phát triển
Công cụ DevTools của các trình duyệt chính đều cung cấp giao diện đẹp mắt để kiểm tra và thao tác dữ liệu được lưu trữ trong Bộ nhớ cục bộ và Bộ nhớ phiên.
Trình duyệt Chrome
Firefox
Safari
Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript
Các hướng dẫn khác về trình duyệt:
- Một số thủ thuật hữu ích có sẵn trong HTML5
- Cách tôi làm cho một trang web dựa trên CMS hoạt động ngoại tuyến
- Hướng dẫn hoàn chỉnh về ứng dụng web tiến bộ
- API tìm nạp
- Hướng dẫn API đẩy
- API nhắn tin kênh
- Hướng dẫn Nhân viên Dịch vụ
- Hướng dẫn API bộ nhớ cache
- Hướng dẫn API thông báo
- Đi sâu vào IndexedDB
- API Bộ chọn: querySelector và querySelectorAll
- Tải JavaScript hiệu quả với trì hoãn và không đồng bộ
- Mô hình đối tượng tài liệu (DOM)
- API lưu trữ web: lưu trữ cục bộ và lưu trữ phiên
- Tìm hiểu cách hoạt động của HTTP Cookies
- API lịch sử
- Định dạng hình ảnh WebP
- XMLHttpRequest (XHR)
- Hướng dẫn chuyên sâu về SVG
- URL dữ liệu là gì
- Lộ trình tìm hiểu Nền tảng Web
- CORS, Chia sẻ tài nguyên đa nguồn gốc
- Nhân viên web
- Hướng dẫn requestAnimationFrame ()
- Doctype là gì
- Làm việc với Bảng điều khiển DevTools và API Bảng điều khiển
- API tổng hợp giọng nói
- Cách chờ sự kiện DOM sẵn sàng bằng JavaScript thuần túy
- Cách thêm lớp vào phần tử DOM
- Cách lặp qua các phần tử DOM từ querySelectorAll
- Cách xóa một lớp khỏi phần tử DOM
- Cách kiểm tra xem một phần tử DOM có một lớp hay không
- Cách thay đổi giá trị nút DOM
- Cách thêm sự kiện nhấp chuột vào danh sách các phần tử DOM được trả về từ querySelectorAll
- WebRTC, API web thời gian thực
- Cách lấy vị trí cuộn của một phần tử trong JavaScript
- Cách thay thế một phần tử DOM
- Cách chỉ chấp nhận hình ảnh trong trường tệp đầu vào
- Tại sao sử dụng phiên bản xem trước của trình duyệt?
- Đối tượng Blob
- Đối tượng tệp
- Đối tượng FileReader
- Đối tượng FileList
- ArrayBuffer
- ArrayBufferView
- Đối tượng URL
- Mảng đã nhập
- Đối tượng DataView
- API BroadcastChannel
- API luồng
- Đối tượng FormData
- Đối tượng Điều hướng
- Cách sử dụng API vị trí địa lý
- Cách sử dụng getUserMedia ()
- Cách sử dụng API Kéo và Thả
- Cách làm việc với tính năng cuộn trên các Trang Web
- Xử lý các biểu mẫu trong JavaScript
- Sự kiện bàn phím
- Sự kiện chuột
- Chạm vào sự kiện
- Cách xóa tất cả phần tử con khỏi phần tử DOM
- Cách tạo thuộc tính HTML bằng vanilla Javascript
- Làm cách nào để kiểm tra xem một hộp kiểm đã được chọn bằng JavaScript hay chưa?
- Cách sao chép vào khay nhớ tạm bằng JavaScript
- Cách tắt một nút bằng JavaScript
- Cách làm cho một trang có thể chỉnh sửa trong trình duyệt
- Cách lấy giá trị chuỗi truy vấn trong JavaScript với URLSearchParams
- Cách xóa tất cả CSS khỏi một trang cùng một lúc
- Cách sử dụng insertAdjacentHTML
- Safari, cảnh báo trước khi thoát
- Cách thêm hình ảnh vào DOM bằng JavaScript
- Cách đặt lại biểu mẫu
- Cách sử dụng Google Fonts