את Web SQL Database API, שמאפשר לכם לאחסן נתונים בצורה מובנית במחשב של המשתמש (באופן פנימי על סמך ומנוע מסד הנתונים SQLite), הוצגה באפריל 2009 וגם ננטש בנובמבר 2010. אמנם הוא הוטמע ב-WebKit (שמפעיל את Safari) ונשאר פעיל ב- המנוע Blink (שמפעיל את Chrome), Gecko (שמפעיל את Firefox) אף פעם הטמענו את התכונה הזו WebKit הסיר אותו ב-2019.
The 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.
- [ בוצע.] אין יותר גישה ל-Web SQL בהקשרים לא מאובטחים זמינות החל מ-Chromium 110 ( 4 בינואר 2022). מדיניות הארגון כדי להמשיך להשתמש בתכונה זמינה מ- 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 SQL בכל ההקשרים מ-Chromium 119.
לאן ממשיכים מכאן
כפי שצוין במבוא,
Web Storage API
טכנולוגיות כמו
localStorage
וגם
sessionStorage
,
או
IndexedDB
הם חלופות טובות במקרים רבים, אבל לא בכולם.
הנימוק להשארת האחסון למפתחי אתרים
בעקבות ההמצאה של Wasm, פתרונות SQL ו-NoSQL יכולים להגיע לאינטרנט. דוגמה אחת הוא DuckDB-Wasm, עוד אחד ABurd-sql על סמך היצירות האלה, אנחנו חושבים שקהילת המפתחים יכולה לחזור על הדברים וליצור אחסון חדש פתרונות מהירים וטובים יותר מאשר ספקי דפדפנים.
אנחנו לא מתכננים להסיר רק Web SQL. למעשה, החלפנו אותו משהו שתתחזק על ידי קהילת הקוד הפתוח, ותשמש כחבילה ניתנים לעדכון בכל עת — בלי המעמסה של הוספת תיקונים ותכונות חדשות. ישירות לדפדפנים. המטרה שלנו היא לאפשר למפתחים להביא את מסד הנתונים שלו לאינטרנט.
בנוסף, אנחנו מקווים שהדוגמה הזו תעזור לסביבה עסקית חדשה מסדי נתונים בקוד פתוח כדי לשגשג! השקה של כינויים לגישה למערכת קבצים מספק את הפרמיטיבי החדש שבו ניתן להשתמש בפתרונות אחסון מותאמים אישית של BERT.
סיבות להוצאה משימוש של 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) מועבר כמחרוזות ל-methods של מסד נתונים.
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, זו התוצאה:
אין תמיכה במטמיע
מלבד צורת ה-API של arcane (לפחות מנקודת המבט של היום), Mozilla היו הרבה חששות על Web SQL שמבוסס על SQLite:
"אנחנו לא חושבים ש-[SQLite] הוא הבסיס הנכון לממשק API שחשוף לאינטרנט הכללי בראש ובראשונה, כי אין כאן כלל שיוצרת קבוצת משנה של SQL בצורה שימושית. בנוסף, אנחנו לא רוצים שיבוצעו שינויים ל-SQLite כדי להשפיע על האינטרנט מאוחר יותר, ולא לנצל את השימוש של מושקרים (ותקן אינטרנט) ל-SQLite הם חכמים."
אפשר לקרוא על החששות של Mozilla בקישור הפוסט בבלוג של Mozillan ולדימיר ווקיצ'ביק. להיסטוריה נוספת, כדאי לעיין דקות קבוצת העבודה של אפליקציות אינטרנט של W3C (ואם אתם באמת רוצים להיכנס לפרטים, קראו את יומני IRC) וגם ארכיונים של רשימות דואר). בנוסף, הפוסט בבלוג של Nolan Lawson מספק סקירה כללית של מה שקרה.
משוב
אם יש לך חששות לגבי שלבי ההוצאה משימוש שמפורטים כאן דווחו לנו blink-dev רשימת תפוצה. החברות בקבוצה הזו פתוחה לכולם, וכל אחד רשאי לפרסם.
קישורים רלוונטיים
- רשומת ChromeStatus: הוצאה משימוש והסרה של WebSQL בהקשרים של צד שלישי
- רשומת ChromeStatus: הוצאה משימוש והסרה של WebSQL בהקשרים לא מאובטחים
- כוונה להוציא משימוש ולהסיר: WebSQL בהקשרים של צד שלישי
- כוונה להוציא משימוש ולהסיר: WebSQL בהקשרים לא מאובטחים
- בעיה ב-Chromium: הוצאה משימוש והסרה של WebSQL בהקשרים של צד שלישי
- בעיה ב-Chromium: הוצאה משימוש והסרה של WebSQL בהקשרים לא מאובטחים
- בעיה ב-Chromium: הוצאה משימוש והסרה של WebSQL (Window#openDatabase)
- SQLite Wasm בדפדפן שמגובה על ידי מערכת הקבצים הפרטיים המקורית
אישורים
המאמר הזה נבדק על ידי ג'ו מדלי בן מורס, וגם Joshua Bell.