你想想,你吃著泡面、哼著歌、還在網(wǎng)上沖著浪,突然就發(fā)現(xiàn)瀏覽器用不了了,這可多難受啊。
當(dāng)然啦,這可不是差評君在瞎帶節(jié)奏啊,因?yàn)檫@事還真有那么點(diǎn)可能會發(fā)生。
因?yàn)槿澜缱盍餍袨g覽器之一的 ,馬上就要發(fā)布第 100個版本了。而這次更新,很可能會引發(fā)一些 BUG,導(dǎo)致網(wǎng)頁直接打不開。
沖浪板要是壞了,這可讓咱們怎么沖浪啊?
大伙們可再熟悉不過了,這款有內(nèi)存吞噬者之稱的瀏覽器,在這顆行星上有超過 20億的裝機(jī)量。
至少在編輯部,除了少數(shù)幾個 用戶外, 的覆蓋率沒有 9 成也有 8 成。而剩下的也大都是在用各種 “套殼”瀏覽器。
那么問題就來了,別人的軟件更新不是內(nèi)置個虛幻引擎,加些新功能,就是修復(fù)一些 BUG,讓產(chǎn)品更加穩(wěn)定。
你這個坐擁數(shù)十億的大咖咋一更新,反而修復(fù)了“ BUG 過少的 BUG ”呢?
這不是把用戶做寶搞嗎?
其實(shí)啊網(wǎng)站內(nèi)網(wǎng)頁打不開,這鍋還真怪不到谷歌的工程師身上,引發(fā)這一場 BUG 的,是一個名叫版本號的東西。
因?yàn)樵谀承┚W(wǎng)站的眼里,版本號 100竟然小于 40。
接下來就請準(zhǔn)備好薯片和可樂,差評君這就和大伙們講講,這道火鍋都能做對的比大小題目背后、這個讓大伙們可能上不了網(wǎng)的 BUG 背后,究竟發(fā)生了什么。
簡單地說,當(dāng)你訪問某某小網(wǎng)站時,網(wǎng)站是需要知道你用的是啥瀏覽器和啥版本的。
一方面,網(wǎng)站就能向那些用最新版瀏覽器的用戶展示新功能、新交互,反過來對那些“古董”瀏覽器提供適合它們的內(nèi)容。
就像 IE9 之前的 IE 瀏覽器不裝插件的話,是不支持 SVG 功能的。而對如今的各大瀏覽器來說,SVG 早已經(jīng)算是個平平無奇的玩意兒了。
在另一方呢,出于網(wǎng)絡(luò)安全的考慮,網(wǎng)站還能根據(jù)版本號,直接拒絕那些早就不更新的瀏覽器訪問網(wǎng)站。
總得來說,網(wǎng)站要知道“來者是何人”,然后再決定就接不接客,并在接客之后看碟下菜。
而這次 瀏覽器即將帶來的版本號為 100的更新網(wǎng)站內(nèi)網(wǎng)頁打不開,就很可能讓一部分網(wǎng)站認(rèn)錯客人,然后直接把用戶拒之門外。
就拿能差評君所用的 瀏覽器為例,網(wǎng)站會通過檢查以下的瀏覽器 UA(用戶代理字符串)來查一波戶口:
/5.0( NT 10.0; Win64; x64)/537.36(KHTML,like Gecko)/97.0.4692.99 /537.36
這里面的東西很多,我們要找的是 /97.0.4692.99 這一段。
對于大部分的網(wǎng)站開發(fā)者來說,他們只需要關(guān)注緊接著 /后的字符“ 97 ”,其實(shí)就足夠網(wǎng)站辨別瀏覽器身份,并根據(jù)版本看碟下菜了。
而巧就巧在,一個國外小有名氣,名叫 Duda 的網(wǎng)頁設(shè)計工具包它更懶。
因?yàn)樗蛔x取 /背后的兩個數(shù)字。。。
所以在 瀏覽器的版本號升到 100之后,在訪問那些用 Duda 開發(fā)的網(wǎng)站時,認(rèn)字只認(rèn)一半的它們會以為你的版本號是 10。
更搞人心態(tài)的是,Duda 還會自動屏蔽版本號低于 40的 瀏覽器訪問。。。
所以說在它們的眼里 100 = 10 < 40,你的瀏覽器就這樣被禁止訪問了。
雖然這一波無疑是 Duda 程序員的鍋,但是在某種程度上, 的程序員們其實(shí)也還是有那么一捏捏責(zé)任的。
而錯就錯在 的程序員們太能爆肝了,從而導(dǎo)致 的更新實(shí)在太勤快了。
這么說吧,今年已經(jīng) 13 歲的 在早期可是 12 周才更新一次,后來加快到了 6 周一次,到后面更是到了 4 周更新一次。
就這樣, 的版本號便迅速瘋漲,到今年的三月份也即將迎來第 100個版本。
所以說 的工程師要是多摸點(diǎn)魚,多擺點(diǎn)爛,這個 BUG 就不會這么早出現(xiàn)。
分完鍋,但問題總要解決吧。
早就發(fā)現(xiàn)可能會出現(xiàn) BUG 的谷歌,在去年就提供了個測試 flag。
大伙們只要在瀏覽器中輸入 ://flags 然后輸入并打開#force-major--to-100就能讓網(wǎng)站打破兩位數(shù)的魔咒,強(qiáng)制顯示版本號為 100了。
而老外的性情似乎也是調(diào)和折中的,因?yàn)檫€有網(wǎng)友提出了另外中庸的解決辦法。
那就是讓谷歌的版本永遠(yuǎn)停在 99,之后的更新變后面的小數(shù)點(diǎn)就可以了。
只不過,這些人再怎么出謀劃策也都是“皇上不急太監(jiān)急”,要知道古話說的好:解鈴還須系鈴人啊!
好在真正的罪魁禍?zhǔn)?Duda 在不久發(fā)布了公告,表示已經(jīng)更新了代碼,并解決了這個問題。
而在谷歌反饋 BUG 的網(wǎng)站上,這個問題也已經(jīng)被標(biāo)注為已修復(fù)( Fixed )。
而在 、 這些瀏覽器的版本號真正到達(dá) 100之后,還有多少的類似 Duda 的 BUG 沒被發(fā)現(xiàn),咱們就不得而知了。
只能說這個瀏覽器界的“千年蟲”問題,只是暫時得到了解決。
另外,記性比較好的差友應(yīng)該還記得在今年年初,微軟公司也出過類似的千年蟲問題。
它讓微軟員工們的年都沒跨好。
這個 BUG 的大概劇情是在今年的 1 月 1 日當(dāng)天,不少使用微軟 的公司發(fā)現(xiàn)郵箱居然發(fā)不出去了。
背后的原因其實(shí)也相當(dāng)簡單,那就是微軟用了一種名叫" "(年年月月日日時時分分)的符號變量( int32 )來存儲時間。
而有符號的 int32 只能存儲- 到 的數(shù)據(jù),也就是 2 的 32 次方那么多個。
原本在上世紀(jì)是為了節(jié)省存儲空間的設(shè)定,在如今卻成為了 BUG。因?yàn)?2022 年的后兩位 22 帶入到“ ”中,直接就超過 int32 的取值范圍。。。
好在微軟攻城獅的加班加點(diǎn)之下,相關(guān)的問題已經(jīng)得到了解決,連夜捉蟲或許就是他們的新年禮物吧。
總得來說呢,在科技互聯(lián)網(wǎng)領(lǐng)域其實(shí)一直都存在類似的祖?zhèn)鞔a存在,或是為了兼容,或許是為了節(jié)省時間不重復(fù)造輪子,那些具有時代局限性的代碼,還有代碼中那些千年萬年的 BUG,也就一代又一代地傳了下來。
而大伙們也把這些又臭 BUG 又多的代碼稱為“屎山”。
所以啊,類似于瀏覽器版本號、日期存儲的 BUG 并不是第一次出現(xiàn),也肯定不會是最后一次。
最后呢,大伙們可以再等待一波即將到來的 2038 年問題。
因?yàn)槟切┦褂?POSIX 時間的 32 位程序,它們的計時方式是用秒來表示的。其中格林尼治時間 1970年的 1 月 1 日0時0分0秒為起點(diǎn),第 秒為上限。
而第 秒的時間正好是 2038 年 1 月 19 日的凌晨 3 點(diǎn) 14 分07 秒,而到過了這那一秒,應(yīng)該有又不少的設(shè)備會有 BUG 了。
當(dāng)然,到時候應(yīng)該不會還有 32 位的設(shè)備存在了吧,或許,沒了吧。