」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 光澤和微光讓我的心率下降 - 案例研究

光澤和微光讓我的心率下降 - 案例研究

發佈於2024-11-08
瀏覽:203

Lustre and Gleam Make my Heart Rate Go Down - a Case Study

最近,一位客戶聯繫我,詢問其 WordPress 網站上的「財務評估」javascript 應用程式不再運作。它有很多問題,最後,最簡單的方法就是重建它。

在此應用程式中,使用者可以輸入基本的財務和個人訊息,應用程式會告訴他們在財務規劃方面是否走在正確的道路上。這不是超級複雜的邏輯,但有相當多的邏輯。

我主要不是前端開發人員。我在後端最舒服。但我已經在 Vue、Angular、React 中實作了專案...它們工作,但我並不完全信任它們。隨著時間的流逝,我總是對依賴項(包括開發工具鏈本身)過時產生了一種隱隱的焦慮。

輸入微光

Gleam 是用於建立可擴展的類型安全系統的友善語言!
~ Gleam 的網站

自從 Gleam 首次宣布 v1 準備好投入生產以來,我一直對他們感到興奮。它的函數式風格、不變性、詳盡的模式匹配、類型推斷以及 Go 的簡單穩定性意味著 Gleam 滿足了我所有的喜好。

類型系統幾乎可以保證,如果您的程式碼可以編譯,它可以工作。我還沒有在我的 Gleam 程式碼中遇到過一個不是「我的錯,我忘了完成實現」的錯誤。

輸入光澤

Gleam 是為了在 BEAM(Erlang 傳奇的久經考驗的 VM)上運行而構建的,但它也有一個 Javascript 編譯目標。這意味著它可以輕鬆傳送到 Node 和瀏覽器。

Lustre 是 Gleam 卓越的前端框架。它是 Elm 到 Gleam 生態系統的忠實移植,並具有 Elm 的「模型 -> 視圖 -> 更新」狀態管理架構。

這是一個比其他前端架構更簡單的概念模型。 Lustre 的狀態管理模型並不是將狀態管理作為一個可選庫提供(我正在看你的 redux),而是它的核心。

您只需描述可以用來修改應用程式內的狀態的每個動詞,並將該動詞對應到返回模型更新版本的類型安全純操作。視圖函數(也是純函數)直接從該單一模型的狀態流動。

Lustre 還提供了一個託管效果系統,因此即使各種 I/O 操作可能會失敗,您的應用程式程式碼也可以使用完全純函數來實現。

純函數最酷的地方是什麼?在給定相同的輸入的情況下,它們保證始終提供相同的輸出。這使得它們可預測、易於測試並且極其穩定。純函數不會破壞。他們在數學上有點不能

甜甜的樣板

Lustre 應用程式可能涉及位元更多樣板設定應用程式並建立所有類型等。但 ...

從來沒有一個更合適的框架來應用「樣板」一詞。它帶給我的自信就像將鉚釘釘入鋼板中。一旦就位,那東西就不會任何地方

我很難表達與我之前使用 javascript 的經驗相比,這種感覺有多麼不同。如果我在另一個框架中完成,我的應用程式的 LOC 可能會更少。但我相信它不會破裂嗎?是不是就這麼簡單易懂了呢?

最終產品

我按時並在預算範圍內交付了我的應用程式。客戶對此非常滿意。我睡得很安穩,因為我知道這個專案確實完成了

不僅如此,它還可以在所有地方的Wordpress中舒適地生活。我製作了一個短代碼來加載已編譯的資源,將其彈出到頁面上,就是這樣。

JS 套件經過壓縮和 gzip 壓縮後大小為 18.1 kb。這幾乎和 htmx 一樣小。大聲哭出來!

對於使用仍然相對晦澀的語言和框架來交付項目,我確實有一些保留。但知道應用程式不會崩潰,而且 Gleam 本身可以在一個下午學會,這些保留意見就得到了緩解。

最重要的是——老實說,如果我使用其他任何東西來構建它,我真的不認為我會對最終產品、工具鏈的穩定性或未來升級它的能力充滿信心.

我的心率

我現在開始寫這篇文章的全部動機:在生產環境中使用 Lustre 應用程式的感覺

這個應用程式發布已經有幾週了,我仍然喜歡時不時地重新訪問它。不是因為客​​戶要求改變。只是看代碼。

這麼說我幾乎感到尷尬,但我的大多數其他程式碼在某種程度上感覺像是一種責任。 特別是 javascript。即使它是 Typescript,即使它有測試。這讓我感到焦慮,就像佈滿了隱藏的地雷和誘殺裝置。

也許是技能問題。也許我只是被燒傷太多次了。

看著我的 Gleam/Lustre 程式碼讓我感到平靜

就是這樣。這就是那條推文。

最後,我真誠地希望其他開發者能夠嘗試 Gleam 和 Lustre,這樣他們在思考他們的前端代碼時也能享受到同樣的禪宗般的幸福。

感謝您的閱讀。

版本聲明 本文轉載於:https://dev.to/enoonan/lustre-and-gleam-make-my-heart-rate-go-down-a-case-study-5765?1如有侵犯,請洽study_golang@163 .com刪除
最新教學 更多>
  • uick Wins 加速您的網站並增強效能
    uick Wins 加速您的網站並增強效能
    頁面載入時間的定義 頁面載入時間是指網頁完全顯示其內容所需的持續時間,從使用者點擊連結或輸入 URL 的那一刻起,直到所有內容完全載入。它包括所有文字、圖像、影片和其他元素在頁面上變得可見和可用所需的時間。較短的載入時間意味著為使用者提供更流暢、更無縫的體驗,而較長的載入時間可能會...
    程式設計 發佈於2024-11-08
  • Web Worker 與 Service Worker
    Web Worker 與 Service Worker
    介紹 當我第一次聽到這些術語時,我想,好吧,他們正在用單獨的線程做同樣的事情。那為什麼我們需要這兩個術語? 但說實話,這兩個術語及其行為方式之間存在巨大差異。 會嘗試詳細解釋。 這兩個之間的共同點是 它們在單獨的執行緒中運行,不會阻塞 Javascript 的主單執行緒。 ...
    程式設計 發佈於2024-11-08
  • OpenCV 影像壓縮完整指南
    OpenCV 影像壓縮完整指南
    图像压缩是计算机视觉中的一项关键技术,它使我们能够更有效地存储和传输图像,同时保持视觉质量。理想情况下,我们希望拥有最佳质量的小文件。然而,我们必须做出权衡并决定哪个更重要。 本教程将教授使用 OpenCV 进行图像压缩,涵盖理论和实际应用。最后,您将了解如何为计算机视觉项目(或您可能拥有的任何其...
    程式設計 發佈於2024-11-08
  • 何時應在 Python 中使用多個 if 與 If-elif 語句以獲得最佳效能?
    何時應在 Python 中使用多個 if 與 If-elif 語句以獲得最佳效能?
    Python 中的多個If 與Elif 語句在Python 中,在評估條件語句時,可以使用多個if 語句或單一if -elif 聲明。雖然兩種方法可以實現相同的結果,但存在一些可能影響程式碼效率的關鍵差異。 在您提出的場景中:if text == 'sometext': print(text...
    程式設計 發佈於2024-11-08
  • ## 為什麼模板基底類別的多重繼承會導致成員函數解析不明確?
    ## 為什麼模板基底類別的多重繼承會導致成員函數解析不明確?
    消除多重繼承的歧義使用模板基類處理多重繼承時,會出現關於不明確成員函數解析的潛在問題。考慮以下場景:template <typename ... Types> class Base { public: template <typename T> typename st...
    程式設計 發佈於2024-11-08
  • 為什麼應該始終向環境變數添加類型安全性?
    為什麼應該始終向環境變數添加類型安全性?
    一點背景 如果您已經編碼了一段時間,您就會知道環境變數的重要性及其所扮演的角色,以及找出由於專案中未設定該死的環境變數而導致的錯誤的痛苦, 哈哈! 今年早些時候,我在一家基於產品的新創公司擔任全端開發人員實習生。隨著專案的成長,環境變數的數量也隨之增加。而且,每個人都在不同的分支...
    程式設計 發佈於2024-11-08
  • Java 程式語言的歷史
    Java 程式語言的歷史
    Java 是世界上最受歡迎的程式語言之一,以其多功能性、可靠性和效率而聞名。它多年來的發展和成長塑造了我們今天使用的大部分技術。回顧一下 Java 的歷史。 1。 Java 的起源 Java 由 James Gosling 與 Mike Sheridan 和 Patrick Naughton 一起...
    程式設計 發佈於2024-11-08
  • React 函式庫簡介:)
    React 函式庫簡介:)
    It is a popular open-source JavaScript library used for building user interfaces, particularly single-page applications (SPA). Isomorphic Tech...
    程式設計 發佈於2024-11-08
  • 如何使用連結開啟本機資料夾?
    如何使用連結開啟本機資料夾?
    透過連結開啟本機資料夾透過連結開啟本機資料夾進行了多次嘗試,例如: 開啟資料夾
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 和 jQuery 中無縫存取 PHP 變數?
    如何在 JavaScript 和 jQuery 中無縫存取 PHP 變數?
    在JavaScript 或jQuery 中存取PHP 變數:避免Echo 過載許多開發人員遇到在JavaScript 和jQuery 中存取PHP 變數的挑戰。傳統方法涉及回顯 PHP 標籤內的變量,例如:<?php echo $variable1; ?> <?php echo $...
    程式設計 發佈於2024-11-08
  • 如何使用 RequireJS 解決 JavaScript 中的「require is not Defined」錯誤?
    如何使用 RequireJS 解決 JavaScript 中的「require is not Defined」錯誤?
    “Javascript require() 函數給出ReferenceError: require 未定義”當嘗試在JavaScript 中使用require() 函數時,可能會出現引用錯誤「未定義要求」。這個問題的根本原因是 require() 函數是由模組載入器提供的,例如 RequireJS。...
    程式設計 發佈於2024-11-08
  • 為什麼我的 `` 元素不繼承其父元素的字體樣式?
    為什麼我的 `` 元素不繼承其父元素的字體樣式?
    字體繼承不相容在CSS中,元素繼承其父元素的字體屬性,例如元素。但是, 元素並不總是遵循此規則。 在提供的範例中, 和 元素共用 Verdana 字體,但 元素顯示為「MS殼牌Dlg」。這是因為表單元素(包括 )具有預設字體設置,該設定會覆蓋繼承的字體屬性。 覆寫預設字型確保所有字型繼承一致元素...
    程式設計 發佈於2024-11-08
  • 整合與端到端(E 測試:了解它們的差異以及何時使用它們
    整合與端到端(E 測試:了解它們的差異以及何時使用它們
    在软件开发中,测试在确保应用程序到达最终用户之前的可靠性和性能方面发挥着至关重要的作用。由于可用的测试方法多种多样,因此了解哪种方法适合您的需求非常重要。两种广泛使用的测试方法是集成测试和端到端(E2E)测试。两者都旨在验证系统是否正常工作,但他们从不同的角度进行验证。在这篇文章中,我们将探讨集成...
    程式設計 發佈於2024-11-08
  • 初級後端開發人員尋求無償工作以獲得經驗
    初級後端開發人員尋求無償工作以獲得經驗
    大家好, 我叫 Harith,是初級後端開發人員。我對使用 Python 和 Django 框架進行 Web 開發非常感興趣。我希望透過為開源專案做出貢獻來獲得更多實務經驗。 我提供什麼: 願意在沒有任何報酬的情況下參與項目,因為我的主要目標是提高我的技能和拓寬我的知識。 了解 Django 和...
    程式設計 發佈於2024-11-08
  • 如何在 Python 中檢查清單是否共用任何項目?
    如何在 Python 中檢查清單是否共用任何項目?
    在Python 中測試清單是否共用任何項目簡介在Python 中處理多個清單時,通常需要確定是否有元素重疊在這些列表之間。這是各種數據分析和操作任務的基本操作。 簡答在 Python 中測試列表重疊的建議方法是利用 not set(a).isdisjoint(b ) 表達。它為此任務提供了一種普遍有...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3