API Cơ sở dữ liệu SQL trên web cho phép bạn lưu trữ dữ liệu theo cách có cấu trúc trên máy tính của người dùng (dựa trên công cụ cơ sở dữ liệu SQLite nội bộ), được ra mắt vào tháng 4 năm 2009 và bị ngừng sử dụng vào tháng 11 năm 2010. Mặc dù được triển khai trong WebKit (hỗ trợ Safari) và vẫn hoạt động trong công cụ Blink (hỗ trợ Chrome), nhưng Gecko (hỗ trợ Firefox) chưa bao giờ triển khai tính năng này và WebKit đã xoá tính năng này vào năm 2019.
Tổ chức World Wide Web Consortium (W3C) khuyến khích những người cần cơ sở dữ liệu web sử dụng các công nghệ Web Storage API như localStorage
và sessionStorage
hoặc IndexedDB.
Các công nghệ này thể hiện điểm mạnh khi nói đến kho khoá/giá trị và dữ liệu có cấu trúc, nhưng cũng có điểm yếu như thiếu ngôn ngữ truy vấn mạnh. Mọi người muốn có SQL trên web vì một lý do.
Các bước ngừng sử dụng và xoá Web SQL
- [ Xong.] Web SQL không được dùng nữa và bị xoá đối với ngữ cảnh của bên thứ ba trong Chromium 97 ( ngày 4 tháng 1 năm 2022).
- [ Xong.] Quyền truy cập Web SQL trong ngữ cảnh không an toàn đã ngừng hoạt động kể từ Chromium 105 ( 4 tháng 1 năm 2022) tại thời điểm đó, thông báo cảnh báo sẽ xuất hiện trong bảng điều khiển Vấn đề của Công cụ cho nhà phát triển của Chrome.
- [ Xong.] Kể từ Chromium 110 (ngày 4 tháng 1 năm 2022), bạn sẽ không thể truy cập Web SQL trong ngữ cảnh không an toàn nữa. Bạn có thể sử dụng chính sách dành cho doanh nghiệp để tiếp tục sử dụng tính năng này từ Chromium 110 (ngày 4 tháng 1 năm 2022) đến Chromium 123 (ngày 4 tháng 1 năm 2022).
- [ Xong.] Quyền truy cập SQL trên web trong tất cả ngữ cảnh không còn được dùng nữa kể từ phiên bản Chromium 115 ( ngày 4 tháng 1 năm 2022) và một thông báo cảnh báo sẽ xuất hiện trong bảng điều khiển Vấn đề của Công cụ của Chrome cho nhà phát triển.
- [thử nghiệm ngừng sử dụng để tiếp tục sử dụng Web SQL có sẵn từ Chromium 117 (ngày 4 tháng 1 năm 2022) đến Chromium 123 (ngày 4 tháng 1 năm 2022). Để tìm hiểu thêm về các thử nghiệm ngừng sử dụng, hãy xem bài viết Bắt đầu sử dụng thử nghiệm nguồn gốc. Xong.] Một bản
- [ Xong.] Quyền truy cập Web SQL trong tất cả ngữ cảnh không còn hoạt động từ Chromium 119.
Nội dung tiếp theo nên tìm hiểu
Như đã chỉ ra trong phần giới thiệu, các công nghệ API bộ nhớ web như localStorage
và sessionStorage
hoặc tiêu chuẩn IndexedDB là những giải pháp thay thế hiệu quả trong nhiều trường hợp, nhưng không phải tất cả.
Lý do để giao quyền quản lý bộ nhớ cho nhà phát triển web
Với sự ra đời của Wasm, các giải pháp SQL hoặc NoSQL có thể xuất hiện trên web. Một ví dụ là DuckDB-Wasm, một ví dụ khác là absurd-sql. Dựa trên những sáng tạo này, chúng tôi cảm thấy rằng cộng đồng nhà phát triển có thể lặp lại và tạo ra các giải pháp lưu trữ mới nhanh hơn và tốt hơn so với các nhà cung cấp trình duyệt.
Chúng tôi không chỉ có kế hoạch xoá Web SQL. Trên thực tế, chúng tôi đã thay thế nó bằng một thứ gì đó do cộng đồng nguồn mở duy trì, được phân phát dưới dạng một gói có thể cập nhật tuỳ ý mà không phải gánh nặng việc giới thiệu các bản sửa lỗi và tính năng mới trực tiếp vào trình duyệt. Mục tiêu thực sự của chúng tôi là cho phép nhà phát triển đưa cơ sở dữ liệu của riêng họ lên web.
Hơn nữa, chúng tôi hy vọng rằng ví dụ này sẽ giúp phát triển một hệ sinh thái mới gồm cơ sở dữ liệu nguồn mở! Việc phát hành xử lý quyền truy cập vào hệ thống tệp cuối cùng sẽ cung cấp dữ liệu gốc mới để bạn có thể xây dựng các giải pháp lưu trữ tuỳ chỉnh.
Lý do không dùng Web SQL
Mối lo ngại về tính bền vững và bảo mật
Không thể triển khai quy cách SQL trên web một cách bền vững, điều này hạn chế sự đổi mới và các tính năng mới. Phiên bản mới nhất của tiêu chuẩn này theo nghĩa đen nêu rõ "Tác nhân người dùng phải triển khai phương ngữ SQL do Sqlite 3.6.19 hỗ trợ".
Ban đầu, SQLite không được thiết kế để chạy các câu lệnh SQL độc hại, nhưng việc triển khai Web SQL có nghĩa là trình duyệt phải thực hiện chính việc này. Nhu cầu cập nhật các bản sửa lỗi về bảo mật và độ ổn định sẽ yêu cầu bạn cập nhật SQLite trong Chromium. Điều này xung đột trực tiếp với yêu cầu của Web SQL về việc hoạt động giống hệt như SQLite 3.6.19.
Hình dạng API
Web SQL cũng là một API cho biết tuổi của API đó. Mã mẫu sau đây (do Nolan Lawson cung cấp) là một ví dụ tiêu biểu cho phương pháp "gọi lại địa ngục". Như bạn có thể thấy, các câu lệnh SQL (sử dụng phương ngữ SQL SQLite) được truyền dưới dạng chuỗi đến các phương thức cơ sở dữ liệu.
openDatabase(
// Name
'mydatabase',
// Version
1,
// Display name
'mydatabase',
// Estimated size
5000000,
// Creation callback
function (db) {
db.transaction(
// Transaction callback
function (tx) {
// Execute SQL statement
tx.executeSql(
// SQL statement
'create table rainstorms (mood text, severity int)',
// Arguments
[],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'insert into rainstorms values (?, ?)',
// Arguments
['somber', 6],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'select * from rainstorms where mood = ?',
// Arguments
['somber'],
// Success callback
function (tx, res) {
// Do something with the result
var row = res.rows.item(0);
console.log(
'rainstorm severity: ' +
row.severity +
', my mood: ' +
row.mood,
);
},
);
},
);
},
);
},
// Error callback
function (err) {
console.log('Transaction failed!: ' + err);
},
// Success callback);
function () {
console.log('Transaction succeeded!');
},
);
},
);
Nếu bạn chạy mã này và kiểm tra bảng đã tạo bằng Công cụ của Chrome cho nhà phát triển, thì kết quả sẽ là:
Thiếu dịch vụ hỗ trợ cho người triển khai
Ngoài hình dạng API khó hiểu (ít nhất là theo quan điểm hiện tại), Mozilla còn có nhiều mối lo ngại về việc Web SQL được xây dựng dựa trên SQLite:
"Chúng tôi không nghĩ rằng [SQLite] là cơ sở phù hợp cho một API hiển thị nội dung web chung, ít nhất là vì không có tiêu chuẩn đáng tin cậy, được chấp nhận rộng rãi nào có thể phân nhóm SQL theo cách hữu ích. Ngoài ra, chúng tôi không muốn các thay đổi đối với SQLite ảnh hưởng đến web sau này và không nghĩ rằng việc khai thác các bản phát hành trình duyệt lớn (và tiêu chuẩn web) cho SQLite là khôn ngoan."
Bạn có thể đọc về những mối lo ngại của Mozilla trong bài đăng trên blog của cựu nhân viên Mozilla Vladimir Vukićević. Để biết thêm thông tin về quá trình phát triển, hãy xem bản ghi của Nhóm làm việc về ứng dụng web của W3C (và nếu bạn thực sự muốn tìm hiểu chi tiết, hãy đọc nhật ký IRC) và bản lưu trữ danh sách gửi thư). Ngoài ra, bài đăng trên blog của Nolan Lawson cũng cung cấp thông tin tổng quan về những gì đã xảy ra.
Phản hồi
Nếu bạn có bất kỳ thắc mắc nào về các bước ngừng sử dụng được nêu trong bài đăng này, hãy cho chúng tôi biết trong danh sách gửi thư của Blink-dev. Mọi người đều có thể tham gia nhóm này và đăng nội dung.
Đường liên kết có liên quan
- Mục ChromeStatus: Ngừng sử dụng và xoá WebSQL trong ngữ cảnh bên thứ ba
- Mục nhập ChromeStatus: Ngừng sử dụng và xoá WebSQL trong các bối cảnh không an toàn
- Ý định ngừng sử dụng và xoá: WebSQL trong ngữ cảnh bên thứ ba
- Ý định ngừng sử dụng và xoá: WebSQL trong các bối cảnh không an toàn
- Vấn đề về Chromium: Ngừng sử dụng và xoá WebSQL trong ngữ cảnh bên thứ ba
- Vấn đề về Chromium: Ngừng sử dụng và xoá WebSQL trong các ngữ cảnh không an toàn
- Vấn đề về Chromium: Ngừng sử dụng và xoá WebSQL (Window#openDatabase)
- SQLite Wasm trong trình duyệt được Hệ thống tệp riêng tư của Origin hỗ trợ
Lời cảm ơn
Bài viết này đã được Joe Medley, Ben Morss và Joshua Bell xem xét.