創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2017年5月29日 星期一

JavaScript資源列表

JavaScript(簡寫為JS)大概是我所用過程式語言中,用起來最不情願但又不得不用的一個,不過這是過去的情況,現在的它不僅吸引人,也擁有廣大的使用者社群,也是最為流行的語言之一。會出現如此矛盾現象當然有幾個原因,以下就列舉一些:
  1. 它在當今的電腦網路環境中,幾乎無所不在,不論是網頁、電腦、手機應用程式,都可見到它的蹤跡,很難不會去接觸到它。即使在十多年前,它的主要使用環境是在瀏覽器的網頁中,對於我這種重度網路使用者,難免要與它打交道。
  2. 既然難免要用到它,總要想辦法學。而我自學JavaScript的途徑顯然不是教育的好榜樣,這又與台灣的資訊教育偏向有關,後面再補述這點。早期,就說約千禧年後的幾年好了,雖然我接觸JS的時間更早,台灣市面上的JavaScript中文書籍大多以網頁特效的角度來介紹JavaScript,而且許多會偏向使用某個特定瀏覽器。如果看倌清楚當時瀏覽器大戰的激烈程度,就可以預料到我接下來要說什麼,就是如果照書上教的學完了後,在實際使用時就會發現到,在許多情況下,書上有很多東西不是不能用,就是執行結果與預期的不一樣。所以自然就不易學好基礎,反而形成許多混淆。
  3. 即使可以學到良好基礎,受第2點所述的瀏覽器之爭的影響,寫出的代碼要克服瀏覽器之間的差異性也是大費周章。當然這點在目前已不像以往般複雜,尤其IE宣告出局後,事情就簡單多了。
  4. 舊版JavaScript的語法,就個人觀點,實在是不怎麼討喜,尤其是對於已慣用了其它相對簡潔語言的人而言。不過這點在ECMAScript 2015(或稱ECMAScript 6,簡稱ES 6)出現後,已讓我大為改觀。
綜觀JavaScript的發展史,有幾個出現重大突破的時間點與發展,像約在2005年AJAX的廣泛應用;2006年jQuery函式庫的出現;2008年Google V8的推出,隨後2009年Node.js,它與V8的搭檔演出,在近幾年來JavaScript的生態系統ecosystem發展上幾乎是獨領風騷;2015年的ECMAScript 2015版本的語法大升級,讓編寫JavaScript代碼的工作更能得心應手。這些發展當然也是配合著大環境的改變應運而生,所以在過去十多年前自己對於網頁方面的工作習慣上是偏向儘可能少用JavaScript,為何如此後面會補述,但現在已大為不同,在我所使用的語言中,它可能擁有最多的生態系統與資源,它甚至曾經登上GitHub最流行語言的第一名[1]。

了解這語言有什麼好處?如果這與你的工作無關,這問題就不重要,否則,這裡提供幾個親身經歷以及幾個事實供參考。
  1. 過去工作上曾有位網頁設計人員向我請教為何她最近新製作的網頁在瀏覽器中總是要隔好一段時間才會出現?我稍看了一下她製作網頁的工作環境中的成品檔案,很快就發現一個體積大於1 MB的.js檔案。網頁顯示很慢的原因是工作上與她配合的那位自以為是的菜鳥程式員,為了網頁選單特效,從網路上弄來的這個程式碼檔案。我提醒她這個.js檔案已遠比她在網頁專案中所製作的圖片還大上許多,而且還很可能把程式碼掛在網頁的前頭,所以瀏覽器在載入與執行這檔案花不少時間,導致網頁的其它內容很慢才出現。這也是我為何在前面提到早期我是偏向少用JavaScript的原因之一,其實許多網頁的效果也可以用CSS達成,不一定要用JavaScript與大量裝飾圖片才可以做出美美的網頁。
  2. 在無名小站盛行但還沒被Yahoo!奇摩合併的年代,曾有位程式員問我如何做出像無名小站限制不讓讀者用滑鼠選取與複製網頁文字的功能。我當時只是簡單回答我自己不做這種事,沒多做解釋,對方的工作並不是寫網頁程式,我想避免太多解釋以免讓人覺得囉嗦。其實這種限制對於稍懂JavaScript的人是沒什麼作用的,因為只要禁用瀏覽器的JavaScript就失去作用了,當然這類限制也不盡然都是以JS做的。我甚至看過有人不動用什麼特殊工具或設定,只消按幾下瀏覽器的快捷鍵就把網頁上限制使用者選取與複製的文字全弄到手了,究竟是哪幾個快捷鍵呢?請看一下“編輯”下的那組命令選單就知道答案了。有時他人會問我資料做些存取限制後放網路上是否安全可靠,我的建議通常是,如果資料具機密性或不想讓不相干的人取得,別放網路上,別用電子郵件傳輸,甚至別放在有開放網路連線的機器上。像上述的網頁限制,其實資料都已傳到讀者的瀏覽器中並以明文顯示了,有心人只要腦筋轉個彎,豈有拿不到的道理?
  3. 幾年前曾經出現台灣某科技大廠徵求JavaScript開發人員,卻一時徵不到人的冏境,這就與前面提到的資訊教育的問題有關。過去台灣的資訊教育往往偏重使用某家資訊大廠的軟體,而且所教的往往與實際的需求與流行有些差距,像以往學校或書上教的利用XML傳遞資料,但那時我已看到流行的會是JSON。這種教育偏向的結果也導致許多政府機構的網站外包設計後,只能用那家大廠的瀏覽器才能正常顯示,但手機、平板大為流行後,這種系統就廣受民眾批評,因為絕大多數手機並不是用那家大廠的瀏覽器。
  4. 也是3.的延續。甚至,網頁開發人員對於網頁的運作細節了解不多,只要會用大廠的開發軟體就能做出網頁系統,但一旦出現問題,卻不知從何處下手解決。我就真的看過一家與金融投資相關的公司,使用這家大廠的開發工具與資料庫所開發出來的網頁版會員系統,在登出後,只要按瀏覽器的“回到上一頁”,竟然還能看到原本必須要登入系統才能看得到的東西,而且還數次碰到過這系統的網頁出現過資料連結錯誤的訊息。從事網頁程式開發工作,最好把網頁的運作方式搞清楚,以免開發出像前述安全漏洞百出的網頁系統,還有HTML也要有些了解,可以的話JavaScript與CSS多少懂一些絕不吃虧,另外就是安全議題要多少了解一下,尤其往後網路攻擊會越來越常見,最起碼要避免所開發的系統提供給人家攻擊的機會。
  5. JavaScript老早已非吳下阿蒙,不是只限用於網頁環境,除了網頁,手機、平板、行動裝置、電腦桌面的應用都能用JavaScript開發,而且在多數流行的作業平台都可使用。
最後,就算你不打算使用或學習這語言也不打緊,它廣大的使用者社群所提供的廣大資源與好用的軟體也相當吸引人,也許你也使用過其中的某些軟體而不自知。以下主要依照自己常用或者覺得實用的列出部分資源,但不是全面的,那些老舊、過時或非標準的東西就不列入了。列表會逐漸增加,列表中的連結有可能其中的頁面彼此會互連,這裡儘可能減少重複性。

JavaScript資源列表

學習與參考文件類

JavaScript函式庫

  • jQuery:歷史悠久,可算是第一代出現的函式庫。
  • D3.js:簡單說,繪製圖表的函式庫。如果覺得太複雜,可以先試試其他以D3.js為基礎的函式庫,像〈C3.js 簡易快速入門〉中所提到的,像這類的其實還不少。

Node.js 

  • Node.js:JavaScript執行環境。
  • npm:Node.js套件管理程式。
  • request:Request is designed to be the simplest way possible to make http calls.
  • cheerio:Fast, flexible & lean implementation of core jQuery designed specifically for the server.

工具類

  • PhantomJS:一種headless browser,我偶而拿它做webscraping,但它的用途並不只這項。

  他人整理的Awesome list

  • Awesome JavaScript Learning:An awesome list limited to the best JavaScript learning resources.
  • Awesome-Javascript:A collection of awesome browser-side JavaScript libraries, resources and shiny things.
  • Awesome Node.js:A curated list of delightful Node.js packages and resources.
  • awesome npm:Awesome npm resources and tips.
  • Awesome Node.js projects:A curated list of awesome open-source applications made with Node.js. See Awesome Node.js for a curated list of packages and resources.
最後也別忘了,還有本網誌的JavaScript標籤分類的文章。

參考

[1] https://www.bnext.com.tw/article/37145/BN-2015-08-22-070713-113

沒有留言:

張貼留言