瀏覽器自身為什麼不集成js,jQuery文件?反正每個網站基本都會用到?

現在JavaScript基本已經是web前端中的霸主,基本每個網站都會用到,那麼瀏覽器為什麼不把常用的js文件(angular,bootstrap,jQuery文件)集成到瀏覽器內部?類似長期緩存,免得每次都從不同的伺服器獲取相同的文件。就像CDN,不同的網站使用同樣的文件,大可以使用同一份文件,這樣不是能提高了速度么?


瀏覽器實現標準 -》標準太爛,產生了 jQuery -》標準從 jQuery 吸取了很多 api 補充新標準 -》瀏覽器實現新標準。

所以答主這個問題不成立啊,瀏覽器是在逐步『內置』jQuery。只是標準要比一個庫升級慢,所以不方便直接內置。


jQuery 是一個 Tool (工具),瀏覽器是一個 Platform (平台)

關於工具鏈和平台的關係。Google 今年的 IO 大會有一個精彩的解釋。完整的站在歷史的高度重新梳理了工具鏈和平台之間的關係,以及面對工具和標準我們應該持怎樣的態度。雖然主講人試圖玩梗,玩得跟屎一樣,但瑕不掩瑜,立論非常精彩。如果你懂一點點英文建議一定要看。

https://www.youtube.com/watch?v=sGsA7oKoQhI

簡而言之,

平台一直在從工具鏈中汲取特性,並將其標準化,像大眾提供一個最優解,而工具鏈則是程序員社區進行的大量實踐中優勝劣汰的佼佼者。

其中以下現象值得注意:

  1. 原生的要好於工具鏈,優化等級不同,底層優化效率必然更高。

  2. 然而平台依賴於標準化進程,而標準的制定肯定是需求和社群實踐所推動的,故而肯定慢。
  3. 工具鏈在平台未能支持的時候可以先行實現這些功能,這些功能由社區實現,所以先進(激進),而因為沒有底層支持所以效率不高,使用複雜。
  4. 社區把某個事情想明白之後會提出一個最佳方案,而這個方案的核心特性都會被納入最新標準。

回到正題,平台不可能直接把工具當做附件一樣捆綁進來。標準化之後的方案與原始的社區實踐肯定是更精確的。而如今的瀏覽器標準之下, jQuery 已經形同雞肋。瀏覽器從底層做到了比 jQ 更好的實現!是底層實現!是底層實現!(重要內容說三遍)

對於瀏覽器的 js 引擎而言,jQ就是個渣渣。

Google 也提到:對於像火狐和 Chrome 這樣的先進操作系統,他們會提前實現很多還在草案階段的標準,從而方便程序員在使用火狐或 Chrome 進行開發時提前使用標準實現,而不是非得仰賴與工具。然而,從現實的角度出發,為了保證兼容性,一些漸進式的兼容工具也是必不可少的,比如CSSNext 和 Babel。

篇幅所限,我引述於此的內容不及原視頻之萬一,他們每個例子都舉得非常精彩,比如CSS圓角邊框,和 jQuery ajax APIs 對 XHR 的封裝到標準化的 fetch 語法。去看原視頻吧!


高票回答提到標準的問題,但是我看了題目,覺得這並不是題目的本意。

標準決定的瀏覽器的核心,與核心之外的公用js庫,這應該是兩個不同層次的概念。我感覺題主的本意是想問後者,即:得到廣泛應用的js庫,瀏覽器為何不自帶這些庫。

原因之一是js庫的版本迭代比較快,經常會有新舊版本不兼容的情況。如果瀏覽器要自帶這些庫,就需要帶上所有版本,不能只帶最新版本,避免有些依賴於舊庫的腳本在新庫下無法使用。

原因之二是各個js庫的側重點有所不同,有些庫可能會有幾方面的特性,有些庫則專註於一個方面,沒有大而全的庫。大而全也曾經有人努力過,例如Yahoo的YUI,寫了《js高級編程》等諸多js優秀教材的Zakas就是其中的核心成員,然而YUI最終還是失敗了。因此瀏覽器如果想要自帶庫,就需要帶各種各樣不同的庫。

兩點原因綜合起來,決定了瀏覽器如果想要自帶通用的js庫,就必須帶多個不同的庫,而且需要帶這些庫的所有版本,結果會造成庫的數量非常大,而其中大部分的庫對於大部分用戶來說可能是永遠用不到的。

作為參照對比,可以看看Windows。我一向是對Windows有些反感的,原因之一就是它為了保證兼容性,自帶了大量dll(動態鏈接庫)以及資源文件,而這其中絕大部分對於普通用戶來說可能一輩子都用不到,平白佔用了存儲空間。

我還記得最初使用Win7的時候,驚訝於其系統的龐大,於是就想精簡。Win7的system32目錄的文件是對於winsxs目錄文件的映射,而我用的intel的cpu,就把winsxs幾乎所有amd相關的文件都刪了。開始用著還好,某天裝了個軟體發現不能用,又難以檢查是哪個文件缺失造成的(時間成本太高,不合算),最後乖乖重裝系統了事。

瀏覽器如果自帶各種庫,還要保證帶所有版本,難免會走上Windows的老路。現有的cache方式已經能夠比較好地解決問題了。


謝邀

最主要的兩點

  1. 瀏覽器最重要的是向標準靠攏,因為Jquery不是標準庫, 所以瀏覽器沒必要實現它。
  2. 然後,HTML代碼中第三方庫使用是使用 URL引入的,而這個URL就是一個可以訪問的網址,所以,在不同的瀏覽器種,引用地址是不一樣的,庫的引用地址不統一導致瀏覽器必須至少載入一次才能進行本地緩存,所以就沒這個必要了。

其他一些不太重要的可能的原因

  • 版權問題,有一些庫它不是全部開源或者只是部分開源,可能存在版權或者授權問題。

  • 版本問題,現在各個庫的版本升級都挺快的,加之庫的數量也不小,如果庫升級那麼瀏覽器沒有集成那個版本呢,是不是些代碼的時候還得查詢一下這個瀏覽器集成了什麼版本的庫,挺麻煩的,不如自己引入來的方便。
  • 以上全部是個人觀點,不同意的話歡迎討論,手機碼字,挺麻煩的,所以看著彆扭,覺得有道理隨手點個贊,感謝

問的好

我覺得b端早晚會慢慢變肥的

除了自嵌jquery這類的東西

還有可能自帶圖形引擎,vr插件的


曾經,我們實現過一個功能,在客戶端(ios,android)里集成常用的js框架/庫的主版本。然後用一套方案,在頁面里可以引用到這些js,實測載入速度肯定比網路載入快。但是方案耦合太深,後來果斷棄用。


即便世上網站100%都用jquery,也不見得用同一個版本啊。

然而jquery市場佔有率逐年下降是事實。


想法是比較好,但是我們現在面對的最大問題還是瀏覽器版本太多,並不是每個都是最新版本,即使最新版內置了jquery,你還得去判斷當前瀏覽器版本是否支持jquery。所以你看最新版本的querySelector等方法基本上和jquery很像了,只能慢慢去過渡。


可是JQuery不是都會用呀


我也思考過這個問題,也許可以發明一款瀏覽器,自動集成和同步所有的主流CDN資源,載入網頁只要一瞬間,網路屏蔽都不怕。


總有一些愛死比前端喜歡鄙視jQuery,說的好像你自己以前沒用過似得,用ng,react有什麼了不起? ng不也借鑒了jQuery-lite的模式么?最早的js template是誰寫的? 你看過幾篇John Resign的博客文章 ? 知道event緩存是怎麼在低版本ie下hack的么?

看到評論什麼我用ng,vue, react, 現在jquery過時之類的,想想就覺得搞笑,你一個做產品開發的強制要求你的用戶用最新版的Chrome ?天貓都沒說不兼容ie8, 你一小公司居然有勇氣說我不要這些用戶?以追新技術作為產品第一導向的公司,估計沒幾個能好好活下去,畢竟這是柴那

噴完好好答題

1. bootStrap 的確開創了css規範的先河,看過bt2的源碼,css的規整,組件話,令人賞心悅目。 跟據兩年項目經驗來看,bt並不是必須內嵌的ui框架,畢竟,bt主要是給寫後台的人用的,方便,快捷,省市, 一般有設計圖的大項目是不會遵循bt那套規範來設計的,而且bt並不是優化最好的css-ui

2. 內置jQuery 也並非是必要的,隨著瀏覽器版本的更新和迭代,web規範和標準越來越統一,就連微軟也放棄了ie(見win10),jQuery 的作用被慢慢弱化,在網路越來越發達的時代,一個100k的js庫並不是優化的重點,相反更多的是圖片壓縮,渲染速度,交互體驗上的追求


我覺得link標籤或者script標籤應該加一個屬性hash,記錄href文件的hash值,這樣瀏覽器就可以提前緩存各種常用的庫了。


微軟給 dll 提供了兩個位置,一個是和 exe 放在一起,一個是直接丟到 %PATH% 甚至 system32 裡面。

後一種方案帶來了無數問題……


每個人都需要買車買房,為什麼政府不直接給每個人分配了?

因為每個人喜歡的房子不一樣,車的版本也不一樣,而且政府也沒那麼多錢。


因為當年網景和IE爸爸的拉鋸戰,到時瀏覽器標準混亂不堪才誕生的ECMAScript,但是標準歸標準,各大瀏覽器都有自己的東西,jquery出現時為了解決各大瀏覽器的坑爹行為,不過現在JQ很少用了,ES6各大瀏覽器都在普及,IE的話微軟都不管了我對它的態度就是Let it go,大部分還在用JQ的是為了AJAX吧,何況現在有更好的技術Fetch,實在兼容IE可以做處理。

前端的東西更新換代太快,何況腳本插件類庫這東西,瀏覽器作為平台為什麼要去做合併?有ECMAScript標準在,瀏覽器只需要跟著這個走就OK了。

現在比較流行的都是ES6+Babel來做的吧,加上webpack/gulp。


You Might Not Need jQuery


Windows 為什麼不集成 QQ 呢?反正每個中國人基本都會用到。


你這種思考是非常自私的。


因為這個問題本來就不該由瀏覽器來解決。首先各種js庫版本更新很快,流行趨勢變化也很快,那麼哪些庫應該放在瀏覽器里呢?更新新版本怎麼辦呢?瀏覽器也更新?不合適。

如果僅僅相當於CDN,非天朝地區可以用Google公共庫,Google公共字體等等。那麼都是(嘩)的鍋。


這不是典型的以子之矛攻子之盾嗎?jquery是為什麼產生的?為了解決瀏覽器的標準差異啊。。如果所有瀏覽器能統一實現一個標準還需要jquery嗎?瀏覽器肯定要向著同一個標準實現的方向發展的,比如es2015,es2016,但是沒實現前需要有個替代解決方案,所以才有了jquery。。。


推薦閱讀:

web前端工程師的迷茫?
一般用哪些工具做大數據分析?
你是如何學會正則表達式的?
如何評價螞蟻金服新一代數據可視化引擎 G2 ?
有什麼工具可以下載整個網站的內容嗎?

TAG:Web開發 | JavaScript |