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

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

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

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

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

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

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

आगे क्या करें

जैसा कि शुरुआती जानकारी में बताया गया है, Web Storage API पर localStorage और sessionStorage या IndexedDB स्टैंडर्ड जैसी टेक्नोलॉजी, कई अच्छे विकल्प हैं. हालांकि, फ़िलहाल सभी मामलों में इनका इस्तेमाल नहीं किया जा सकता.

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

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

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

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

वेब एसक्यूएल के बंद होने की वजहें

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

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

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

एपीआई का आकार

वेब एसक्यूएल एक ऐसा एपीआई भी है जो इसकी उम्र दिखाता है. 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 पर बनाए जा रहे वेब एसक्यूएल को लेकर कई चिंता थी:

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

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

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

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

स्वीकार हैं

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