12306火車票網上訂購體驗真有網友說的那么差?
關于12306自上線以來前端體驗不佳,網友林布說:
12306沒有用心在做。
我以前是干前端的,server端很多東西我不懂,也知道難度極大。但無論數據庫那邊有多難,至少前端都不應該做成這么落后,混亂的樣子。最差的情況下,哪怕數據庫方面直接掛掉了,至少頁面也應該是活著的。
「挾太山以超北海,語人曰『我不能』,是誠不能也。為長者折枝,語人曰『我不能』,是不為也,非不能也。為什么說,12306的前端是落后過時的。很多細節列舉:
頁內js寫的到處都是,東一片西一片,很難維護
css技術落后,多個icon圖片分開加載,完全可以用css切割來減少請求次數,提高效率
js技術老舊且極不成熟:使用jquery 1.4.2也就罷了,頁內有大量字符串拼接html然后用$jq.html()方法寫入的語句,很難維護,可讀性低。
許多本應私有方法暴露在window對象下,比如getQueryParamValue這種,對安全性和可維護性都十分不利
資源加載未優化:除了現成的控件以外,js沒有經過壓縮和混淆,不過比我上一次看(12年底)的時候,大段大段的注釋要好一些。此外資源加載次序沒有優化調整,一些不重要的js文件在head處加載,沒必要
前端技術不但落后,而且混亂,沒有統一。在選取dom元素方面,一個頁面里同時存在jQuery的選擇器以及document.getElementById的方法。同時Jquery控件和接近被淘汰的flash控件混用來呈現了一個很混亂的前端代碼
html的命名簡直不知所謂,indexLeft下面是newLeft,newRight...誰知道這是什么跟什么啊。對后來的維護勢必造成困擾。相比之下二維碼的div叫做erweima還算比較萌
說起來我之前看到他們的大段注釋的時候,還看的出來他們在規章制度上挺嚴格,注釋寫的一板一眼的。但是實際上也就是制度上嚴格而已,管理上十分混亂,連一個統一前端技術方案都沒有,才會鬧getElementById和jQuery選擇器大規模混用的笑話。
項羽說天要亡我非戰之罪情有可原,你一馬謖自己不好好做事把自己弄死了,還怪王平不給力,好意思嗎。
關于12306最讓人詬病的是頻繁崩潰,網友王強說:
以前12306用的是小型機,發現性能嚴重不足,遂改用x86系統+linux平臺(原平臺為HP Superdome小型機,UNIX系統,Sybase ASE數據庫)。最后他們的核心系統用了十幾個節點(現在應該是17節點)的多路Xeon E7(具體幾路待考),每個節點配1TB內存,數據庫全部在內存中運行。2013年春運,12306系統峰值負載11萬tps,與2012年淘寶雙11活動峰值負載相當,新的系統基本經受住了考驗。
一種商品只要出現供不應求現象,那么結果只有兩種:大家排隊購買;出現黑市,變相提高商品的流通價格并抑制需求。
12306這個事情,就是標準的限價商品供不應求之后出現排隊與黑市現象的例子。因為供不應求,所以有了黃牛、搶票軟件與秒殺。現在供應不足的前提下,12306就算把系統做的性能再高,也只是會加快熱門車次票務秒殺的速度而已——即更加會刺激搶票軟件,大家為了在更短的時間里成功搶到隊列名額就會不斷提升自己的搶票性能。
打個比方說就是一個店門前排隊,消費者為了增加買到商品的概率去雇人代排,造成店門口的通道擁擠不堪。為了減緩擁堵,商家不斷拓寬通道,但每次一拓寬消費者們就會增加雇傭的排隊勞力把新增的通道空間占滿,就形成了惡性循環。所以12306的問題主要不是出在網站本身。
但一貫被認為是因循守舊的國企,在選擇技術方案時放棄沿用多年的小型機/UNIX平臺去擁抱業界還是新鮮事物的基于x86/linux的大規模分布內存數據庫系統,承受住了堪比2012年淘寶雙11的壓力,12306還是做到了全球最強的客運票務系統。在這個領域,12306可以自豪地說自己是做的最好的案例。它還在卡,還是偶爾崩潰,頁面還是難看,可是這些遲早會改進。這個過程中也還是會有冷嘲熱諷,還是會有所謂的大牛指點江山,但最終解決春運高峰期一天數百萬張秒殺售票的,還是12306自己。
上月底,12306發布公告,稱鐵路部門將結合近期即將開通運營的新線,對旅客列車運行圖進行全面調整和優化,所以11月27號起只發售12月25號及之前日期的車票,12月26號及之后日期的車票計劃在12月上旬開始發售。
12306官網宣布恢復車票預售期,從12月12號也就是明天起,恢復火車票30天預售期,建議大家提前在官網上購買元旦假期的火車票。
文/優就業(ujiuye) 部分參考:林布、王強