הוצאה משימוש והסרה של Web SQL

Web SQL Database API, שמאפשר לאחסן נתונים בצורה מובנית במחשב של המשתמש (מבוסס על מנוע מסד הנתונים SQLite), הושק באפריל 2009 וננטש בנובמבר 2010. למרות שהיא הוטמעה ב-WebKit (שמפעילה את Safari) ונשארה פעילה במנוע Blink (שמפעיל את Chrome), Gecko (שמפעילה את Firefox) אף פעם לא הטמיעה את התכונה הזו ו-WebKit הסיר אותה ב-2019.

ארגון World Wide Web Consortium (W3C) מעודדים את האנשים שזקוקים למסדי נתונים באינטרנט לאמץ טכנולוגיות של Web Storage API כמו localStorage ו-sessionStorage, או IndexedDB. הטכנולוגיות האלה משקפות את היתרונות שלהן כשמדובר במאגרי מפתח/ערך ובנתונים מובְנים, אבל ידוע גם שיש להן נקודות חולשה, כמו היעדר שפת שאילתות חזקה. אנשים רוצים SQL באינטרנט מסיבה כלשהי.

השלבים להוצאה משימוש והסרה של Web SQL

  • [ סיימתי.] Web SQL הוצא משימוש והוסר עבור הקשרים של צד שלישי ב-Chromium 97 ( 4 בינואר 2022).
  • [ סיימתי.] גישה ל-Web SQL בהקשרים לא מאובטחים הוצאה משימוש החל מ-Chromium 105 ( 4 בינואר 2022). לאחר מכן, הודעת אזהרה הוצגה בחלונית הבעיות בכלי הפיתוח ב-Chrome.

הוצאה משימוש של חלונית הבעיות בכלי הפיתוח ל-Chrome שכוללת אזהרה שנקראת Web SQL בהקשרים לא מאובטחים.

  • [ סיימתי.] החל מ-Chromium 110 (החל מ-4 בינואר 2022), גישה ל-Web SQL בהקשרים לא מאובטחים לא זמינה יותר. מדיניות ארגונית להמשך השימוש בתכונה הזו זמינה החל מ-Chromium 110 ( מ-4 בינואר 2022 ועד Chromium 123 ( 4 בינואר 2022).
  • [ סיימתי.] הגישה ל-Web SQL בכל ההקשרים הוצאה משימוש החל מ-Chromium 115 ( 4 בינואר 2022) ומוצגת הודעת אזהרה בחלונית הבעיה בכלי הפיתוח ל-Chrome.
  • [ אנחנו כאן.] גרסת ניסיון להוצאה משימוש כדי להמשיך להשתמש ב-Web SQL זמינה החל מ-Chromium 117 ( 4 בינואר 2022) עד Chromium 123 ( 4 בינואר 2022). מידע נוסף על גרסאות ניסיון להוצאה משימוש זמין במאמר תחילת העבודה עם גרסאות מקור לניסיון.

לאן להמשיך מכאן

כפי שצוין בהקדמה, טכנולוגיות של Web Storage API כמו localStorage ו-sessionStorage, או התקן IndexedDB הן חלופות טובות בהרבה, אבל לא בבכל המקרים.

מה הסיבה להשארת נפח האחסון למפתחי אתרים

עם ההמצאה של Wasm, פתרונות SQL או NoSQL יכולים להגיע לאינטרנט. דוגמה אחת היא DuckDB-Wasm, ודוגמה אחרת היא absurd-sql. על סמך היצירות האלה, אנחנו סבורים שקהילת המפתחים יכולה לנסות פתרונות אחסון חדשים מהר יותר וטובים יותר מספקי דפדפנים.

אנחנו לא מתכננים להסיר רק את Web SQL. למעשה, החלפנו אותו במשהו שיישמר על ידי קהילת הקוד הפתוח. הוא יוצג כחבילה שאפשר לעדכן מתי שרוצים, בלי הטרחה להוסיף תיקונים ותכונות חדשות ישירות לדפדפנים. המטרה שלנו באמת היא לאפשר למפתחים להביא את מסד הנתונים שלהם לאינטרנט.

בנוסף, אנחנו מקווים שהדוגמה הזו תעזור לסביבה עסקית חדשה של מסדי נתונים בקוד פתוח לשגשג! ההשקה של נקודות האחיזה לגישה למערכת הקבצים מספקת סופית את הפרמיטיב החדש שעליו אפשר לבנות פתרונות אחסון בהתאמה אישית.

סיבות להוצאה משימוש של Web SQL

חששות לגבי קיימוּת ואבטחה

אי אפשר להטמיע את המפרט של Web SQL באופן בר קיימא, מה שמגביל את החדשנות ואת התכונות החדשות. הגרסה האחרונה של המצבים הסטנדרטיים 'סוכני המשתמש חייבים להטמיע את דיאלקט ה-SQL שנתמך על ידי Sqlite 3.6.19'.

SQLite לא תוכננה בהתחלה להריץ הצהרות SQL זדוניות, אבל הטמעת Web SQL היא שהדפדפנים צריכים לעשות את זה בדיוק. הצורך להתעדכן בתיקוני האבטחה והיציבות מכתיב את העדכון של SQLite ב-Chromium. הדבר עומד בהתנגשות ישירה עם הדרישה של Web SQL להתנהג בדיוק כמו SQLite 3.6.19.

הצורה של ה-API

Web SQL הוא גם ממשק API שמציג את הגיל שלו. בתור ילד של סוף שנות ה-2000 זו דוגמה נהדרת ל"התקשרות חזרה לגיהנום", כמו שדוגמת הקוד הבאה (באדיבות נולאן לוסון) ממחישה. כמו שאפשר לראות, הצהרות ה-SQL (באמצעות דיאלקט ה-SQL SQLite) מועברות כמחרוזות לשיטות של מסד הנתונים.

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!');
      },
    );
  },
);

במקרה שהרצתם את הקוד הזה ובודקים את הטבלה שנוצרה באמצעות כלי הפיתוח ל-Chrome, זו התוצאה:

בקטע 'Web SQL' בכלי הפיתוח ל-Chrome מוצג מסד נתונים שנקרא mydatabase, שמכיל טבלה שנקראת סופות גשם עם העמודות 'מצב רוח (טקסטואלי)' ו'מידת חומרה' (מספר שלם), ומופיעה בה רשומה אחת עם מצב רוח קודר ועם רמת חומרה של שש.

אין תמיכה במיישמים

מלבד צורת ה-API האקראית (לפחות מנקודת המבט של היום), ל-Mozilla היו בעיות רבות בנוגע לבנייה של Web SQL על SQLite:

"אנחנו חושבים ש-[SQLite] הוא הבסיס הנכון ל-API שחשוף לתוכן כללי באינטרנט, ולא פחות מהכול, כי אין תקן מהימן ומקובל, שלפיו תת-קבוצות משנה של SQL באופן מועיל. בנוסף, אנחנו לא רוצים ששינויים ב-SQLite ישפיעו על האינטרנט מאוחר יותר, ואנחנו לא חושבים ששימוש בגרסאות גדולות לדפדפנים (ותקן אינטרנט) ב-SQLite הוא נכון."

תוכלו לקרוא על החששות של Mozilla בפוסט בבלוג של Mozillan ולדימיר ווקיצ'ביץ'. למידע נוסף על היסטוריה, כדאי לעיין בדקות של קבוצת העבודה של W3C Web Applications (ואם אתם רוצים להיכנס לפרטים, כדאי לקרוא את יומני IRC) ואת הארכיונים של רשימת הדיוור). בנוסף, הפוסט בבלוג של נולאן לוסון מספק סקירה כללית טובה על מה שקרה.

משוב

אם יש לכם חששות לגבי השלבים להוצאה משימוש שמפורטים בפוסט הזה, תוכלו לדווח לנו על כך ברשימת התפוצה של blink-dev. החברות בקבוצה הזו פתוחה לכולם, וכל אחד רשאי לפרסם בה.

אישורים

המאמר הזה נכתב על ידי Joe Medley, Ben Morss ו-Joshua Bell.