在不想優化的世界中優化代碼

已發表: 2019-11-22

過早的優化是萬惡之源。

這是開發人員之間的普遍說法。 這說得通。 過早優化可能意味著重做工作,而時間是開發人員最有限的資源。 這可能意味著花費寶貴的時間來優化產品用戶尚不存在的場景。 這可能意味著編寫更難理解的代碼,並且性能提升不明確。

大約一年前參與 WordPress 主題審查團隊時,我再次遇到了這個建議。 過早的優化是萬惡之源。 回復是給一個主題作者,他希望減少他們的主題需要加載的腳本的數量和重量。 一方面,主題作者可以加載一個沒有依賴關係的 1.29 kb 腳本來完成工作。 另一種選擇是使用包含在核心 WordPress 中的 jQuery 相關腳本,總共 105 kb,因為“大多數” WordPress 網站無論如何都在加載 jQuery。

對我來說,答案很簡單。 除非核心腳本已經加載到前端,否則請使用較小的腳本。 我沒有想到過早優化。 我認為它是普通的、普通的、日常的優化。

開發人員不應將過早優化與在流程早期做出明智設計決策的概念混為一談。 他們也不應該等到開發的最後階段才開始優化,此時的重點是向最終用戶提供產品。 這是一個糟糕的產品設計過程的標誌。

在過去的一年裡,那次談話一直困擾著我。 它幫助我更加認識到一個可怕的趨勢,不僅在 WordPress 開發者社區,而且在整個 Web 開發中。 很多時候,開發人員與普通用戶相去甚遠,而這些用戶所依賴的優化技術只不過是事後才想到的。 相反,它應該始終處於任何開發人員頭腦中的最前沿。

過度依賴這個被濫用的報價有助於推動以兆字節而不是千字節來衡量頁面重量的趨勢。 它經常被用作在開發階段不進行任何優化而在生產中通過文件壓縮和緩存來彌補它的包羅萬象的理由。

編寫高質量代碼的一部分是在開發過程的每個階段優化該代碼。 這是關於在軟件組合在一起時做出艱難的決定來削減不必要的東西。 在清理完其他所有內容後,緩存應該是最後的手段。

過早的優化更多的是在沒有明顯收益的情況下嘗試進行優化,或者進行微優化以改變軟件的設計而幾乎沒有收益。 這並不意味著在開發過程中忽略明顯的性能提升。

不是每個人都在千兆互聯網上

我認識的大多數開發人員都使用超快的互聯網連接,通常具有 1 Gbps 的下載速度和無限數據。 在這種情況下,很容易忘記世界上的大部分地區仍處於數據上限的緩慢連接狀態。

有些人甚至可能將慢速連接與數百萬人使用 2G 手機技術的第三世界國家聯繫起來。 然而,美國和其他發達國家的大部分地區沒有直接的電纜或 DSL 線路,這些線路通常在城市和郊區使用。

當其他開發人員開始與我聊天時,這種脫節就很明顯了。 在過去的幾年裡,他們要求視頻聊天變得越來越普遍。 甚至沒有人質疑這樣的事情是否可能(視頻聊天對我來說充其量是不可靠的)。 隨時視頻聊天的能力被認為是理所當然的。

我居住的地區有兩種互聯網服務選擇:衛星或撥號。 甚至當地的電話公司也拒絕在該地區提供 DSL,因為使用了數十年的電話線路的基礎設施成本。 由於衛星互聯網接入的高昂成本(通常伴隨著數據限制),許多人都堅持使用撥號上網。 假設服務可靠,手機公司在一定程度上改變了遊戲規則,但走這條路也有失敗,其中可能包括數據或熱點限制。

對於這樣一個技術先進的國家來說,它的許多人幾乎沒有趕上十年前的其他人。

雖然我很幸運能夠選擇我住的地方並且沒有什麼能阻止我搬家,但大多數人都沒有這個選擇。 他們被困在他們能負擔得起的最好的東西上。 即使在農村地區,互聯網也是日常生活中不可迴避的一部分,開發者並沒有為這些人提供便利。

雖然這是軼事,但它是美國部分地區農村生活的嚴峻現實。

住在阿拉巴馬州偏遠地區的好處是它改變了我作為開發人員的看法。 這意味著我需要對我構建的每個插件和主題的每個代碼決策提出質疑。 有了數據上限,我需要確保我沒有使用太多資源。

最重要的是,擁有數據上限改變了我使用互聯網的方式。 我現在運行一個廣告攔截器。 我有一個擴展程序可以從自動加載中刪除視頻。 我在需要使用的繁重網站上禁用 JavaScript。 有些網站看起來很有趣,但我從不返回它們,因為它們是資源豬。

當您生活在一個每個字節都很重要的地方時,您往往會避免浪費它們。

雖然並不總是成功,但自從我過渡到小鎮生活以來,我一直試圖以一種服務於那些沒有足夠特權來擁有超快互聯網訪問權限的人的方式構建應用程序。

指出這一點是為了確保開發人員意識到優化很重要。 它在開發過程的每個階段都很重要。 這很重要,因為這些連接速度較慢和數據上限的人還需要購買產品、使用服務、閱讀內容以及做人們在網絡上所做的所有其他事情。

如果您是一名正在考慮添加該滑塊、移動滑動機製或其他一些漂亮小工具的開發人員,請考慮那些必須等待該功能加載的人。 檢查其依賴項是否沒有加載太多額外資源。 做一些研究,看看你是否能找到一個更輕量級的實現。 但是,首先,問問自己是否有必要。

WordPress 開發人員構建的主題和插件絕不應該成為網站的瓶頸。 我們可以做得更好。