वेब एसक्यूएल को बंद करना और हटाना

Web SQL Database API की मदद से, उपयोगकर्ता के कंप्यूटर पर स्ट्रक्चर्ड तरीके से डेटा स्टोर किया जा सकता है (अंदरूनी तौर पर, SQLite डेटाबेस इंजन के आधार पर), अप्रैल 2009 में लॉन्च किया गया और इसे नवंबर 2010 में छोड़ दिया गया. हालांकि, इसे WebKit (जिस पर Safari में काम करता है) लागू किया गया और Blink इंजन (जिस पर Chrome काम करता है) में चालू रहा, लेकिन Gecko (जिसके ज़रिए Firefox काम करता है) ने इस सुविधा को कभी लागू नहीं किया. WebKit ने इसे 2019 में हटा दिया.

वर्ल्ड वाइड वेब कंसोर्टियम (W3C) उन वेब डेटाबेस को localStorage और sessionStorage या IndexedDB जैसी Web Storage API टेक्नोलॉजी को अपनाने के लिए बढ़ावा देता है. जब कुंजी/वैल्यू स्टोर और स्ट्रक्चर्ड डेटा की बात आती है, तो ये टेक्नोलॉजी अपनी ताकत दिखाती हैं. हालांकि, इनमें कुछ खामियां भी होती हैं, जैसे कि क्वेरी वाली मज़बूत भाषा की कमी. लोग किसी वजह से वेब पर एसक्यूएल का इस्तेमाल करना चाहते हैं.

Web SQL के बंद होने और हटाने के तरीके

  • [ हो गया.] Chromium 97 में, तीसरे पक्ष के कॉन्टेक्स्ट के लिए Web SQL को बंद कर दिया गया था और हटा दिया गया था ( 4 जनवरी, 2022).
  • [ हो गया.] असुरक्षित कॉन्टेक्स्ट में Web SQL का ऐक्सेस, Chromium 105 ( 4 जनवरी, 2022) से बंद कर दिया गया था. उस समय, Chrome DevTools के समस्या पैनल में चेतावनी वाला मैसेज दिख रहा था.

Chrome DevTools की समस्याओं वाले पैनल को बंद कर दिया गया है. इस पैनल में, वेब एसक्यूएल को असुरक्षित कॉन्टेक्स्ट में पढ़ने पर चेतावनी दी गई है.

  • [ हो गया.] असुरक्षित कॉन्टेक्स्ट में Web SQL का ऐक्सेस, Chromium 110 ( 4 जनवरी, 2022 से उपलब्ध नहीं होगा). इस सुविधा का इस्तेमाल जारी रखने के लिए, एंटरप्राइज़ नीति Chromium 110 ( 4 जनवरी, 2022) से Chromium 123 तक उपलब्ध है ( 4 जनवरी, 2022).
  • [ हो गया.] Chromium 115 ( 4 जनवरी, 2022) से सभी कॉन्टेक्स्ट में Web SQL का ऐक्सेस बंद कर दिया गया है. Chrome DevTools समस्या पैनल में चेतावनी वाला मैसेज दिखेगा.
  • [ हो गया.] वेब एसक्यूएल का इस्तेमाल जारी रखने के लिए, Chromium 117 ( 4 जनवरी, 2022) से Chromium 123 ( 4 जनवरी, 2022) तक बंद करने का ट्रायल उपलब्ध था. बंद करने के ट्रायल के बारे में ज़्यादा जानने के लिए, ऑरिजिन ट्रायल का इस्तेमाल शुरू करना लेख देखें.
  • [ हो गया.] सभी कॉन्टेक्स्ट में वेब एसक्यूएल का ऐक्सेस, अब Chromium 119 से उपलब्ध नहीं है.

आगे क्या करें

जैसा कि शुरुआती जानकारी में बताया गया है, localStorage और sessionStorage या IndexedDB जैसी टेक्नोलॉजी, कई मामलों में बेहतर विकल्प हैं. हालांकि, अब तक सभी मामलों में ऐसा नहीं है.

वेब डेवलपर के लिए स्टोरेज छोड़ने की वजह

Wasm के आने के बाद, SQL या NoSQL टूल अब वेब पर उपलब्ध हो सकते हैं. इसका एक उदाहरण DuckDB-Wasm है और दूसरा absurd-sql है. इन नतीजों के आधार पर, हमें लगता है कि डेवलपर कम्यूनिटी, ब्राउज़र वेंडर की तुलना में ज़्यादा तेज़ी से और बेहतर स्टोरेज की नई सुविधाएं बना सकती है.

हम सिर्फ़ वेब एसक्यूएल को हटाने के बारे में नहीं सोच रहे हैं. असल में, हमने इसकी जगह कुछ ऐसा किया है जिसे ओपन सोर्स समुदाय मैनेज करेगा. साथ ही, इसे एक ऐसे पैकेज के रूप में इस्तेमाल किया जाएगा जिसे अपनी मर्ज़ी से अपडेट किया जा सकता है और सीधे ब्राउज़र में नई सुविधाएं शुरू करने की ज़रूरत नहीं होगी. हमारा मकसद डेवलपर को यह सुविधा देना है कि वे वेब पर अपना डेटाबेस पेश कर सकें.

हमें उम्मीद है कि इस उदाहरण से, ओपन सोर्स डेटाबेस के एक नए नेटवर्क को आगे बढ़ने में मदद मिलेगी! फ़ाइल सिस्टम के ऐक्सेस हैंडल की रिलीज़ से आखिर में एक नया तरीका मिलता है, जिस पर कस्टम स्टोरेज समाधान बनाए जा सकते हैं.

वेब एसक्यूएल की सुविधा को बंद करने की वजहें

स्थिरता और सुरक्षा से जुड़ी चिंताएं

Web SQL की खास बातों को ईको-फ़्रेंडली नहीं बनाया जा सकता. इससे इनोवेशन और नई सुविधाओं को सीमित किया जाता है. स्टैंडर्ड के आखिरी वर्शन में बताया गया है "उपयोगकर्ता एजेंट को Sqlite 3.6.19 के साथ काम करने वाली एसक्यूएल भाषा लागू करनी होगी".

SQLite को शुरुआत में नुकसान पहुंचाने वाले SQL स्टेटमेंट चलाने के लिए डिज़ाइन नहीं किया गया था. फिर भी, Web SQL लागू करने का मतलब है कि ब्राउज़र को ऐसा ही करना है. सुरक्षा और स्थिरता से जुड़े सुधारों को आज़माकर, Chromium में SQLite को अपडेट करना आसान होता है. इस वजह से, Web SQL की सेवा के लिए ज़रूरी SQLite 3.6.19 की तरह ही काम करना सीधे तौर पर मुश्किल हो जाता है.

एपीआई का आकार

Web SQL एक एपीआई भी है, जो इसकी उम्र दिखाता है. साल 2000 के आखिर की बच्ची होने की वजह से, यह "कॉलबैक हेल" का एक बहुत अच्छा उदाहरण है, क्योंकि यहां दिया गया कोड सैंपल (नोलन लॉसन के सौजन्य से) दिखाया गया है. जैसा कि आपको दिख रहा है, एसक्यूएल स्टेटमेंट (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 DevTools की मदद से, बनाई गई टेबल की जांच करनी है, तो यह नतीजा मिला है:

Chrome DevTools में वेब एसक्यूएल सेक्शन की जांच करने पर, mydatabase दिखाई देता है. इसमें रेनस्टॉर्म नाम की टेबल होती है. इस टेबल में कॉलम मूड (टेक्स्ट आधारित) और गंभीरता (इंटीजर) होता है. इसमें एक एंट्री में मूड के हिसाब से और छह की गंभीरता होती है.

इस टूल को लागू करने के लिए ज़रूरी सहायता की कमी है

आर्केन एपीआई के आकार (कम से कम आज के नज़रिए से) के अलावा, Mozilla के सामने कई समस्याएं थीं कि SQLite पर Web SQL बनाए जाने का काम चल रहा था:

"हमें नहीं लगता कि [SQLite] सामान्य वेब कॉन्टेंट दिखाने वाले एपीआई के लिए सही है. कम से कम, ऐसा कोई भरोसेमंद और बड़े पैमाने पर स्वीकार किया जाने वाला स्टैंडर्ड नहीं है जो एसक्यूएल को सही तरीके से सबसेट कर सके. साथ ही, हम नहीं चाहते कि SQLite में होने वाले बदलाव, बाद में वेब पर भी असर डालें. साथ ही, हमें लगता है कि SQLite के साथ, बड़े ब्राउज़र रिलीज़ (और वेब स्टैंडर्ड) का इस्तेमाल करना सही नहीं है."

Mozilla की समस्याओं के बारे में जानने के लिए, मोज़िलान व्लादिमीर वुकिचेविच की ब्लॉग पोस्ट पढ़ें. कुछ और इतिहास के लिए, W3C वेब ऐप्लिकेशन वर्किंग ग्रुप के मिनट देखें (और अगर आपको ज़्यादा जानकारी देखनी है, तो आईआरसी लॉग पढ़ें) और मेलिंग की सूची के संग्रह देखें). इसके अलावा, नोलन लॉसन की ब्लॉग पोस्ट इस बारे में अच्छी जानकारी देती है कि क्या हुआ था.

सुझाव/राय दें या शिकायत करें

अगर इस पोस्ट में, सुविधा बंद करने के चरणों को लेकर आपको कोई समस्या है, तो blink-डेवलपर ईमेल पाने वाले लोगों की सूची में हमें बताएं. इस समूह की सदस्यता सभी के लिए खुली है और कोई भी पोस्ट कर सकता है.

स्वीकार की गई

इस लेख की समीक्षा जो मेडली और बेन मॉर्स और जोशुआ बेल ने की है.