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

Web SQL Database API, 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 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 (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 từng triển khai tính năng này và WebKit đã loại bỏ 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 sử dụng công nghệ Web Storage API như localStoragesessionStorage hay IndexedDB. Những công nghệ này cho thấy điểm mạnh liên quan đến kho lưu trữ khoá/giá trị và dữ liệu có cấu trúc, nhưng chúng tôi cũng công nhận rằng cũng có những điểm yếu như thiếu ngôn ngữ truy vấn rõ ràng. Mọi người muốn có SQL trên web là có lý do.

Không dùng Web SQL nữa và các bước xoá

  • [ Xong.] API Web SQL không còn được dùng nữa và bị xoá cho 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 bối cảnh không an toàn đã ngừng hoạt động kể từ Chromium 105 ( , ngày 4 tháng 1 năm 2022 ). Tại thời điểm đó, một thông báo cảnh báo hiển thị trong bảng điều khiển Vấn đề về Chrome cho Công cụ cho nhà phát triển.

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

  • [ Xong.] Tính năng truy cập Web SQL trong ngữ cảnh không an toàn không còn hoạt động kể từ Chromium 110 ( ngày 4 tháng 1 năm 2022). Hiện có chính sách dành cho doanh nghiệp về việc 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) cho Chromium 123 ( , ngày 4 tháng 1 năm 2022 ).
  • [ Xong.] Quyền truy cập Web SQL trong tất cả ngữ cảnh đã ngừng hoạt động kể từ Chromium 115 ( , ngày 4 tháng 1 năm 2022) và một thông báo cảnh báo sẽ hiển thị trong bảng điều khiển Vấn đề về Công cụ của Chrome cho nhà phát triển.
  • [ Chúng tôi sẵn sàng trợ giúp.] Hiện tại, chúng tôi đã cung cấp bản dùng thử ngừng sử dụng để tiếp tục sử dụng Web SQL từ Chromium 117 ( ngày 4 tháng 1 năm 2022) cho Chromium 123 ( , ngày 4 tháng 1 năm 2022 ). Để tìm hiểu thêm về bản dùng thử việc ngừng sử dụng, hãy xem bài viết Bắt đầu dùng bản dùng thử theo nguyên gốc.

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ư localStoragesessionStorage hoặc tiêu chuẩn IndexedDB là các lựa chọn thay thế tốt trong nhiều trường hợp, nhưng cho đến nay không phải mọi trường hợp.

Lý do cung cấp 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-tyre, 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à hiệu quả hơn so với các nhà cung cấp trình duyệt.

Chúng tôi không có ý định chỉ xoá Web SQL. Trên thực tế, chúng tôi đã thay thế API này bằng một thứ gì đó sẽ được cộng đồng nguồn mở duy trì, phân phát dưới dạng một gói có thể được cập nhật theo ý muốn mà không phải chịu gánh nặng giới thiệu 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à 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 một hệ sinh thái cơ sở dữ liệu nguồn mở mới phát triển! Việc phát hành trình xử lý quyền truy cập hệ thống tệp cuối cùng sẽ cung cấp dữ liệu gốc mới để có thể tạo các giải pháp bộ nhớ tuỳ chỉnh.

Lý do khiến Web SQL không dùng được nữa

Vấn đề về tính bảo mật và tính bền vững

Không thể triển khai thông số kỹ thuật Web SQL một cách bền vững, điều này sẽ hạn chế khả năng đổ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 tiêu chuẩn là "Tác nhân người dùng phải triển khai phương ngữ SQL được 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à các 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 bảo mật và độ ổn định buộc phải 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 API

Web SQL cũng là một API cho biết tuổi của nó. Là một đứa trẻ vào cuối những năm 2000, đây là ví dụ hay về "địa ngục gọi lại" như minh hoạ trong đoạn mã mẫu sau (theo phép lịch sự của Nolan Lawson). Như bạn có thể thấy, các câu lệnh SQL (sử dụng phương ngữ SQLite SQLite) được chuyể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ả sau đây:

Việc kiểm tra phần Web SQL trong Công cụ của Chrome cho nhà phát triển cho 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 cột (văn bản) và mức độ nghiêm trọng (số nguyên) có một mục nhập mang tâm trạng ảm đạm và mức độ nghiêm trọng là 6.

Thiếu dịch vụ hỗ trợ trình 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 trên SQLite:

"Chúng tôi cho rằng [SQLite] không phải là cơ sở phù hợp để hiển thị một API cho nội dung web nói chung, và đặc biệt là vì không có một tiêu chuẩn đáng tin cậy và được chấp nhận rộng rãi để có thể loại bỏ SQL một cách hữu ích. Ngoài ra, chúng tôi không muốn những thay đổi đối với SQLite ảnh hưởng đến web sau này, cũng như không nghĩ rằng việc khai thác các bản phát hành chính của trình duyệt (và một tiêu chuẩn web) đối với SQLite là điều không nên thận trọng."

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 Vukitricevi lấy cũ. Để tìm hiểu thêm về lịch sử, hãy xem phút trong Nhóm hoạt động của ứ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 cung cấp thông tin tổng quan đầy đủ về những gì đã xảy ra.

Ý kiến phản hồi

Nếu bạn có thắc mắc bất kỳ về các bước ngừng sử dụng đã nêu trong bài đăng này, hãy cho chúng tôi biết qua 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á.