【夔堂】:程式血淚史之——有一種垃圾語言叫做JavaScript

来源:http://www.cnblogs.com/kuilab/archive/2016/11/18/6077540.html
-Advertisement-
Play Games

“Prototype”機制是個半成品OOP,有些文章說這玩意當初為了“簡單(編寫)、容易(學習)”而發明的,但web前端技術發展到今天我們看到,JS顯然是需要OOP的,或者說web前端程式規模增長,需要OOP等更強大、方便的特性、機制。真要簡單容易,你乾脆不要提供能讓人實現繼承的什麼prototyp ...


 “Prototype”機制是個半成品OOP,有些文章說這玩意當初為了“簡單(編寫)、容易(學習)”而發明的,但web前端技術發展到今天我們看到,JS顯然是需要OOP的,或者說web前端程式規模增長,需要OOP等更強大、方便的特性、機制。真要簡單容易,你乾脆不要提供能讓人實現繼承的什麼prototype嘛。提供了結果呢,繼承要額外手寫代碼實現,而且聽說繼承機制竟有五種之多,這不是反而難學、混亂、麻煩嗎。

所以JS的prototype一是倉促懶惰二是沒有前瞻性。沒前瞻性說明白點,就是沒有發展意識與戰略眼光:在前端需求開始發展時就應該做出質的革新,網景(Netscape,後來變成FireFox基金會)不去好好做種前端語言,從技術上打倒微軟,卻勞民傷財的去跟人家打官司,格調不高雅,做事更不高明。

 

沒有代碼提示,主要導致生產率極其底下。沒有代碼提示是因為變數定義沒有類型,而且沒有類型限定之類的機制、語法來彌補。

 

沒有包。凡是沒有包的高層語言都是垃圾。

此處高層語言是指不直接操作硬體的語言,使用嵌入硬體語言技術不算。比如像jQuery,拿個“$”當包使,這像編程嗎?什麼玩意啊簡直是!

 

最後導致二十多年後微軟做TS,谷歌做Dart來擦屁股(谷歌還做了V8執行引擎),蔚為奇觀。現在是2016年11月,這兩種語言都發佈幾年了,且不說技術上的便捷程度如何,可中國招聘網站上竟然都還幾乎沒有這兩種語言的職位!

就算用了還是要學新技術,增加成本。

就算用TS或Dart寫了類,JS裡面去調用還是不會有代碼提示!垃圾就是垃圾。

 

重覆造輪子,導致程式員換庫麻煩。

那些寫框架重覆造輪子的人既是這場災難的傳播者也是受害者。

 

重覆載入、浪費網路帶寬、資源。

另外載入還得耗電耗時,導致攜帶型設備使用時間縮短。

耗時導致浪費人時間、工作效率下降、與網路擁堵互相加劇。

再強調一句:這些輪子大部分代碼功能都一樣。

 

到現在甚至js庫都開始用管理器了!比如node.js搞的什麼軟體包管理器npm。

 

這裡我特別要對軟體業巨頭提出強烈批評,

不指望你們開發多先進的瀏覽器,也不指望你們開發出新的腳本語言;百十萬的高工牛人,就讓瀏覽器能執行個寫起來舒服點的python都沒人能想到嗎?

還在那一天用著幾十年前的js和老外的js庫開發各種所謂高大上的產品,簡直丟人現眼。

 

這種垃圾語言我看都懶得看一眼,如果我去學,第一也是為了進行深入批判。嗯,所以這篇可能會有續篇。

 

我這人作為程式員的一項使命就是消滅網站和應用程式中的JS。

 

肯定有人罵我咋不自己寫個瀏覽器,我的回答就是我命苦沒錢自己在家做,以後有錢又要忙死。而且這麼罵的人都是看不懂我那網站上Flash做的demo的蠢貨或者乾脆不是程式員的。

 

其實我還想讓開源社區來實現瀏覽器或者“可以執行bean文檔中嵌入的腳本的Spring”之類的應用產品,不花錢、有人替我實現才好。

 

最後我再嘮一遍:JS就是網景公司當初為了網頁能夠互動而隨手做的玩具語言。而且跟敗在自己手下的微軟的垃圾VB大概是一個檔次。

 

最初的禍端主要是瀏覽器廠商不敢把UI組件寫完善,怕阻礙開發者自己定製,又很賤地認為不會有開發者自己實現整套UI組件所以沒提供底層API。我覺得其實是智商與能力不夠,沒有好的解決方案(IE之爛大家有目共睹,FF我懷疑已成為洗錢基金,開發團隊我也也缺乏瞭解)。當然對比桌面應用程式以及第一代RIA(Flash、JavaFx、微軟銀光)來看就很明顯的觀察出,其實是因為UI組件被寫死了。
UI既然寫死那麼就要儘量做得容易自定義 。這樣就註定了現在大量JS框架紛亂於世的格局。
所以後來Html5第一要件就是提供Canvas這套繪圖API讓開發者可以完全地自己實現UI組件。
然而可悲的是依然沒有一個大神或大廠站出來一刀剁了孽障JS 。
侃一侃:從瀏覽器的誕生與發展說JS

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下載python: 從從https://www.python.org/downloads/下載python,根據操作系統的不同,選擇不同的版本下載。註意:linux系統大多預裝了python,可以直接使用。 ubuntu16.04中已安裝python2.7和python3.x版本,輸入python和 ...
  • socket通信的原理在這裡就不說了,它的用途還是比較廣泛的,我們可以使用socket來做一個API介面出來,也可以使用socket來實現兩個程式之間的通信,我們來研究一下在php裡面如何實現socket通信。 由於socket服務端的代碼要監聽埠,等待接收請求,所以php在做socket服務的時 ...
  • B1024/A1073/A1001/A1005/A1035/A1077/A1082 ...
  • ...
  • 初學JavaScript的時候有人會認為JavaScript不是一門面向對象的語言,因為JS是沒有類的概念的,但是這並不代表JavaScript沒有對象的存在,而且JavaScript也提供了其它的方式來解決面向對象的問題。所以JavaScript也是一門面向對象的語言。 面向對象僅僅是一個概念或者 ...
  • 總結一下一些知識。 1.利用CSS穿透 常見發生場景:假如我們需要通過input,type=‘file’來上傳文件,而這個input的預設樣式,可以說是非常地“不人道”。所以我們希望通過一張圖片,與這個input大小一樣,位置一致地蓋在上面。這個時候,顯然,這個時候點擊圖片,input是不會起作用的 ...
  • 一:移動端基礎事件 1.touchstart 手指觸摸 == mousedown 2.touchend 手指抬起 == mouseup3.touchmove 手指抬起 == mousmovetouch事件 在 chrome的模擬器下,部分版本 通過on的方式來添加事件無效所以在移動端一般都使用如下方 ...
  • 引子 瀏覽器URl地址,上網一定會用到,但是瀏覽器地址有中文或者瀏覽器url參數操作的時候,經常會用到encodeURIComponent()和decodeURIComponent()以及encodeURI()等等。關於瀏覽器參數操作,請看文章http://www.haorooms.com/post ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...