{eval=Array;=+count(Array);}
假如淘寶這么做了,那就得打通客戶到數(shù)據(jù)庫服務(wù)器的網(wǎng)絡(luò),同時(shí)在前端寫明數(shù)據(jù)庫賬號密碼實(shí)例名。我覺得挺好
你的訴求是,如果后端只干了增刪改查,是不是可以干掉。
答案是當(dāng)然可以,而且這個(gè)思路符合邏輯。
但是干掉的方式有很多
1,瀏覽器直接和數(shù)據(jù)庫打交道。
這個(gè)思路早就有之,甚至在富瀏覽器之前。微軟在他的IE瀏覽器中提供了ActiveX的擴(kuò)展,允許你安裝插件。此時(shí)你如果安裝同樣是微軟的Access數(shù)據(jù)庫插件。就可以直接在瀏覽器操作數(shù)據(jù)庫了。
2,使用輕量數(shù)據(jù)庫嵌到前端。
富客戶端概念興起后,在前端存數(shù)據(jù)也不新鮮了。只是前端不認(rèn)為這是數(shù)據(jù)庫,更多認(rèn)為是緩存。因?yàn)樽罱K避免數(shù)據(jù)丟失,安全,一致性,還是需要后端的。此外,將sqlite類似的數(shù)據(jù)庫嵌到app是非常常見了,但是app可能不被認(rèn)為是“前端”。
3,打不過就加入,前端實(shí)現(xiàn)輕服務(wù)端。
正兒八經(jīng)說一下這一條。這個(gè)無疑是未來去除討厭的服務(wù)端的發(fā)展方向。借助nodejs,graphQL等框架,面向前端編程已經(jīng)非常流行了。這里也推薦題主看一下Prisma。堅(jiān)定自己想法,前端走遍天下是可行的。
技術(shù)上可以,但是一般都不會(huì)這樣做,原因如下:
因此,基本上數(shù)據(jù)庫訪問的業(yè)務(wù)代碼都是放在服務(wù)端的,客戶端通過訪問服務(wù)端來了解訪問數(shù)據(jù)庫。
你可以將現(xiàn)在的的“狀態(tài)”理解為就是前端直接鏈接了數(shù)據(jù)庫,并給他起個(gè)特殊的名字,比如“萌某數(shù)據(jù)連接”?!懊饶硵?shù)據(jù)連接”,“使用了多種協(xié)議”,為了“穿越多種”網(wǎng)關(guān);使用了多種保護(hù)策略,用以保護(hù)鏈接的有效性;……。
非專業(yè)人士,簡單回答一下:
前端連接數(shù)據(jù)庫,一個(gè)是安全問題,第二是并發(fā)性能問題,第三是系統(tǒng)的可維護(hù)性問題。
當(dāng)然第三個(gè)問題如果真想解決,通過一些設(shè)計(jì)還是可以解決的,第一第二問題那就關(guān)系到互聯(lián)網(wǎng)的一些基礎(chǔ)性東西,基礎(chǔ)決定上層建筑,目前的這些設(shè)計(jì)都是建立在這些基礎(chǔ)上形成的相對最優(yōu)的方案。
也不是完全不行
我以前做程序的時(shí)候也是在前端直接連接數(shù)據(jù),那時(shí)候我剛?cè)胄幸荒?,我們公司的?xiàng)目屬于內(nèi)網(wǎng)項(xiàng)目,不需要考慮什么安全問題,當(dāng)時(shí)我負(fù)責(zé)的一個(gè)模塊是基于applet的,使用java程序嵌入網(wǎng)頁。
我在applet里面寫了jdbc連接,然后使用js拼接sql,調(diào)用applet操作數(shù)據(jù)庫,完全不經(jīng)過后臺(tái),開發(fā)起來非常方便,網(wǎng)頁刷新一下就能調(diào)試了,不需要重啟后臺(tái)。
不過那個(gè)項(xiàng)目也就客戶那邊幾個(gè)人在用,不存在安全性問題,也沒有并發(fā)問題,所以那樣做其實(shí)一點(diǎn)問題都沒有。
但是,如果是其他web項(xiàng)目甚至是互聯(lián)網(wǎng)項(xiàng)目,這樣弄純粹就是不想混了,在js里面寫sql,連接數(shù)據(jù)庫,別人稍微會(huì)點(diǎn)技術(shù)的,直接運(yùn)行一句delete,或者drop table,這時(shí)候你怎么辦,特別是你數(shù)據(jù)庫數(shù)據(jù)高達(dá)百萬或者十幾億的數(shù)據(jù),足夠讓你公司破產(chǎn)了。
其實(shí)現(xiàn)在也是有一些基于web端的存儲(chǔ),比如sqlite,websql,sessionstorage,localStorage,session,cookie,或者基于js自己實(shí)現(xiàn)個(gè)簡易數(shù)據(jù)庫,我曾經(jīng)就嘗試實(shí)現(xiàn)過js版數(shù)據(jù)庫,然后服務(wù)器上開著一個(gè)瀏覽器,后臺(tái)用websocket交互這個(gè)瀏覽器上的數(shù)據(jù)庫。
瀏覽器內(nèi)部提供的存儲(chǔ)一般是為了提升交互體驗(yàn)而使用,而不是直接存儲(chǔ)賬號密碼,特別是明文密碼或者其他重要數(shù)據(jù),所以,不能為了完全的性能而忽略安全性問題。
但是如果是小型項(xiàng)目又是個(gè)內(nèi)網(wǎng)項(xiàng)目,本來就沒什么錢掙的項(xiàng)目,如果你覺得在前端存數(shù)據(jù)方便那就在前端存就行了,這種情況當(dāng)然是怎么開發(fā)快怎么來了。
你再仔細(xì)想想,如果前端能直接訪問數(shù)據(jù)庫,前端必然有數(shù)據(jù)庫連接信息,那么用戶就可以通過其他手段訪問你的數(shù)據(jù)庫,你還有什么秘密可言?
因?yàn)橐止?,你不能把一個(gè)人把所有事情都干了。每個(gè)人做好自己的事,可以提高效率。
模塊化方便,查找問題比較快速。便于更多人協(xié)同作業(yè)。就象前端還有三種文件一樣,不然,你全弄些二進(jìn)制數(shù)據(jù),一個(gè)文件搞定。
作為一個(gè)開發(fā)者,負(fù)責(zé)任的告訴你,絕對不可以
第一,安全性沒有保障,暴露數(shù)據(jù)庫連接賬號和密碼或者授權(quán)信息,人人都能鏈接
第二,高并發(fā)等復(fù)雜的邏輯難實(shí)現(xiàn)
第三,js是單線程,還是解釋性語言,性能無法保障
第四,流對于前端是非常困難的,比如內(nèi)存流處理
第五,前端代碼不能編譯,只能混淆,容易被篡改,暴露源代碼在別人面前是非常危險(xiǎn)的
這會(huì)想到的就這些,歡迎補(bǔ)充!
0
回答0
回答10
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答