熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

是什麼讓我們愛上Javascript

2013-11-23 18:57:49  來源: Java核心技術 

  過去人們對於Javascript一直報著輕視的態度人們認為它又慢又容易出錯而且在不同浏覽器中解釋也不一樣但是現在Javascript確確實實的在改變我們的網絡越來越多的網絡和APP應用開始使用Javascript今天我們就來講講我們為什麼會有這種觀念回顧Javascript的歷史來診斷他的現狀同時通過一些片段來表明Javascript同其他開發語言的本質不同唯有如此我們才能明白為何Javascript這麼重要

  早期的迷惑

  從某種程度上來講Javascript是Java的惡魔兄弟(Javas evil twin)他們同歲都於年以Beta的版本出現並且都在次年年推出了版本在語法上他們也很相近從名稱上來看他們就像是一家人一樣

  我們第一次聽說Javascript是在當時Netscape推出了Navigator 的Beta版本這個版本中沒有包含Javascript但是有對於Java Applet的支持同時Netscape 宣布頁面內嵌的語言LiveScript這個聲明並沒有引起太多的注意在當時Java Applet是一個熱門的技術當時對於為什麼Netscape要在浏覽器中內嵌兩種語言也不是十分清楚難道有什麼事情LiveScript能做而Java做不了的麼?

  個月以後LiveScript看到了曙光在Navigator B它被重新命名為JavaScript這次改動吸引了眾多人的關注Oh他肯定不能體現他的價值為什麼Sun要讓這麼個玩具來搭Java的車?我至今仍人為這次改名是一個失敗的主意因為他引起了無盡的困惑很多非編程人員從來都沒有明白過Java和Javascript是兩個不同的東西

  改名字的另外一個影響是細微的但是我認為改善了這個語言的接受程度與Java的關系使這門語言看起來並不是一個全新的東西事實上當時Java本身都還不是十分成熟也還沒有到但是外界對於Java成熟狀況的認知要比本身高出很多例如時代雜志將Java選為當年的十大新產品之一同時市面上已經有很多關於Java的書籍所以當Netscape將這項技術命名為JavaScript其意圖很明顯就是表明當時的Java開發團體是使用和評價JavaScript的最佳人選

  在懷疑的浪潮中憑借JavaScript與Java Applet的通信和控制能力JavaScript開始出現在一些應用中所以那些對Java感興趣的人開始覺得有了學習JavaScript的必要

  Javascript就像一個玩具它是面向對象的所有的東西都是公有的沒有封裝另外你無法創建真正的子類在實例變量和方法之間並沒有真正的區別這就像一個災難你可以在任何時候將一個變量變成一個方法在這方面我並不是孤獨的雖然對於面向對象的細節每個人的理解都有所不同但是Java程序員幾乎無一例外的認為JavaScript並不是一門嚴肅的編程語言我們也不像用它來做些什麼

  附加的傷害

  在早期的時候JavaScript並沒有什麼真正的技術問題它是緩慢又充滿風險的並且只在Netscape下工作後來IE也支持了但並不是完全兼容人們吹捧他用來編寫頁面的applets但是它並不能檢測applet的失敗它從來沒有被廣泛的使用過很快他就成為了一個分母人們僅僅用它來完成那些可靠的任務並且避免在其他的地方使用

  什麼是JavaScript能夠可靠的支持的?閃動的基於圖像的視覺效果人們開始制造一些炫目的效果Netscape引導了這個趨勢在頁面中使用令人生厭的圖層干擾了人們對正常內容的浏覽那些各種各樣閃動滾動的效果讓我們認為這個標簽簡直就是網絡的原罪到處都充斥著閃動的Banner滾動的Banner狀態欄裡跳動的文字隨時可能彈出的對話框……各種各樣的濫用還在不斷繼續Miscorsoft也開始談論DHTML但是不久DHTML就變成了BuggySlowUnmaintable網站的代名詞

  對了不要忘記安全問題一般來講當你構建一個圖靈完備(TuringComplete)的編程語言時你就需要特別小心安全問題Netscape做的不夠好早期的Javascript中存在漏洞而且花了很長時間才完全解決掉

  結果是什麼?很多的有技術頭腦的用戶關閉了浏覽器的Javascript支持要知道年的時候可以被稱為有技術頭腦(Technically Savvy)的人員站的比重相當的高所以這些人便不再依賴於JavaScript因為這會導致用戶不使用你的網站

  那些使用JavaScript的用戶做的也不夠好那些嚴謹的程序員完全拋棄了JavaScript但是設計師和頁面人員補充了進來早期的書籍中都提供了糟糕的JavaScript實例但是很少去從語義上對它進行分析闡述(David Flanagan是個例外)讓事情更糟糕的是有些人(也許是大多數人)根據就沒從書中學習過JavaScript他們只是從一個網站現有的代碼中拷貝修改然後粘貼到自己的網站上讓它工作到最後都不知道為何這些代碼能夠正常運行

  即使大家都是從例子開始學習JavaScript只要保證兩件事情這也許會成為一個很好的策略第一個就是大家都學習好的例子但顯然JavaScript並不屬於這種情況第二種情況就是這種語言應該和學習它的人所知道的另外一種語言相似但是很不幸雖然JavaScript從語義上看來和Java非常相近但實際上JavaScript來自一個和Java完全不同的編程語言家族JavaScript是NewtonScriptSelfSmalltalk……和Lisp語言的一個直系後裔Waldemar Horwat一位在JavaScript早期產生重大影響的工程人員說我更願意把JavaScript認為是Common Lisp的另一種形式這個說法有些誇張但是如果你知道這兩種語言你就會很容易發現兩者之間確實存在很多相似之處

  所以狀況就變的越來越不好一門與之前廣泛傳播的語言有很大不同的新語言被一些沒有經驗的編程者推廣其他的編程人員Follow了他們的例子更多的用戶基於安全考慮關閉了JavaScript的支持還有有經驗的程序員推薦大家避免使用JavaScript上面的這些還不夠浏覽器大戰似乎一觸即發兒JavaScript被選作了一種武器戰爭中的雙方都不斷的發展JavaScript有時候甚至故意引入了很多不兼容特性JavaScript此時已經變得更龐大但同時也更容易引起問題

  也難怪沒有人會喜歡她

  帝國的重建

  在那段時間我還是不斷聽到更多關於JavaScript的消息關於基於prototype和面向對象的特性的介紹總是讓我很好奇我曾經看到過的教材裡從來沒有提到過這些也許是作者本人也沒有必要的語言背景去將這些概念聯系起來同時人們開始指出由於浏覽器造成了多少錯誤而不是JavaScript本身

  後來IE贏了Netscape投降了這一階段的浏覽器大戰結束了Miscrosoft開始將他們的bug光芒覆蓋到CSS領域(任何處理過IE下頁面開發的工程師都應該深有感受)而Mozila的團隊則開始認真的考慮兼容性的問題除了一些根深蒂固的區別想要修改他們必須大量的修改源碼這個小組修復大多數的不同於是IE和Mozilla/Firefox下的JavaScript變得更可控了其他的開發者也更加的有跡可循

  JavaScript和浏覽器的內置支持開始進入了一段穩固的發展時期在我們大家都忙著寫自己的JavaScript代碼的時候幾乎沒有人注意到一個具有傳奇色彩的特性引入XMLHttpRequest最重要的DHTML特性Ajax的重要部分悄悄的加入到了IE中來Microsoft的Outlook小組引入了這個ActiveX控件來使Outlook支持網絡訪問年的Ajax Experience的大會上Dion Almaer和Ben Galbraith做了很多關於XMLHttpRequest的工作但是在Mozilla第一次引入XMLHttpRequest支持的時候的官方文件中他的特性根本就沒有提到

  那段時間有很多JavaScript的活動在JavaScript的支持下Macromedia為Flash提供了腳本語言支持Adobe也在不斷努力使他們的很多程序可以使用JavaScript來控制和擴展Apple將JavaScript嵌入了它的Sherlock應用中當然Mozilla項目也做出了一個重要決定他們大部分的浏覽器都可以支持JavaScript很明顯JavaScript已經不再僅僅是一個網頁語言而成為了程序中嵌入的動態的運行時擴展的編程語言的首選其中的原因也許是當時大家或多或少的都會一些JavaScript還有當時存在兩個高質量的嵌入擴展(SpiderMonkey c語言編寫Rhino Java語言編寫)

  在年的時候一些人(著名的Brent AshleyAlex RussellDouglas Crockford)開始注意到JavaScript究竟能做什麼Brend開始研究JavaScript與服務器通信的方法提出了我們現在公認的Ajax Style而且在當時浏覽器對於XMLHttpRequest支持不是很完善的時候他增加或者形成了很多完成這項處理的很多巧妙的方法他建立了一個網站Remote Scripts Resources並且編寫了一個JavaScript Remote Scripting (JSRS)庫來支持不同浏覽器的兼容性

  Alex Russel建立了一個netWindow項目意圖建立一個支持富UI可編程圖形環境的網頁同時帶有完全可拖動的窗口和其他小組件netWindows變成了nWigets並且最終催生了Dojo Project一個當前重要的Ajax框架

  Douglas Crockford一直在研究JavaScript語言的豐富性最後他發布了一系列有建設性的文章例如The Worlds Most Misunderstood Programming Language在這些文章中他指出了JavaScript在使用中的一些技巧和一些缺點

  BrentAlex和Doug當時的聲音都很薄弱就像曠野中的呼聲但是當最後其他的Web開發社區准備將注意力投向JavaScript的時候他們所作的這些工作讓我們的生活變得更加簡單了

  我在年到年中段的時候對於JavaScript的關注都只是一些零星的片段我確實沒有投入太多的關注我沉浸在Java的樂土中閒暇的時候研究一下Ruby而正是這段經歷為我再一次的認識JavaScript提供了准備

  在年的我的朋友給我演示了netWindows當我從地板上撿起我的下巴來以後(After i pick my jaw up off the floor作者還真是幽默)我朋友告訴我說Alex這個人不是瘋子我如夢方醒開始認真的研究JavaScript現在看來當時Google也有一幫人在做同樣的事情

  偉大的革命

  每個看這篇文章的人都應該知道一些Ajax第一次引爆屏幕的情景今天我來簡短的說一些完整的情節

  第一個引起我注意的Ajax應用是Gmail很明顯他先是下載了很多的JavaScript然後在後台不斷地與服務器進行通信避免頁面的刷新他確實給人非常深的印象同時也給其他的技術團隊帶來不知所措的感覺我當時在想Google一定是有一個非常成熟的定制化工具來開發如此復雜的客戶/服務器端管理

  真正讓我明白的是Google的Google Suggest現在的人一定很熟悉當我們輸入的時候通過與服務器的交互將我們可能需要的詞條顯示出來供我們選擇

  Google Suggest在兩個方面讓我印象深刻第一是他是如此簡單以至於大多數的技術人員都能夠明白他的工作原理並且應用到自己的網絡項目中另外一個是Google Suggest針對用戶的每次keyup事件進行相應和通信讓我看到同服務器通信是如此的簡單我完全被折服了

  不久以後又襲來了Google MapsJess James Garret形成了Ajax這個術語從此以後討論變得更加方便

  從此以後Ajax變成了我們處理網絡應用的的標准方法而且現在我們有了更多的工具和第三方庫選擇但我們又陷入另一個難題選擇太多了

  停止擔心愛上DOM

  我已經闡明了為什麼JavaScript有這個名聲的眾多原因其中有好的也有壞的在這眾多的原因中我只想重復一條他是如此重要能夠解釋為什麼很多有經驗的程序員經給被自己的經驗所蒙蔽

  這一部分作者以一個例子來說明了JavaScript的編寫方式和Java是多麼的不同最後提出了一些有意義的總結Functions are firstclass objects Methods are just functions attached to objects You can add methods to classes at any time (even after instances have been created)

  Individual objects can have their own methods ``Class constructors are just functions Functions being objects can have their own properties You can call functions with fewer (or more) arguments than the function is declared to take If no value is passed for a function argument it gets the value undefined

  總結最後讓我們每一位JavaScript開發者來正確的認識JavaScript用它來完成他應當完成的任務

  Ajax is a gateway drug for JavaScript

  [參考資料] Learn To love Javascript

  NewtonScript

  Java In Best Top Ten of l


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26041.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.