虎瀾集: 網頁與資料庫 (3)

October 9th, 2016

其實大部份的 browser 裡早就都有資料庫引擎了,就是大名鼎鼎的 SQLite。那既然有這東西,幹嘛不拿來用呢? 於是乎就有 WebSQL 這份規格的誕生了,其實它的基本想法很簡單,要查什麼把 SQL statement 丟進去給 SQLite 跑一跑,再把結果轉成 JavaScript object 扔出來就好。

殊不知理想很美麗,現實好殘酷,理想很豐滿,現實粉骨感滴。

首先是天條中的天條,security。SQL injection 這東西現在應該很少人不知道 (至少修過基礎 security 課程的人都該知道),WebSQL 好骨感的地方在於就大剌剌的把 SQL statement 放在那裡,這只能說是一開始設計的時候好傻好天真。更糟的是,SQLite 本身並不是標準 SQL,它只是一組很流行的 SQL dialect,這下子微軟的大佬們可就不幹了,憑什麼要改微軟的 database engine 去符合 SQLite 的行為呢?

當然真的要鞭有很多東西可以鞭,例如 WebSQL 的 transaction model 也是一團粥,非常不清楚。SQL statement 百百款,到底哪幾款可以用呢? 總不能 browser 廠商自由心證吧? 這時候另外一個大佬 Mozilla 出來說話了。簡單的意思是說,SQL 不適合,大家應該多多支持 NoSQL-based 的 IndexedDB,因為它簡單好用看起來很 webby 云云。

這種 NoSQL hype 從此荼毒無數師程工近十年,包括本人在內都是受害者。在兩大大佬加持下,WebSQL 連改進的機會也沒有就直接 GG 了。至於為何提案的 Google 內部沒人去挺 WebSQL 改進方案呢? 謠指部指出一樣是 NoSQL hype 惹的禍,因為大家認為應該做比較低階的 IndexedDB,再讓其他人在上頭發展 RDBMS (如果還有人要用的話),這樣符合 componentized web 的理想,加上 WebSQL 初期 security 問題惡名照彰,GG 也是意料中事。

講到這裡大家對 IndexedDB 的崛起就應該比較有概念了,IndexedDB 好像做的很好好棒棒,可是為啥沒什麼人用呢? 一句話,難用咩。想想看,若我有兩個選擇:

Some DB <-> Some middle layer <-> Web Server <---> Web Browser
Some DB <-> Some middle layer <-> Web Server <--- sync ---> Web Browser

我用 IndexedDB 是因為我打算走第二條路 (或是有 offline 的需求,但那是極少數),所以不想用原來的 solution。可是若是學習曲線太難,還要想辦法自己搞 sync 的時候,那就很歡樂了。除此之外,IndexedDB 剛出來時問題多多,連玩具程式都跑不好,某 A 家的瀏覽器從庫克老大開始廣告算起,做了三版還沒把問題修完,你就知道有多歡樂多難搞了。

那到底為何 IndexedDB 這麼難用難搞呢? 因為這麼大的規格在提出來之後到完成規格化之前,都沒有人實際用這東西去開發一個夠大的資料庫 (除了幾個 demo 程式之外),所以他們只是提出一個提案並認為這可以解決師程工們的問題,接下來,就是見證奇蹟的時刻。而我們後來用這個東西的師程工,就是這麼一個奇蹟的見證者。

幹,林背混社會二十幾年,還沒聽過火車不用先試車,模型車會跑就直接商務運營的。很可惜,我是上了火車去當駕駛員才知道這東西這麼犀利的,想當然耳 project 自然會克拉屎 (crash 的台式念法,歹勢偶素台客 …)。敝社的優良傳統是,project 不怕栽,就怕不知道栽在哪裡。於是乎檢討報告一出,矛頭全部指向奇妙的 IndexedDB,接下來要怎麼修這東西呢? 欲知後事如何,且聽下回分解 …

Web Development, 技術文章 | Comments Jump to the top of this page

Comments are closed.

隨便寫寫大家隨便看看的不出名小格子

舊文索引

站內管理