iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 10
1

承上篇 ( 有簡中版 ) 來源

怎麼選 web 框架

每門語言都有各自的框架 , 且數量龐大不免讓人選擇困難 , 下個段落會列出一些現正流行中的框架

我們先列出一些會左右選擇的因素:

  • 學習門檻 ( effort to learn ) : 這取決於對原生語言的熟不熟悉 、 使用這個語言的社群是否活躍 ( 關係到問題討論量 ) 。 如果沒有任何程式經驗 , 這裡首推 Django ; 如果已經有團隊經驗且有團隊慣用的程式語言 , 就選擇慣用的
  • 生產效率 ( productivity ) : 熟悉框架後製造一個功能所花費的時間 , 其中包含寫的難度及可維護性 。 很多影響生產效率的因素都跟影響學習門檻的很相關 , 文件量 、 社群活絡 , 其他因素包括 :
    • 框架目的 ( Framework purpose/origin ) : 有些框架起初就是設計來解決某些問題 , 運用相似的規範來更方便製造 web app 。 例如 Django 是用來做新聞網站 , 所以它用來製作成部落格 、 一些要發布內容的網站有很好的使用性 。 Flask 是一個輕量級的框架 , 擅長在嵌入式裝置製造 web app
    • 主導性 ( opinionated vs unopinionated , opinionated 翻譯為自大的 ) : 主導性高的框架 , 針對特定問題總會有推薦的最佳解法 ; 常見問題會有更好的生產力 , 因為它會引導你往對的解決方向 , 也因此彈性較低
    • 內建功能多寡 ( batteries included vs. get it yourself ) : 很多框架有自己的工具或函式庫 , 讓處理問題時可以使用內建的功能 , 也有許多輕量級框架可以使用與內建分離的函式庫 ( Django 就是前者 , Flask 是後者 ) 。 每個內建功能讓我們覺得框架在使用上更友善、易用 。 另一方面 , 如果較小型框架也內建所有我們需要的功能 ( 甚至是將來需要的 ) , 它會導致需要在一個受限的環境執行 , 而且需要學習一些小型簡單的 subset ( 後面這句簡體版我也是有看沒有懂哪~ )
    • 框架是否鼓勵開發練習 ( 蛤? whether or not the framework encourages good development practices ) : 框架支援 MVC 架構去分離 code , 分離行為在邏輯、功能性上都更利於維護 , 與沒有預先想好架構的開發者相比 。 同理 , 框架的設計在測試的難易度 、 code 重用有很大的影像
  • 語言本身的效能 ( performance of the framework/programming language ) : 通常速度不是最大選擇框架的因素 , 因為即使執行速度偏慢 ( 如 Python ) , 在尚可的硬體上執行中型網站也夠快了 。 其他可以感受到速度快的語言 ( 如 C++ , JS ) , 可能因為學習曲線及維護成本更高而抵消速度快的優點
  • 暫存支援 ( caching support ) : 當網站規模愈大 , 可能會發現接收 req 的數量跟著龐大 , 網站開始無法好好處理它們 , 因此我們要考慮 caching ( 暫存 )Chaching 是儲存全部或部分 res 一個優化功能 , 使得排在後面的 req 不必重新計算 , 更快速的回傳 。 Caching 可以在我們的 code 上執行 , 也可以在 server 上執行 ; 框架對 cached 有不同的支援程度
  • 延展性 ( scalability ) : 當網站規模更加巨大 , caching 也被耗盡 , 甚至達到 limits of vertical scaling ( 需要更強的硬體 ) 。 因此我們需要 scale horizontally ( 把載量分散到不同伺服器及 db 來抒解超載窘境 ) 或是 scale geographically ( 因循地域性使用不同地區的主機 ) 。 不同框架決定不同的延展難易度
  • 安全性 ( Web security ) : 有些框架會提供抵禦網頁攻擊的功能 ( 如 XSS ) , 如 Django 能在表單上清除 JS 語法 , 使其輸入的 JS 無法運行 。 其他框架也提供類似的防護 , 但這些不見得在預設時就有設定 。

還有很多其他影響選擇框架的因素 , 像是 licensing

( MDN ) 在後面的章節 , 選擇 Django ( Python ) & Express ( NodeJS ) , 主要原因在於易學

Note: 初步了解框架時 , 看它的官網 ( Django and Express ) 以下有些要點可以依循:

  • 點看它的文件 , 可能名為 : Documentation, Guide, API Reference, Getting Started
  • 能否看到下列主題的文章 : how to set up URL routing, templates, and databases/models
  • 文件陳述是否清楚
    點擊 Community links
  • 最近幾日提出問題的數量
  • 有幾篇回覆
  • 是否有活絡的社群
下集預告

下篇將會介紹一些目前流行的框架及總結 , 終於要將 Server-side web frameworks 的頁面給結束了 !


上一篇
九日: Server-side web frameworks ( 框架能做的事 )
下一篇
11日: Server-side web frameworks ( 幾個正夯的框架? 活潑哦? )
系列文
還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
iT邦新手 2 級 ‧ 2019-12-08 14:09:40

whether or not the framework encourages good development practices

嗨,這裡的意思我覺得是說 不論如何,框架能促進大家養成好的開發習慣。(因為框架是經過很多高手創建起來的一套方法)
good practices:我是參考 W3C JavaScript Best Practices 裡面的內容推測其意義。
以上,我的理解給你參考。

我要留言

立即登入留言