成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

開發 前端
作為一名前端,開發web頁面是我們的本職工作。在完成一個頁面開發的過程中,保存代碼然后手動刷新頁面查看效果,這樣的動作需要重復無數次,雖然一次這樣的動作可能只要花費幾秒鐘的時間,但是次數多了也挺浪費時間的。

作為一名前端,開發web頁面是我們的本職工作。在完成一個頁面開發的過程中,保存代碼然后手動刷新頁面查看效果,這樣的動作需要重復無數次,雖然一次這樣的動作可能只要花費幾秒鐘的時間,但是次數多了也挺浪費時間的。

社區有一款工具可以幫助前端在每次保存完代碼后自動刷新瀏覽器頁面——livereload。

自動刷新工具

目前有很多的工具都內置了自動刷新功能,以下列舉幾個常見的。

  1. 瀏覽器插件liveReload
  2. webpack的webpack-dev-server模塊
  3. gulp的gulp-livereload模塊
  4. grunt的grunt-livereload模塊
  5. 全局模塊puer

這樣的工具有很多,個人覺得最方便的要數puer,只要全局安裝并在工程根目錄下運行即可,效果如下。 

圖1

 

自動刷新原理

社區里大多數的自動刷新工具都是使用livereload實現的,下面我們就分析一下它的內部原理是什么?

場景:當在編輯器中修改文件內容并保存時,瀏覽器自動刷新頁面;

分析:監聽文件的修改,并且把修改的動作通知瀏覽器。監聽操作可以用chokidar模塊完成,通知操作可以用websocket來做。

根據以上的分析,我們要搭建一個小服務器,這個服務器可以訪問被修改的文件、監聽文件修改以及與瀏覽器通信。

瀏覽器這邊通過websocket接收服務器傳來的指令來刷新頁面內容,頁面刷新的邏輯可以封裝在livereload.js中,這是一個單獨的js文件,可以由html文件引入。

整個流程如下圖。

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖2

自動刷新實現

1、服務端代碼實現

1)搭建服務器

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖3

啟動圖3中的服務,通過localhost:3000可以訪問圖左側html和css兩個文件,這兩個文件代表需要開發的代碼。

2)再搭建一個服務器,用于頁面訪問livereload.js

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖4

此處用于圖7中html引入livereload.js。

3)搭建websocket服務器

本文搭建websocket服務器不再一步步手寫,而是直接采用ws模塊,如下:

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖5

圖5中封裝了一個send方法,用于向頁面發送刷新通知。

4)監聽代碼文件的變化

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖6

chokidar模塊監聽代碼文件的變化,其監聽的目錄和參數配置可以自定義。filterRefresh調用了圖5中定義的send函數,用于發送指令,指令的數據格式也可以自定義,只要頁面能解析出來即可。

2、瀏覽器端代碼實現

1)開發頁面中引入livereload.js

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖7

這一步在webpack、fis3等構建工具中都是自動化插入的,無需手動操作。

2)livereload.js中實現websocket連接

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖8

此處頁面接收來自服務器的指令,然后把它解析出來執行即可。核心指令當然是reload,但是不同的資源刷新的方式有所不同,下面會詳細介紹。

3)直接刷新頁面

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖9

4)刷新chrome插件

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖10

5)更新img標簽中的圖片

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖11

document.images可以獲取文檔中所有圖片的dom對象,將每個圖片地址加一個版本號即可刷新。

這里獲取的圖片可能不是本次修改的,那么如何獲取當前被修改的文件呢?

如果圖片是自動刷新服務的資源,那么它的src應該是localhost:3000/圖片的路徑/圖片名稱。

圖6中websocket傳給頁面的數據中包含了文件在代碼目錄下的路徑,如果被監聽的目錄下的圖片被修改,那么它的路徑(/home/用戶名/圖片的路徑/圖片名稱)和src會有一段重合的部分,反之,就不會有重合的部分。這里就用這個小技巧來排除不需要更新的圖片。

6)更新行內樣式中的背景圖

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖12

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖13

document.querySelectorAll(`[style*=${selector}]`)可以獲取擁有style屬性的dom,然后通過dom對象的style屬性可以獲取style屬性包含的樣式,再通過具體的css樣式屬性就可以獲取具體的樣式的值,最后通過正則將背景圖匹配出來并加上版本號。

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖14

7)更新內嵌和外鏈樣式中的背景圖

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖15

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖16

document.styleSheets可以獲取所有的內嵌和外鏈樣式,再通過cssRules和style屬性可以獲取一組樣式表,剩下的處理就和圖13一致了。

注意:如果遇到了import或者媒體查詢media,需要做遞歸獲取樣式表,這里就不再嗷述了。

8)更新外鏈樣式(不包含import)

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖17

document.getElementsByTagName('link')可以獲取所有的外鏈css,通過path和href的對比可以過濾出本次修改的css文件,然后將外鏈css的href加上版本號并重新生成一個link標簽插在之前外鏈樣式之后,待新css資源加載完成就可以刪除之前的css資源了。

8)更新外鏈中import中的樣式

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖18

document.querySelectorAll('link')[i].sheet.cssRules[i].href 這樣的寫法可以獲取到import進來的css的url。

前端開發還在手動刷新頁面?手把手教你搭建一個自動刷新工具

圖20

總結

瀏覽器自動刷新功能需要服務端和瀏覽器端配合實現,服務端的實現比較簡單,最大的難點在于瀏覽器端對css的操作。如果每次只是暴力的刷新整個頁面,不考慮對精準資源的刷新,可能無法保持頁面中已存在的一些狀態。

現在有條件的公司一般都會給程序員配備一臺mac加一個大屏顯示器,就像下面這樣。

[[286125]]

圖21

一個屏幕打開編輯器,另外一個屏幕打開瀏覽器,保存代碼后只要轉一下頭就能看見頁面刷新,不用再在一個屏幕上切來切去,開發效率直線上升。

自動刷新的原理也是一個面試題,如果你理解了上面的實現原理,以后再碰見這道題,肯定so easy! 

 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2019-08-26 09:25:23

RedisJavaLinux

2025-06-12 09:42:08

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2021-06-22 10:43:03

Webpack loader plugin

2021-02-26 11:54:38

MyBatis 插件接口

2011-03-25 12:45:49

Oracle SOA

2024-11-29 09:41:17

2024-11-26 11:59:06

2022-06-28 15:29:56

Python編程語言計時器

2023-03-22 09:00:38

2010-07-06 09:43:57

搭建私有云

2010-07-06 09:38:51

搭建私有云

2022-01-04 08:52:14

博客網站Linux 系統開源

2017-07-19 13:27:44

前端Javascript模板引擎

2020-07-27 10:15:51

LinuxJenkins命令

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2024-03-05 18:27:43

2024-04-02 08:58:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线观看一区二区 | 亚洲+变态+欧美+另类+精品 | 99精品视频免费在线观看 | 五月免费视频 | 日本在线免费观看 | 高清不卡毛片 | 日韩伦理一区二区 | 欧美激情综合色综合啪啪五月 | 这里只有精品999 | 国产97在线看| 国产精品色婷婷久久58 | 青青草av在线播放 | 欧美成人a∨高清免费观看 91伊人 | 亚洲精品一区二区三区 | 中文字幕在线一区二区三区 | 日韩在线观看中文字幕 | 欧美日韩在线一区二区三区 | 成人在线视频网 | 免费黄色日本 | av一区二区三区四区 | 欧美网站一区二区 | 91中文字幕在线观看 | 日韩av成人| 欧美一级在线观看 | 男女精品久久 | 国产精品中文字幕在线 | 国产小视频在线观看 | 91在线视频免费观看 | 欧美日韩在线免费观看 | 日韩成人在线网站 | 亚洲成人999 | 亚洲免费成人 | 一区二区三区视频在线观看 | 啪啪av | 精品亚洲一区二区三区 | 久久91精品国产一区二区 | 精品久久久久久久久久久 | 成人三区 | 亚洲 中文 欧美 日韩 在线观看 | 欧美性大战久久久久久久蜜臀 | a级片www |