javascript不可用的問題探究

昨天在Twitter上的一些有趣的討論中, 我發現人們對於Web應用和站點對javascript的依賴廣泛存在一種疑惑. 這種疑惑一直都存在, 而對我而言, 這個問題隨着瀏覽技術的飛躍發展而集中爆發了.javascript

我第一次遇到這個問題仍是在DHTML盛行的時代. 咱們對瀏覽器無所不用其極, 加上各類動畫菜單、3D標籤(咱們如今已經學會再也不使用這些了), 但總有人告訴咱們javascript不可用.html

誰禁用了javascript

第一個要問的問題是這些javascript不可用的環境在哪裏. 下面是一些可能的答案:java

  • 安全系統好比noscript或者公司代理過濾掉了javascript;
  • 功能手機好比舊式黑莓(我還記得將舊式黑莓換到Opera Mini以得到總算還過得去的上網體驗);
  • 在移動應用環境中, 圖片和腳本有時候會被拆分處理;
  • 在流量有限或者接入很慢的區域中;
  • 人們由於我的緣由禁用了javascript;
  • 討厭廣告彈出等強勢廣告的人.

就像你所看到的那樣, javascript被禁用的緣由多種多樣, 有被動的, 也有主動的. 因此不能說只有亂用網絡的人才會遭遇這樣的問題.node

爲何javascript會被禁用

像上面所列舉的那樣, javascript被禁用的緣由多種多樣. 若是它是被有意禁用的, 那麼我猜主要緣由無非如下三點, 即安全考慮、廣告疲勞以及慢速鏈接.git

安全考慮在情理之中. 幾乎每個在客戶端的攻擊都是使用的javascript(大多數情形下都是利用了插件的漏洞). Java固然是當前最大的安全漏洞, 可是經過javascript一樣會對存在漏洞的網站或者不經保護或者過期的瀏覽器以及操做系統形成安全威脅.github

慢速鏈接是個頗有意思的緣由. 很是諷刺的是, 咱們使用javascript是爲了加速客戶端體驗. 最初使用js的一個例子就是在客戶端對錶單進行驗證從而避免服務器端沒必要要的工做週期.web

若是你如今正處於一個不好的鏈接中(好比一個無線鏈接或者不好的3G鏈接), 你想要使用Google Reader或者Gmail, 你只能獲得一個不完整的頁面, 這時候只有使用低版本的才能更好工做.瀏覽器

爲了兩方都好

基於環境以及鏈接給用戶最好的體驗是很是好的. 這也是漸進加強(progressive enhancement)所研究的問題. 這也並不是是很高深的東西, 它很簡單, 而且是處於徹底的實用主義.安全

使用事件受權這樣的技術是很是簡單的. 你能夠經過點擊父元素的handlers來寫你本身的HTML, 使用innerHTML或者其餘一些更新更快的技術.服務器

爲何是這樣一個問題

坦白說, 我也不太清楚. 或許是由於我太過期了, 或許是由於我已經一次有一次對瀏覽器和網絡鏈接失望了, 或許是由於我只想更安全一些. 我只是不明白爲何人們只想要js的解決方案呢, 而實際上, js只是用來提供一些加強功能的.

費解的應用邊緣案例

人們時常懷有疑問的是"應用須要javascript". 若是咱們足夠坦誠, 咱們就會發現, 這樣的應用其實是不多的. 若是必定要說出一些, 我只能想到的是瀏覽器中的photoshop或者其餘的一些編輯器(好比視頻、瀏覽器中的IDE)才須要依賴於javascript. 其餘均可以經過從新加載和服務器端的一些部件解決.

讓咱們直面這樣一個事實——在Node.js的時代, 服務器端也能夠用javascript來寫. Dav Glass of Yahoo兩年前顯示若是一個工具庫編寫成餘環境獨立的, 那麼你就能夠同時在客戶端和服務器端複用這些工具.

"應用須要javascript"的真正緣由彷佛是其餘緣由, 而非技術上的.

"應用須要javascript"的真正緣由

正如禁用javascript能夠有不少緣由, 應用須要javascript也有不少緣由.

  • 你只知道js而且認爲人們就應該升級他們的瀏覽器. 這無可厚非, 可是這樣的見解是很狹隘的, 而且很容易失敗.
  • 和你一塊兒構建應用的團隊沒有服務器端的技能, 你但願能以較低的代價完成這個應用. 這或許有效, 可是這樣可能讓開發時間和資金都加倍. 要提早爲這樣的開發作好規劃.
  • 你想要儘快寫出應用, 而且你知道之後你會重寫這個應用的. 這是很常見的現象, 尤爲是你能夠所以而成功. 願上天保佑你吧, 千萬別讓人知道你會待好久.
  • 你的應用會在一個純js的環境中運行. 這固然意味着你不必不使用js而完成你的應用. 一個很好的例子就是Air applications. 但你要保證這個環境在未來不出問題.
  • 你的應用確實須要js來運行. 若是真是這樣的狀況, 就別將它提供給沒有js的用戶. 向人們解釋爲何以及如何作(儘可能避免告訴人們他們需須要開啓js由於他們可能根本作不了而更加失望), 並利用js重定向到你的應用.

總結

總之, javascript依賴性的問題不僅是技術緣由. 它對舊的技術實踐提出了疑問, 而且對於可維護性有很大影響.

能夠說, 若是咱們能問問"咱們爲何須要js"而不是問"人們爲何沒有js", 關於這個問題的討論會更有成效. 若是咱們的技術能很好適應不一樣需求的話, 去責備人們跟不上網絡發展是毫無心義的.

經過展示給用戶看他們能經過開啓或者關閉瀏覽器中部件來解決問題一樣是沒有意義的. 當一個普通用戶卡在你的應用中了, 這並非一個告訴用戶發生了什麼的作法.

或許全部這些問題在node變得成熟以及普及之後都不會再是問題. 我將很樂意看到這點.

原文連接:That "javascript not available" case

相關文章
相關標籤/搜索