使用JavaScript庫還是自己寫代碼?
更新時(shí)間:2010年01月28日 22:14:16 作者:
有時(shí)候在寫JavaScript添加到你的網(wǎng)頁中的時(shí)候,你將需要決定是使用已有的可用的JavaScript庫還是自己寫所有代碼。其中每個(gè)各有優(yōu)缺點(diǎn),因此沒有任何一種方式對(duì)每個(gè)人來說都是絕對(duì)正確的選擇。
你必須做出決定以這兩種方法中的哪一種來寫你的JavaScript,為了幫助您作出明智的決定哪個(gè)更適合你,我們將對(duì)比一下這兩種方法的一些優(yōu)劣。
在過去使用JavaScript庫的一個(gè)缺點(diǎn)是,庫往往相當(dāng)大,也許包括不少在你的個(gè)人網(wǎng)頁中實(shí)際是不怎么使用的代碼?;蛟S,編寫自己的代碼可以被認(rèn)為是最能完全滿足你真正需求的方法,而且沒有其他比這更有效的方法了。但在引入Google的一個(gè)通用倉庫后,每個(gè)人都可用通過鏈接使用比較流行的JavaScript庫的時(shí)候,就否定了這種說法,因?yàn)槿绻沔溄拥降氖荊oogle的庫副本,而不是使用自己的副本,這樣大量訪客將會(huì)有已經(jīng)緩沖在他們的瀏覽器上的庫,實(shí)際須下載的只是你頁面的一部分代碼而已。這樣做可以使得使用它比自己做的庫更快。
自己編寫代碼而非依賴于庫的一個(gè)優(yōu)點(diǎn)是,你不用學(xué)太多東西。要能夠自寫JavaScript,你只需要學(xué)習(xí)JavaScript就可以了。而要能夠使用庫則需要同時(shí)學(xué)習(xí)JavaScript以及這個(gè)庫。你可能可以做到像這樣的事情,只學(xué)習(xí)庫而還沒有學(xué)習(xí)JavaScript,但就能夠利用的最好方式來使用這個(gè)庫,那你將需要比那些只是使用JavaScript來編寫自己代碼的典型的人要對(duì)JavaScript有更多的了解。
使用庫的優(yōu)勢(shì)在于,庫已處理了你需要運(yùn)行的90%的操作,這意味著你只需要編寫的余下10%。在有大量的代碼編寫的時(shí)候,這可以節(jié)省你編寫代碼的時(shí)間。而在除了編寫代碼,還需要對(duì)其進(jìn)行測(cè)試的時(shí)候,它就可能會(huì)或可能不會(huì)節(jié)省時(shí)間了,除非你深入了解如何讓你所選的庫在測(cè)試時(shí)間做應(yīng)該做的事,使用庫最終可能會(huì)比你自己寫代碼大大延長了時(shí)間。
另一件你要考慮的事是,在一個(gè)給定的庫中包含了多少代碼是你實(shí)現(xiàn)你想達(dá)到的目標(biāo)將實(shí)際需要使用到的,以及庫實(shí)際上是否包括了所有你想要的操作。如果你不能找到一個(gè)有你所需的一切功能的庫,那么你就需要自己編寫其余的代碼或嘗試引入第二個(gè)包括了缺少的功能的庫。取決于庫是如何工作,將可能可以或可能不可以在相同的網(wǎng)頁中同時(shí)使用兩個(gè)庫。
事實(shí)上在你考慮使用庫之前,你需要自己寫多少JavaScript代碼也會(huì)影響你的決定。如果你已經(jīng)自己寫了能執(zhí)行所有你需要的不同函數(shù)的處理,則有可能打消你選用一個(gè)同樣提供所有這些相同功能但實(shí)現(xiàn)方式不同的庫的想法。鑒于這些首先寫這些庫的人一般都是對(duì)JavaScript具有深入了解的人,你必須承認(rèn)的一個(gè)合理的可能性是,一個(gè)提供這些功能的庫比你自己寫的更有效率(除非你也有一個(gè)JavaScript專家)。
你要添加到網(wǎng)頁中的JavaScript處理是什么樣的類型,也將影響是否合適使用庫。如果你只把很小的特效到你的網(wǎng)頁,只需要幾行JavaScript代碼,那么比起自寫所有的代碼,用一個(gè)庫可能會(huì)導(dǎo)致你不得不編寫更多的代碼去作為實(shí)現(xiàn)庫工作方式的接口。當(dāng)然,反過來同樣適應(yīng),如果你要添加到你的網(wǎng)頁中的處理是數(shù)量相當(dāng)大的且與你選用的庫的功能類型密切匹配的,那么都可以讓庫為你處理。
選擇一個(gè)功能是密切符合你想要使用到你的網(wǎng)頁中的庫,并很好的理解JavaScript以及這個(gè)庫,那就可以快速和容易加入所有你想要的功能,以這種現(xiàn)代的不唐突的方式可能是最適合你的方法。另外,如果你已經(jīng)寫了多年的JavaScript,而且已經(jīng)有你的能執(zhí)行大多數(shù)你不斷要求的功能的代碼庫,那你就可以不必選擇和學(xué)習(xí)任何一個(gè)庫就達(dá)到相當(dāng)?shù)男Ч?
個(gè)人總結(jié)
個(gè)人覺得,Stephen Chapman的這篇文章很好的對(duì)比了JavaScript庫和自寫代碼的優(yōu)缺點(diǎn),其實(shí),如果能夠在使用JavaScript庫的時(shí)候,充分的利用它,去實(shí)現(xiàn)它應(yīng)有的價(jià)值,那JavaScript庫將會(huì)是一種很好的工具,一種創(chuàng)造富客戶端以及給用戶帶來良好體驗(yàn)的一種工具,而非成為加載頁面時(shí)的一種額外的負(fù)擔(dān)。而對(duì)于喜歡自寫代碼的人,我覺得也有必要將一些功能,有如DOM操作和事件處理封裝起來,畢竟原生的JavaScript在不同的瀏覽器存在著較多兼容問題和效率問題(可參考 阿當(dāng)?shù)摹禞avaScript分層概念》)。同時(shí)我還覺得,如果在使用一個(gè)流行的JavaScript庫(如jQuery、YUI、Ext JS)的時(shí)候,能去了解一下這些庫的實(shí)現(xiàn)機(jī)制,這樣才能更好的駕馭這些庫!
中文由維奇翻譯,如有轉(zhuǎn)載請(qǐng)注明出處,翻譯如有錯(cuò)漏歡迎留言指出
在過去使用JavaScript庫的一個(gè)缺點(diǎn)是,庫往往相當(dāng)大,也許包括不少在你的個(gè)人網(wǎng)頁中實(shí)際是不怎么使用的代碼?;蛟S,編寫自己的代碼可以被認(rèn)為是最能完全滿足你真正需求的方法,而且沒有其他比這更有效的方法了。但在引入Google的一個(gè)通用倉庫后,每個(gè)人都可用通過鏈接使用比較流行的JavaScript庫的時(shí)候,就否定了這種說法,因?yàn)槿绻沔溄拥降氖荊oogle的庫副本,而不是使用自己的副本,這樣大量訪客將會(huì)有已經(jīng)緩沖在他們的瀏覽器上的庫,實(shí)際須下載的只是你頁面的一部分代碼而已。這樣做可以使得使用它比自己做的庫更快。
自己編寫代碼而非依賴于庫的一個(gè)優(yōu)點(diǎn)是,你不用學(xué)太多東西。要能夠自寫JavaScript,你只需要學(xué)習(xí)JavaScript就可以了。而要能夠使用庫則需要同時(shí)學(xué)習(xí)JavaScript以及這個(gè)庫。你可能可以做到像這樣的事情,只學(xué)習(xí)庫而還沒有學(xué)習(xí)JavaScript,但就能夠利用的最好方式來使用這個(gè)庫,那你將需要比那些只是使用JavaScript來編寫自己代碼的典型的人要對(duì)JavaScript有更多的了解。
使用庫的優(yōu)勢(shì)在于,庫已處理了你需要運(yùn)行的90%的操作,這意味著你只需要編寫的余下10%。在有大量的代碼編寫的時(shí)候,這可以節(jié)省你編寫代碼的時(shí)間。而在除了編寫代碼,還需要對(duì)其進(jìn)行測(cè)試的時(shí)候,它就可能會(huì)或可能不會(huì)節(jié)省時(shí)間了,除非你深入了解如何讓你所選的庫在測(cè)試時(shí)間做應(yīng)該做的事,使用庫最終可能會(huì)比你自己寫代碼大大延長了時(shí)間。
另一件你要考慮的事是,在一個(gè)給定的庫中包含了多少代碼是你實(shí)現(xiàn)你想達(dá)到的目標(biāo)將實(shí)際需要使用到的,以及庫實(shí)際上是否包括了所有你想要的操作。如果你不能找到一個(gè)有你所需的一切功能的庫,那么你就需要自己編寫其余的代碼或嘗試引入第二個(gè)包括了缺少的功能的庫。取決于庫是如何工作,將可能可以或可能不可以在相同的網(wǎng)頁中同時(shí)使用兩個(gè)庫。
事實(shí)上在你考慮使用庫之前,你需要自己寫多少JavaScript代碼也會(huì)影響你的決定。如果你已經(jīng)自己寫了能執(zhí)行所有你需要的不同函數(shù)的處理,則有可能打消你選用一個(gè)同樣提供所有這些相同功能但實(shí)現(xiàn)方式不同的庫的想法。鑒于這些首先寫這些庫的人一般都是對(duì)JavaScript具有深入了解的人,你必須承認(rèn)的一個(gè)合理的可能性是,一個(gè)提供這些功能的庫比你自己寫的更有效率(除非你也有一個(gè)JavaScript專家)。
你要添加到網(wǎng)頁中的JavaScript處理是什么樣的類型,也將影響是否合適使用庫。如果你只把很小的特效到你的網(wǎng)頁,只需要幾行JavaScript代碼,那么比起自寫所有的代碼,用一個(gè)庫可能會(huì)導(dǎo)致你不得不編寫更多的代碼去作為實(shí)現(xiàn)庫工作方式的接口。當(dāng)然,反過來同樣適應(yīng),如果你要添加到你的網(wǎng)頁中的處理是數(shù)量相當(dāng)大的且與你選用的庫的功能類型密切匹配的,那么都可以讓庫為你處理。
選擇一個(gè)功能是密切符合你想要使用到你的網(wǎng)頁中的庫,并很好的理解JavaScript以及這個(gè)庫,那就可以快速和容易加入所有你想要的功能,以這種現(xiàn)代的不唐突的方式可能是最適合你的方法。另外,如果你已經(jīng)寫了多年的JavaScript,而且已經(jīng)有你的能執(zhí)行大多數(shù)你不斷要求的功能的代碼庫,那你就可以不必選擇和學(xué)習(xí)任何一個(gè)庫就達(dá)到相當(dāng)?shù)男Ч?
個(gè)人總結(jié)
個(gè)人覺得,Stephen Chapman的這篇文章很好的對(duì)比了JavaScript庫和自寫代碼的優(yōu)缺點(diǎn),其實(shí),如果能夠在使用JavaScript庫的時(shí)候,充分的利用它,去實(shí)現(xiàn)它應(yīng)有的價(jià)值,那JavaScript庫將會(huì)是一種很好的工具,一種創(chuàng)造富客戶端以及給用戶帶來良好體驗(yàn)的一種工具,而非成為加載頁面時(shí)的一種額外的負(fù)擔(dān)。而對(duì)于喜歡自寫代碼的人,我覺得也有必要將一些功能,有如DOM操作和事件處理封裝起來,畢竟原生的JavaScript在不同的瀏覽器存在著較多兼容問題和效率問題(可參考 阿當(dāng)?shù)摹禞avaScript分層概念》)。同時(shí)我還覺得,如果在使用一個(gè)流行的JavaScript庫(如jQuery、YUI、Ext JS)的時(shí)候,能去了解一下這些庫的實(shí)現(xiàn)機(jī)制,這樣才能更好的駕馭這些庫!
中文由維奇翻譯,如有轉(zhuǎn)載請(qǐng)注明出處,翻譯如有錯(cuò)漏歡迎留言指出
相關(guān)文章
JavaScript中rxjs與?Observable?兩大類操作符解析
這篇文章主要介紹了JavaScript中rxjs與?Observable?兩大類操作符解析,運(yùn)算符是對(duì)?Observable?進(jìn)行操作并返回?Observable?的函數(shù),文章圍繞主題展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-07-07JavaScript如何實(shí)現(xiàn)數(shù)組內(nèi)的值累加
我們會(huì)經(jīng)常在開發(fā)過程中,需要獲取數(shù)組中的值累加,所以下面這篇文章主要給大家介紹了關(guān)于JavaScript如何實(shí)現(xiàn)數(shù)組內(nèi)的值累加的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11Javascript類型系統(tǒng)之undefined和null淺析
這篇文章主要介紹了Javascript類型系統(tǒng)之undefined和null的知識(shí),通過本文還簡(jiǎn)單給大家介紹了javascript中null和undefined的區(qū)別的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07JavaScript中windows.open()、windows.close()方法詳解
這篇文章主要介紹了JavaScript中windows.open()、windows.close()方法詳解 的相關(guān)資料,需要的朋友可以參考下2016-07-07Javascript驗(yàn)證Visa和MasterCard信用卡號(hào)的方法
這篇文章主要介紹了Javascript驗(yàn)證Visa和MasterCard信用卡號(hào)的方法,涉及javascript正則驗(yàn)證的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07原生JavaScript創(chuàng)建不可變對(duì)象的方法簡(jiǎn)單示例
這篇文章主要介紹了原生JavaScript創(chuàng)建不可變對(duì)象的方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了基于原生JavaScript創(chuàng)建不可變對(duì)象的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05