時間:2023-07-23 06:18:01 | 來源:網(wǎng)站運營
時間:2023-07-23 06:18:01 來源:網(wǎng)站運營
三天打造一款全棧簡易視頻直播網(wǎng)站(一):從前端談項目架構、接口設計、前后端設計、node.js中間層封裝、項目測試、性能優(yōu)化以及運維部署。├── build 網(wǎng)站上線目錄├── coverage 覆蓋率測試結果├── src 網(wǎng)站開發(fā)目錄├── tests 項目測試目錄├── .babelrc babel配置文件├── .gitignore git有關├── gulpfile.js gulp配置文件├── jest.config.js jest配置文件├── readme.md├── package.json├── webpack.config.js webpack開發(fā)配置文件└── webpack.production.config.js webpack上線配置文件
MIMETYPE:multipart/x-mixed-replace;boundary=frame
傳輸?shù)囊曨l流的URL,還有一份是存儲識別結果的資源數(shù)據(jù)庫,我需要做的,便是將視頻流展示,將識別結果以表單形式展示。Field Typepeople_id INT (P)name VARCHAR(20) 自定義名字age INTsex INTpic_url VARCHAR(50) 首次在攝像頭范圍內(nèi)識別到某人員的視頻幀URLvideo_url VARCHAR(50) 某人員在攝像頭內(nèi)出現(xiàn)時候的視頻last_time DATE 某人員在攝像頭中最后出現(xiàn)的時間
那么,我們先在本地的MySQL中建立一個名為video
的數(shù)據(jù)庫,并且在該數(shù)據(jù)庫下建立一張名為info
的數(shù)據(jù)表,具體SQL代碼參考項目根目錄下的info.sql
文件,PHP接口層封裝參考項目build/info.php
文件,這里大家會好奇我為什么把PHP文件放在了一個名字叫build
的文件夾里,大家先別著急,一會就會給大家講解。這里需要特別提及一下,因為這是我在開發(fā)機上搭建的模擬服務器環(huán)境,所以在PHP里我就直接用root去鏈接了,還有最后的輸出,我們通過json_encode()
轉(zhuǎn)化成了字符串,所以在前端接收數(shù)據(jù)時一定要記得JSON.parse()
。menu-btn
,click之后會跳出側(cè)邊導航欄,里面有兩個li
,用于切換右邊的content-box
里面的內(nèi)容?!耙曨l廣場”對應的content-box
內(nèi)有四個item
,用于展示我們的視頻(后端實際上給了我四個視頻流的URL),“出入信息”對應的content-box用于展示我們的數(shù)據(jù)庫信息。整體的布局我使用的是flex
,主要原因就是兩個——好用。其實本來想用grid
的,但發(fā)現(xiàn)太久沒用了生疏了,而且還有一些新特性還是在測試階段(說白了就是筆者好多地方忘了怎么寫了),隨意最后毅然決然了選擇了flex
。之所以這樣布局,一是符合現(xiàn)在流行的簡約布局,最關鍵的是這樣的布局方式更方便后期我們做響應式。PS:響應式的部分不在我們的三天內(nèi)容內(nèi),以后如果有需要我會繼續(xù)更新并深入介紹。$ npm init
初始化我們的項目,并在項目根目錄下新建一個build
(或者dist
)目錄用于存放我們的項目上線文件。新建一個src
目錄用于存放我們的項目開發(fā)文件,在src
目錄內(nèi)新建一個public
(或static
)目錄用于存放我們的靜態(tài)資源,新建一個views
目錄用于存放我們的靜態(tài)頁面。src
和build
的關系便是:src
目錄下的源文件經(jīng)過編譯壓縮等操作后將會生成到我們的build目錄下,最后我們只需要將build
內(nèi)的文件復制到上線服務器上運行就可以了,也就是說,build
文件內(nèi)存放的才是我們最終的“產(chǎn)品”。src
目錄內(nèi)的views
目錄下新建一個index.html
作為我們的靜態(tài)首頁并開始實現(xiàn)之前的UI設計,代碼因為已經(jīng)托管在了github上了,這里我就不作介紹了,大家爭取自己嘗試去復現(xiàn)一下項目,本項目的代碼僅供參考。link
或者script
標簽,但如果,當我們的項目越來越龐大,需要引入的文件越來越多的時候,那我們就得一直往html文件里添加標簽,浪費人力不說,頁面布滿了link
和script
也不合適。作為前端開發(fā)的基本素養(yǎng),這里我就視讀者掌握了CommonJS,AMD,CMD以及ES6 Module的相關知識,在本文就不作提及,之后的代碼我們都將以模塊化的形式編寫。webpack.config.js
(開發(fā)版),webpack.production.config.js
(上線版)。開發(fā)版用于開發(fā)階段我們的調(diào)試工作,上線版用于項目最后我們生成上線文件時的打包工作。其實兩份文件的內(nèi)容相差無幾,唯一的區(qū)別便是:相比與開發(fā)版的webpack配置文件,我們會在上線版的配置文件中增加代碼壓縮等功能,以實現(xiàn)我們的資源最大性能優(yōu)化。.es
的形式,所以在配置文檔里。我們應當在babel-loader
里的匹配項中加上/.es
publicPath: '/'
一行,增加之后插入HTML文件中的script
和link
標簽的src
屬性值的開頭會增加一個‘/’字符,表示在根目錄下的路徑,目的是為了配合koa中的靜態(tài)資源配置。如果你有CDN服務器,那就可以把publicPath填上你的CDN IP。$ npm i webpack@3
否則會報錯),目的是提取打包后JS文件中的公共代碼,因為每次我們引入一個模塊(說白話就是require一次),webpack都會往打包后的文件添加這個模塊里的代碼,當項目的體積越來越大時,我們不免需要引入許多相同的模塊,這樣就會產(chǎn)生大量重復的代碼,造成資源浪費,通過這一插件就能解決這一問題。clean-webpack-plugin
這款插件,目的是清空前一次編譯后的文件。因為我之前提到過,我在JS和CSS文件名后自動添加了MD5戳,由于不會出現(xiàn)重名沖突,所以前一次編譯的文件不會被替換,每次編譯后都會增加一份文件,這是我們所不想看到的。運用這款插件的目的就是清空build
目錄下的pubilc
和views
內(nèi)的所有文件。package.json
文件,這里存放著我們項目的一些基本信息還有依賴文件,大家結合之前我們配置好的webpack,可以在文件中的"scripts"
屬性中加入以下兩行代碼:"dev": "webpack-dev-server --open"
"build": "set NODE_ENV=production && webpack --config ./webpack.production.config.js --progress"
webpack.config.js
文件內(nèi)的devServer
屬性值。而第二行代碼,是以webpack.production.config.js
內(nèi)的配置編譯項目,加入了這兩行代碼之后,我們在編譯上線文件的時候就不需要敲一長串Shell啦,直接$ npm run build
就OK了。package.json
的作用不僅僅局限于制定我們的快捷命令,大家翻到文件的下方,會看到這兩個屬性:"devDependencies"
、"dependencies"
,前者是指開發(fā)環(huán)境下的項目依賴,諸如我們的打包工具webpack和后面將提到的gulp,還有我們的測試插件jest和supertest,這些都會在后兩天的項目任務中深入介紹,而后者是指上線環(huán)境下的項目依賴,諸如我們的koa還有一系列koa引申的插件。在node環(huán)境中,我們使用命令$ npm i
將會自動安裝所有的依賴,而使用$ npm i -S
和$ npm i -D
將會分別安裝上線環(huán)境所需的依賴和開發(fā)環(huán)境所需的依賴,之所以這么區(qū)分的作用,我們將會在第三天的服務器上線任務中詳細介紹,現(xiàn)在我們需要知道的是,在安裝相關依賴時,你必須事先判斷它是屬于開發(fā)環(huán)境下的還是上線環(huán)境下的,并將他們區(qū)分開來,使用不同的安裝命令。$ npm run build
并在build
目錄下找到你編譯好的index.html
文件,打開看看是不是你設計好的樣式,還有正常執(zhí)行的業(yè)務邏輯。如果出現(xiàn)了BUG,可以使用chrome的開發(fā)者工具打斷點,或者在源代碼中加上debugger
關鍵字(這個關鍵字的效果就相當于我們平時在開發(fā)者工具里打的斷點)。關鍵詞:直播,視頻,簡易,打造
微信公眾號
版權所有? 億企邦 1997-2025 保留一切法律許可權利。