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

API cơ sở dữ liệu web SQL, 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ộ công cụ cơ sở dữ liệu SQLite), là được giới thiệu vào tháng 4 năm 2009bị bỏ qua vào tháng 11 năm 2010. Mặc dù trình duyệt được triển khai trong WebKit (hỗ trợ Safari) và vẫn hoạt động trong công cụ Blink (chạy trên Chrome), Gecko (chạy trên Firefox) không bao giờ đã triển khai tính năng này và WebKit đã xóa thứ nguyên này vào năm 2019.

Tổ chức The World Wide Web Consortium (W3C) lời khuyến khích những người cần cơ sở dữ liệu web để áp dụng API Bộ nhớ trên web như localStoragesessionStorage, hoặc IndexedDB. Những công nghệ này cho thấy thế mạnh của chúng trong việc lưu trữ khoá/giá trị và dữ liệu có cấu trúc, nhưng cũng rõ ràng có một số điểm yếu như việc không có 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 bối cảnh 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 ( ngày 4 tháng 1 năm 2022), khi đó bạn sẽ nhận được thông báo cảnh báo được 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.

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.] 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 có sẵn kể từ Chromium 110 ( ngày 4 tháng 1 năm 2022). Một chính sách doanh nghiệp để tiếp tục sử dụng tính năng này có sẵn từ Chromium 110 ( ngày 4 tháng 1 năm 2022) sang Chromium 123 ( ngày 4 tháng 1 năm 2022).
  • [ Xong.] Quyền truy cập Web SQL trong mọi ngữ cảnh sẽ không được dùng nữa 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ẽ xuất hiện. trong bảng điều khiển Vấn đề của Chrome Công cụ cho nhà phát triển.
  • [ Xong.] Đáp ngừng sử dụng thử nghiệm tiếp tục sử dụng Web SQL đã có từ Chromium 117 ( Ngày 4 tháng 1 năm 2022) sang Chromium 123 ( ngày 4 tháng 1 năm 2022). Để tìm hiểu thêm về các phiên bản thử nghiệm ngừng sử dụng, hãy xem 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 mọi ngữ cảnh không còn nữa từ Chromium 119.

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

Như đã nêu trong phần giới thiệu, API Bộ nhớ trên web như localStoragesessionStorage, hoặc IndexedDB tiêu chuẩn là lựa chọn thay thế phù hợp trong nhiều trường hợp, nhưng 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. Ví dụ là DuckDB-Ism, một tên khác là ngạc nhiên-sql. Dựa trên những tác phẩm 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 bộ nhớ mới nhanh hơn và tốt hơn 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ế bằng nội dung nào đó sẽ được cộng đồng nguồn mở duy trì, được phân phát dưới dạng gói có thể được cập nhật theo ý muốn mà không phải chịu gánh nặng của việc giới thiệu các bản sửa lỗi và tính năng mới ngay trong 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 mang cơ sở dữ liệu riêng trên web.

Hơn nữa, chúng tôi hy vọng rằng ví dụ này sẽ giúp ích cho một hệ sinh thái mới để phát triển mạnh mẽ! Bản phát hành của ô điều khiển truy cập hệ thống tệp cuối cùng cũng cung cấp dữ liệu gốc mới tạo.

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

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ẽ làm hạn chế đổi mới và các tính năng mới. Phiên bản cuối cùng của tài liệu chuẩn trạng thái "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 phải là được thiết kế để chạy các câu lệnh SQL độc hại, nhưng vẫn triển khai các phương tiện Web SQL các trình duyệt phải thực hiện chính xác điều này. Nhu cầu cập nhật thông tin về bảo mật và Các bản sửa lỗi về độ ổn định sẽ chỉ ra việc cập nhật SQLite trong Chromium. Điều này xuất hiện trực tiếp xung đột với yêu cầu của Web SQL về hành vi 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 đó. Là một đứa trẻ vào cuối những năm 2000, một ví dụ điển hình về "cuộc gọi lại chết tiệt" dưới dạng mã mẫu sau (được phép của Nolan Lawson) minh hoạ. Như bạn có thể thấy, câu lệnh SQL (sử dụng phương thức SQLite phương ngữ SQL) được chuyển dưới dạng chuỗi vào 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, đâ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 vòng cung (ít nhất là theo quan điểm ngày nay), Mozilla có nhiều mối lo ngại về Web SQL được xây dựng dựa trên SQLite:

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

Bạn có thể đọc về những quan ngại của Mozilla trong bài đăng trên blog của Mozillan Vladimir Vuki Argsevik. Để tìm hiểu thêm về quá trình hoạt động tích cực, hãy xem Phút làm việc 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 của Nolan Lawson trên blog cung cấp cái nhìn tổng quan tốt 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 hãy cho chúng tôi biết trên 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 do Joe Medley xem xét và Ben MorssJoshua Bell