大前端開發——前端知識漸變分層講解 利用金字塔原理簡化前端知識體系

Web開發基礎

核心概念

  1. HTML、CSS和JavaScript:Web開發的三大基石,分別負責結構、樣式和行為。

  2. 代碼管理:隨著項目規模擴大,需要將代碼拆分成小塊,便于維護。

  3. 作用域污染:早期所有代碼共享全局作用域,容易導致變量和函數名沖突。

細化解釋

在Web開發的初期,開發者通常將HTML、CSS和JavaScript寫在一個文件(如index.html)中。這種方式簡單,但當代碼量增加時,文件變得臃腫,維護困難。為了解決這個問題,開發者開始將JavaScript拆分成多個文件,通過<script>標簽引入。然而,所有代碼仍共享全局作用域,如果多個文件中定義了同名變量或函數,就會相互覆蓋,導致“作用域污染”。

模塊化與打包工具

核心概念

  1. 模塊化:將代碼拆分為獨立模塊,每個模塊有自己的作用域,避免全局污染。

  2. 打包工具:如Webpack,將多個模塊整合成一個或多個文件,便于部署。

  3. Webpack:主流打包工具,支持前端和后端代碼的統一處理。

細化解釋

模塊化開發通過將功能封裝到獨立的模塊中,避免了全局作用域的沖突。每個模塊可以導出功能(如函數或變量),其他模塊通過導入使用這些功能。Webpack作為打包工具,能夠分析模塊間的依賴關系,將所有模塊打包成一個bundle.js文件,瀏覽器可以直接加載運行。

后端引入方式與AMD/CMD協議

核心概念

  1. require:Node.js中同步加載模塊的方式。

  2. AMD(異步模塊定義):瀏覽器端異步加載模塊的標準。

  3. CMD(通用模塊定義):在AMD基礎上改進,提供更靈活的加載方式。

細化解釋

在Node.js中,require同步加載模塊,適合服務器端,但在瀏覽器端由于網絡延遲,同步加載效率低下。AMD通過define定義模塊,支持異步加載依賴,適用于前端。CMD在AMD基礎上優化,允許按需加載依賴,并通過緩存減少重復請求。

Webpack的統一打包功能

核心概念

  1. 統一打包:支持不同模塊標準(如CommonJS、ES Modules)的代碼整合。

  2. 入口文件:從指定入口開始,構建依賴圖并打包。

細化解釋

Webpack能夠處理使用require(CommonJS)或import(ES Modules)的代碼,將其統一打包為一個文件。開發者無需擔心模塊標準的差異,只需指定入口文件,Webpack會自動解析依賴并生成bundle.js。

單頁面應用和多頁面應用

核心概念

  1. 網頁加載:瀏覽器通過URL向服務器請求資源。

  2. 緩存機制:存儲靜態資源,減少重復請求。

  3. 單頁面應用(SPA):一個HTML文件,通過JavaScript動態渲染。

  4. 多頁面應用(MPA):多個獨立HTML文件,適合SEO。

細化解釋

傳統MPA中,每個頁面對應一個HTML文件,導航時重新請求。SPA只有一個HTML,通過JavaScript動態更新內容,提升用戶體驗。緩存機制通過存儲JS、CSS等靜態文件,加速后續加載。

單頁面應用框架

React、Angular、Vue

  1. React、Angular、Vue:主流SPA框架,提供組件化開發。

  2. 與Webpack結合:優化代碼打包和資源管理。

細化解釋

這些框架通過組件化方式組織代碼,與Webpack結合實現模塊化開發和高效打包。React以聲明式UI著稱,Vue易上手,Angular功能全面。

組件化的概念

  1. 單頁面應用采用的方式都是構建一個大組件,然后再把這個大組件掛載到一個名叫 div#app 下面去

    1. 這里幾乎是所有初中級前端邁不過去的概念了,他們不知道可以多創建一個 div,然后通過改寫 main.js 將多個 Vue 組件掛載到多個 div 下,因為一般情況下完全不需要這樣做,但是在谷歌插件開發,需要增強一個網頁功能時,恰巧需要這個概念,若沒有這個概念,就很難搞了,如下圖紅框里面這些小圖標

  1. 將單頁面的打包理解為一個大 Vue 組件的 js 代碼用 Webpack 打包的過程,才能更好的理解谷歌插件開發,否則很難對谷歌插件知識進行分層,最終將插件知識和 Webpack + Vue 打包知識混合在一起,那就讓你腦袋大了。

谷歌插件開發基礎

popup.html,option.html,background.js,content script,inject script

  1. 谷歌插件:實現多頁面間數據通信。

  2. 結構:

    • background:后臺腳本,處理持久數據。

    • popup:彈出界面。

    • content script:注入網頁,監聽消息。

    • inject script:處理業務邏輯。

細化解釋

谷歌插件通過多個組件協作實現功能。background腳本常駐后臺,popup提供用戶交互,content script訪問網頁DOM,inject script執行具體邏輯。多端通信涉及1:n關系(如插件到多個tab)。

background.js 特殊存在,為何谷歌稱它 serviceworker.js

  1. background.js 最早期 MV2 版本時,它就是一個獨立 page 和其他頁面沒啥區別,也即意味著原來谷歌瀏覽器需要給 background.html 提供 V8 運行環境,提供一些毫無用處的 DOM 全局變量的概念,但是 background.js 是個不可見的純提供服務的概念,追加 window 和 DOM 以及其他 html5 API 都沒有任何實質意義,還增加了性能開銷,這東西需要常駐以便為其他頁面提供服務;

  2. 那為何不把 background.html 做成一個簡單的 worker.js 呢?用的時候加載進來,不用的時候卸載掉?不就不存在性能損耗了嗎?不就可以讓谷歌瀏覽器同時支持上百個插件在運行了嗎?既然如此那必須干!于是 background.html 變成了 background.js,成為其他頁面通信中轉和數據增刪改查的服務;

谷歌插件的知識分層

  1. 知道谷歌插件由 popup.html,option.html,background.js,content script,inject script 5 個部分構成,其中 popup.html,option.html 是單頁面,content script 和 inject script 是組件化打包之后掛載到網頁的某個 div 上實現具體功能的存在,而 background.js 是負責通信中轉和數據增刪改查的概念,但以上概念,均可以通過 webpack 進行打包,且 target:"web",因為這 5 個概念都沒有偏離 web 下運行的范疇;

  2. 你要掌握的谷歌插件知識只有

    1. 5 個部分如何通信?

    2. content script 和 inject script 不共用一個作用域

    3. inject script 是與網頁共享一個 window 作用域

    4. content script 在復雜開發中,只充當通信中轉器,因為網頁環境無法直接跟某個插件直接通信,因為網頁和插件是 1:n 的概念,window.postmessage 到底發給哪個插件,瀏覽器不得而知,你必須有個 content script 接收這個消息才能保證網頁和插件的對應。

    5. 所有的數據持久化,必須通過 background.js,因為其他那 4 個都不能保證穩定性和對應性,例如 inject script 只能存到 localstorage 里面,是針對某個網頁的,與插件的存儲范圍不一樣。

    6. 了解 chrome.storage 所有增刪改查的使用方法;

  3. 至于 vuex,vue-router,vue 腳手架的使用壓根跟谷歌插件開發沒有關系,但若你一開始就從一個谷歌插件腳手架開始,迷惑也很正常;

Electron桌面應用開發

主進程 Main 和渲染進程 renderer

  1. 主進程:管理操作系統功能,類似于 background.js

  2. 渲染進程:類似于 popup.html option.html

    1. webview 渲染進程:類似于網頁+inject script

    2. 渲染進程的 preload.js:類似于網頁+content script

  3. 歸根結底,你只需要了解兩個概念,主進程和渲染進程,其他都是進一步的細化

細化解釋

Electron結合Node.js(主進程)和Chromium(渲染進程),支持跨平臺開發。主進程處理文件操作等,渲染進程負責界面展示,二者通過IPC通信。

主進程 Main

  1. node.js 環境下的運行腳本,electron.exe main.js 進行啟動

  2. 相當于 electron.js 程序運行到一定步驟后,使用 eval 函數,將 main.js 加載后執行

渲染進程 Renderer

  1. main.js 啟動 V8 環境構建出來的網頁環境,這個環境可以直接執行里面的 html 和 js,那說明 web 打包那一套又可以直接拿來用了,比如 vue 腳手架打包一個單頁面,直接丟進來就能用了

  2. 特殊的渲染進程 webview,會對具體的網頁進行渲染,通過將 Vue 打包成組件掛載到網頁的具體 div 上面,實現網頁功能的增強

進程間通信

核心概念

  1. 進程間通信(IPC):主進程與渲染進程間的消息傳遞。

  2. 服務間通信:主進程與外部服務的交互。

  3. 通信方式:監聽、發送消息、第三方中轉。

細化解釋

在Electron中,IPC通過ipcMain和ipcRenderer實現進程間通信。服務間通信可能涉及HTTP或WebSocket,復雜場景可借助消息隊列。

服務間通信

  1. 如果將所有的邏輯都放在 main.js 中,比如數據庫的增刪改查操作,就會讓主進程變得特別冗雜,冗雜就會導致出錯率增大,針對渲染進程和 webview 進程閃退,都會自動重啟,而主進程因為異常而閃退,則沒有任何機會重啟,因此降低主進程的代碼復雜量,非常必要。

  2. 但是將邏輯抽離出來,單獨形成 http 本地服務實現數據庫增刪改查,但隨之而來的問題,是主進程和 http 本地服務就無法通信了,此時可以將主進程和 http 本地服務都理解為獨立的服務,兩個服務之間可通過訂閱一個獨立的服務消息,實現消息的實時通信,例如 Redis 或者 zeroMQ

總結

看似非常復雜的大前端開發,最終無非就是在解決兩個問題:

  1. 解決不同層級下的通信問題

    1. 同頁面下的通信,例如 vue 的父子通信,或者 vuex

    2. 不同頁面下的通信,例如谷歌插件不同頁面的 chrome.runtime.sendMessage

    3. 不同進程下的通信,例如 electron 的 ipcRenderer.invoke

    4. 不同服務下的通信,例如 electron 的 main.js 和本地 http.exe

  2. 解決數據的存儲問題

    1. 同頁面下的數據存儲,例如 vuex 和 localStorage

    2. 不同頁面下的數據存儲,例如 chrome.storage

    3. 不同進程下的數據存儲,例如 config.json 和 sqlite

其他東西都是這兩大問題的具體細化過程,以及 web 方面的開發知識,如果你覺得很難,那基本是 web 本身的基礎就不牢靠,學得似是而非。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78758.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mixture-of-Experts(MoE)原理與在DeepSeek中的應用

MoE機制簡介 Mixture-of-Experts(MoE,混合專家)是一種“分而治之”的神經網絡架構思想。在MoE模型中,存在多個并行的子網絡,被稱為“專家”。每個專家通常擅長處理特定類型的輸入特征或知識片段。而在模型前向計算時,并非激活所有專家參與運算,而是通過一個專門的門控網…

SpringCloud學習筆記

個人學習進度&#xff1a;視頻跟敲筆記&#xff08;12天&#xff09; 學習視頻&#xff1a;尚硅谷微服務速通&#xff08;7小時左右課程&#xff09; 資源&#xff1a; 1.pdf&#xff1a;微服務pdf&#xff08;課程&#xff09;&#xff1a;https://pan.baidu.com/s/1g_TAuBjQ…

【大模型】Coze AI 智能體工作流從配置到使用實戰詳解

目錄 一、前言 二、工作流介紹 2.1 什么是工作流 2.2 工作流與對話流 2.2.1 兩者區別 2.3 工作流節點介紹 2.3.1 工作流節點說明 2.3.2 開始節點與結束節點 2.4 工作流入口 2.4.1 自定義智能體入口 2.4.2 從資源庫新增工作流 2.5 工作流使用限制 三、工作流配置與使…

Discord多賬號注冊登錄:如何同時管理多個賬戶?

Discord是許多人、特別是游戲玩家和社區管理者的重要溝通工具。隨著用戶需求的增長&#xff0c;越來越多的人開始在Discord上注冊多個賬號進行管理。例如&#xff0c;個人和工作賬號的區分&#xff0c;多個游戲社區的參與&#xff0c;或者通過不同的身份進行更靈活的社交互動。…

前端如何使用Mock模擬數據實現前后端并行開發,提升項目整體效率

1. 安裝 Mock.js npm install mockjs --save-dev # 或使用 CDN <script src"https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.0/mock-min.js"></script>2. 創建 Mock 數據文件 在項目中新建 mock 目錄&#xff0c;創建 mock.js 文件&#xff1a; // m…

AimRT 從零到一:官方示例精講 —— 二、HelloWorld示例.md

HelloWorld示例 官方倉庫&#xff1a;helloworld 配置文件&#xff08;configuration_helloworld.yaml? &#xff09; 依據官方示例項目結構自行編寫YAML配置文件 # 基礎信息 base_info:project_name: helloworld # 項目名稱build_mode_tags: ["EXAMPLE", &quo…

Tauri 跨平臺開發指南及實戰:用前端技術征服桌面應用(合集-萬字長文)

厭倦了笨重的Electron應用&#xff1f;想要構建體積小、性能高、安全可靠的跨平臺桌面應用&#xff1f;Tauri將是你的不二之選&#xff01;本教程帶你從入門到精通&#xff0c;掌握這個下一代桌面應用開發框架&#xff0c;并通過實戰APK分析工具項目&#xff0c;將理論知識轉化…

【LeetCode 熱題 100】矩陣置零 / 螺旋矩陣 / 旋轉圖像 / 搜索二維矩陣 II

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;LeetCode 熱題 100 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 矩陣矩陣置零螺旋矩陣旋轉圖像搜索二維矩陣 II 矩陣 矩陣置零 矩陣置零 用兩個數組分別標記行和列&#xff0c;判斷…

JavaScript進階(三十一): === 與 == 比較運算符

文章目錄 一、前言二、嚴格相等運算符 ()三、寬松相等運算符 ()四、推薦做法五、特殊情況 一、前言 在 JavaScript 中&#xff0c; 和 都是比較運算符&#xff0c;但它們在比較時有重要區別&#xff1a; 二、嚴格相等運算符 () 不進行類型轉換只有當兩個操作數的值和類型都…

HTML與安全性:XSS、防御與最佳實踐

HTML 與安全性&#xff1a;XSS、防御與最佳實踐 前言 現代 Web 應用程序無處不在&#xff0c;而 HTML 作為其基礎結構&#xff0c;承載著巨大的安全責任。跨站腳本攻擊&#xff08;XSS&#xff09;仍然是 OWASP Top 10 安全威脅之一&#xff0c;對用戶數據和網站完整性構成嚴…

安達發|破解醫療器械多BOM困局:APS生產計劃排產軟件解決方案

在醫療器械設備制造行業&#xff0c;生產計劃與排程&#xff08;Advanced Planning and Scheduling, APS&#xff09;系統的應用至關重要。由于醫療器械行業具有嚴格的法規要求&#xff08;如FDA、ISO 13485&#xff09;、復雜的多級BOM&#xff08;Bill of Materials&#xff…

組件輪播與樣式結構重用實驗

任務一&#xff1a;使用“Swiper 輪播組件”對自行選擇的圖片和文本素材分別進行輪播&#xff0c;且調整對應的“loop”、“autoPlay”“interval”、“vertical”屬性&#xff0c;實現不同的輪播效果&#xff0c;使用Swiper 樣式自定義&#xff0c;修改默認小圓點和被選中小圓…

【Stable Diffusion】文生圖進階指南:采樣器、噪聲調度與迭代步數的解析

在Stable Diffusion文生圖(Text-to-Image)的創作過程中,采樣器(Sampler)、噪聲調度器(Schedule type)和采樣迭代步數(Steps)是影響生成效果的核心參數。本文將從技術原理、參數優化到實踐應用,深入剖析DPM++ 2M采樣器、Automatic噪聲調度器以及采樣步數的設計邏輯與協…

第一天 車聯網定義、發展歷程與生態體系

前言 車聯網&#xff08;Internet of Vehicles, IoV&#xff09;作為物聯網&#xff08;IoT&#xff09;在汽車領域的延伸&#xff0c;正在徹底改變人們的出行方式。無論是自動駕駛、遠程診斷&#xff0c;還是實時交通優化&#xff0c;車聯網技術都扮演著核心角色。本文將從零…

foc控制 - clarke變換和park變換

1. foc控制框圖 下圖是foc控制框圖&#xff0c;本文主要是講解foc控制中的larke變換和park變換clarke變換將 靜止的 a b c abc abc坐標系 變換到 靜止的 α β αβ αβ坐標系&#xff0c;本質上還是以 定子 為基準的坐標系park變換 則將 α β αβ αβ坐標系 變換到 隨 轉…

軟件系統容量管理:反模式剖析與模式應用

在數字化時代&#xff0c;軟件系統的重要性日益凸顯。隨著業務的不斷拓展和用戶數量的持續增長&#xff0c;軟件系統的容量管理成為保障其高效運行的關鍵因素。《發布&#xff01;軟件的設計與部署》第二部分圍繞容量展開深入探討&#xff0c;系統地闡述了容量的定義、范圍&…

23種設計模式-行為型模式之解釋器模式(Java版本)

Java 解釋器模式&#xff08;Interpreter Pattern&#xff09;詳解 &#x1f9e0; 什么是解釋器模式&#xff1f; 解釋器模式是一種行為型設計模式&#xff0c;主要用于解釋和執行語言的語法規則。它定義了一個解釋器來處理特定的語言句法&#xff0c;并通過一個抽象語法樹來…

基于Springboot + vue + 爬蟲實現的高考志愿智能推薦系統

項目描述 本系統包含管理員和學生兩個角色。 管理員角色&#xff1a; 個人中心管理&#xff1a;管理員可以管理自己的個人信息。 高校信息管理&#xff1a;管理員可以查詢、添加或刪除高校信息&#xff0c;并查看高校詳細信息。 學生管理&#xff1a;管理員可以查詢、添加或…

五種機器學習方法深度比較與案例實現(以手寫數字識別為例)

正如人們有各種各樣的學習方法一樣&#xff0c;機器學習也有多種學習方法。若按學習時所用的方法進行分類&#xff0c;則機器學習可分為機械式學習、指導式學習、示例學習、類比學習、解釋學習等。這是溫斯頓在1977年提出的一種分類方法。 有關機器學習的基本概念&#xff0c;…

Blender插件 三維人物角色動作自動綁定 Auto-Rig Pro V3.68.44 + Quick Rig V1.26.16

Auto-Rig Pro是一個集角色綁定、動畫重定向和Unity、Unreal Engine的Fbx導出于一體的全能解決方案。最初作為我個人的內部角色綁定工具開發&#xff0c;我幾年前將其發布&#xff0c;并自那時起增加了許多新功能。 Blender插件介紹 Auto-Rig Pro插件簡介 Auto-Rig Pro是一個強…