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

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

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

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

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

Chrome DevTools के समस्याओं वाले पैनल में, असुरक्षित कॉन्टेक्स्ट में Web SQL के इस्तेमाल से जुड़ी चेतावनी नहीं दिखेगी.

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

यहां से कहां जाएं

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

वेब डेवलपर को स्टोरेज देने की वजह

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

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

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

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

पर्यावरण और सुरक्षा से जुड़ी समस्याएं

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

SQLite को शुरू में, नुकसान पहुंचाने वाले एसक्यूएल स्टेटमेंट चलाने के लिए डिज़ाइन नहीं किया गया था. हालांकि, वेब एसक्यूएल लागू करने का मतलब है कि ब्राउज़र को यही करना होगा. सुरक्षा और स्थिरता से जुड़े सुधारों को आज़माकर, Chromium में SQLite को अपडेट करना आसान होता है. यह सीधे तौर पर, वेब 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 में वेब SQL सेक्शन की जांच करने पर, mydatabase नाम का एक डेटाबेस दिखता है. इसमें rainstorms नाम की एक टेबल है. इस टेबल में मूड (टेक्स्ट) और गंभीरता (पूर्णांक) कॉलम हैं. इनमें से मूड कॉलम में एक एंट्री है, जिसकी गंभीरता छह है और मूड उदास है.

लागू करने वाले के लिए सहायता की कमी

कम से कम आज के हिसाब से, एपीआई के आकार के अलावा, Mozilla को SQLite पर आधारित वेब एसक्यूएल के बारे में कई चिंताएं थीं:

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

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

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

अगर आपको इस पोस्ट में बताए गए, बंद किए जाने के तरीके के बारे में कोई समस्या है, तो हमें blink-dev मेलिंग सूची पर बताएं. इस ग्रुप में शामिल होने के लिए अनुमति लेने की ज़रूरत नहीं है. साथ ही, इसमें कोई भी पोस्ट कर सकता है.

स्वीकार की गई

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