Ngừng sử dụng và xoá Web SQL

API cơ sở dữ liệu SQLite, 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 (nội bộ dựa trên công cụ cơ sở dữ liệu SQLite), đã được ra mắt vào tháng 4 năm 2009bị bỏ qua vào tháng 11 năm 2010. Mặc dù được triển khai trong WebKit (trên 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.

World Wide Web Consortium (W3C) khuyến khích những người cần cơ sở dữ liệu web áp dụng các công nghệ Web Storage API như localStoragesessionStorage hoặc IndexedDB. Các công nghệ này cho thấy điểm mạnh của chúng khi lưu trữ khoá/giá trị và dữ liệu có cấu trúc, nhưng cũng có một số điểm yếu như việc thiếu ngôn ngữ truy vấn mạnh mẽ. Mọi người muốn có SQL trên web vì một lý do nào đó.

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.] Kể từ Chromium 105 (ngày 4 tháng 1 năm 2022), quyền truy cập Web SQL trong ngữ cảnh không an toàn không còn được dùng nữa. Tại thời điểm đó, bạn sẽ thấy một thông báo cảnh báo trong bảng điều khiển Vấn đề của Chrome cho nhà phát triển.

Bảng điều khiển Vấn đề về Công cụ của Chrome cho nhà phát triển có cảnh báo đọc SQL web trong bối cảnh không an toàn không được dùng nữa.

  • [ Xong.] Kể từ Chromium 110, quyền truy cập Web SQL trong ngữ cảnh không an toàn sẽ không còn nữa ( ngày 4 tháng 1 năm 2022). Chính sách dành cho doanh nghiệp để tiếp tục sử dụng tính năng này được cung cấp từ Chromium 110 ( ngày 4 tháng 1 năm 2022) cho đến Chromium 123 ( 4 tháng 1 năm 2022).
  • [ Xong.] Kể từ Chromium 115 (ngày 4 tháng 1 năm 2022), quyền truy cập Web SQL vào mọi ngữ cảnh sẽ không còn được dùng nữa. Đồng thời, chúng tôi sẽ đưa ra một cảnh báo trong bảng điều khiển Vấn đề của Chrome cho nhà phát triển.
  • [ Xong.] Bản dùng thử ngừng sử dụng để tiếp tục sử dụng Web SQL được cung cấp từ Chromium 117 (4 tháng 1 năm 2022) đến Chromium 123 (4 tháng 1 năm 2022). Để tìm hiểu thêm về các bản dùng thử ngừng sử dụng, hãy xem bài viết Bắt đầu sử dụng bản dùng thử theo nguyên gốc.
  • [ Xong.] Quyền truy cập Web SQL trong tất cả các ngữ cảnh sẽ không còn hoạt động qua Chromium 119 nữa.

Nội dung tiếp theo nên tìm hiểu

Như đã đề cập trong phần giới thiệu, các công nghệ Web Storage API như localStoragesessionStorage hoặc tiêu chuẩn IndexedDB là những lựa chọn thay thế phù hợp trong nhiều trường hợp, nhưng cho đến nay không phải tất cả các trường hợp.

Lý do để lại 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ể thử nghiệm nhiều lần 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 có kế hoạch chỉ xoá Web SQL. Trên thực tế, chúng tôi đã thay thế nó bằng một nội dung sẽ được 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 chịu trách nhiệm đưa trực tiếp các bản sửa lỗi và tính năng mới vào trình duyệt. Mục tiêu của chúng tôi thực sự là giúp các 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

Lo ngại về tính bền vững và tính bảo mật

Thông số kỹ thuật Web SQL không thể được triển khai một cách bền vững, điều này sẽ hạn chế việc đổi mới và các tính năng mới. Phiên bản cuối cùng của trạng thái theo nghĩa đen tiêu chuẩn "Tác nhân người dùng phải triển khai phương ngữ SQL mà 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. Tuy nhiên, việc triển khai Web SQL nghĩa là trình duyệt phải thực hiện chính xác 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 chính xác như SQLite 3.6.19.

Hình dạng của 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ụ hay về "cuộc 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 tới 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ì đây là kết quả:

Khi kiểm tra phần Web SQL trong Công cụ của Chrome cho nhà phát triển, bạn sẽ thấy một cơ sở dữ liệu có tên là mydatabase với một bảng có tên là mưa bão với tâm trạng (văn bản) và mức độ nghiêm trọng (số nguyên) của cột, trong đó có một mục nhập mang tâm trạng u sầu và mức độ nghiêm trọng là 6 cột.

Thiếu sự hỗ trợ của người triển khai

Ngoài hình dạng API phức tạp (ít nhất là theo quan điểm ngày nay), 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 cho rằng [SQLite] là cơ sở phù hợp để một API hiển thị nội dung web tổng quát, ít nhất là vì không có tiêu chuẩn nào đáng tin cậy và được chấp nhận rộng rãi để phân loại 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 cho rằng việc khai thác các bản phát hành trình duyệt lớn (và một tiêu chuẩn web) cho SQLite là quyết định."

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 Mozillan Vladimir Vukičevik. Để tìm hiểu thêm về lịch sử, hãy xem Phút hoạt động của Nhóm làm việc với ứng dụng web W3C (và nếu bạn thực sự muốn đi sâu vào 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.

Ý kiến 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. Tư cách thành viên trong nhóm này dành cho mọi người và mọi người đều được phép đăng bài.

Xác nhận

Bài viết này đã được Joe Medley, Ben MorssJoshua Bell đánh giá.