前端架構(gòu)設(shè)計(jì)分析

水木資本網(wǎng) www.svmuu.com

SvmuuWeb

SvmuuWeb是針對PC端開發(fā)搭建的工程化架構(gòu)

目前系統(tǒng)平臺(tái)發(fā)現(xiàn)的問題

  • 三要素問題 :部分頁面的css,html,js混合在一起,不便于優(yōu)化,管理及后期維護(hù),需分離解耦。
  • 頁面加載優(yōu)化問題:有些頁面加載了不必要的js及css文件,還有多次http資源請求,造成加載速度慢,影響用戶體驗(yàn),浪費(fèi)網(wǎng)絡(luò)資源,需采用按需加載模式及壓縮合并相關(guān)資源文件。
  • 代碼重用問題: 部分功能頁面代碼重復(fù)很多,后期需要組件化,模塊化來解決這部分問題,便于管理和開發(fā)。
  • 變量問題:發(fā)現(xiàn)系統(tǒng)中多采用的是全局變量,這樣會(huì)造成命名沖突、代碼的脆弱性、難以預(yù)測、意外的全局變量不可控等問題。后期采用命名空間,閉包等來解決此類問題。
  • 文件結(jié)構(gòu)問題:后期規(guī)范這塊。
  • 依賴js庫版本管理:后期采用grunt前端工具來優(yōu)化版本管理,壓縮合并,打包等這一流程。
  • 未發(fā)現(xiàn)問題:在后期開發(fā)中遇到的問題,找合適解決方案。

目的----提升性能和編碼效率,便于管理及后期維護(hù)擴(kuò)展

工程化 | 模塊化 | 組件化 | 規(guī)范化

  • 提高前端開發(fā)效率 前端一些常見的任務(wù),如js庫的下載和管理、css文件的轉(zhuǎn)換、js文件合并壓縮、js測試的執(zhí)行等,要把這些跟業(yè)務(wù)無關(guān)的問題都在架構(gòu)層面處理掉。
  • 項(xiàng)目模塊化管理 采用AMD異步加載模式,按需及并行加載js庫,方便開發(fā),擴(kuò)展及維護(hù)。
  • 工程化打包 最終產(chǎn)出標(biāo)準(zhǔn)的前端模塊。

采用的技術(shù)棧

  • Grunt – Js任務(wù)管理工具,通過各種插件對項(xiàng)目進(jìn)行各種操作,比如文件轉(zhuǎn)換、運(yùn)行測試、打包部署等實(shí)現(xiàn)自動(dòng)化。
  • Bower – Js庫依賴管理工具。當(dāng)你需要jquery時(shí),不需要手動(dòng)下載,只需要執(zhí)行bower install jquery
  • RequireJs – Js庫加載管理,及模塊化支持。AMD異步加載模式,可以按需及并行加載js庫,可以把我們的代碼以模塊化的方式組織。
  • jquery – 一個(gè)優(yōu)秀的Javascript庫。它是輕量級(jí)的js庫 ,它兼容CSS3,還兼容各種瀏覽器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+).
  • backbone – 構(gòu)建javascript應(yīng)用程序的一個(gè)優(yōu)秀的類庫。他簡潔、輕量級(jí)、功能實(shí)在,采用MVC模式,本身提供了模型、控制器和視圖從而我們應(yīng)用程序的骨架便形成。
  • sass 一種CSS的開發(fā)工具,提供了許多便利的寫法,大大節(jié)省了設(shè)計(jì)者的時(shí)間,使得CSS的開發(fā),變得簡單和可維護(hù)。
  • 第三方插件 – ......

文件大小

 Backbone.js            6.5
 RequireJs               96kb
 jquery                  84kb

介紹說明

目錄介紹:

--架構(gòu)目錄

svmuu
    └── dist
    └── grunt
    │    ├── clean.js
    │    ├── connect.js
    │    ├── copy.js
    │    ├── watch.js
    │    ├── ...
    └── documents    
    └── node_modules
    └── src 
    └── .bowerc 
    └── bower.json
    └── Gruntfile.js 
    └── package.json
    └── README.md
  • dist 放置打包處理后的工程
  • grunt grunt各功能任務(wù)的配置
  • src 文件夾存放的是所有的的源代碼和其他靜態(tài)資源(比如圖片,iconfont)
  • documents 存放開發(fā)文檔相關(guān)
  • node_modules grunt依賴工具庫下載
  • Gruntfile grunt入口配置
  • README markdown文件

--開發(fā)環(huán)境目錄

    src
     └── data 
     └── frm
     │    ├── base
     │    │    ├── jquery
     │    │    ├── requirejs
     │    │    ├── backbone
     │    │    ├── ....
     │    │ 
     │    ├── static
     │    │    ├── css
     │    │    ├── js
     │    │    ├── images
     │    │    ├── html
     │    │ 
     │    ├── locale
     │    │    ├── ...
     │    │     
     │    ├── third-part
     │    │    ├── ...
     │    
     └── modules
     │    ├── chatroom
     │    │    ├── js
     │    │    ├── tpl
     │    │    ├──index.html
 

  • data 項(xiàng)目所需數(shù)據(jù)文件夾,如json,txt等格式的配置數(shù)據(jù)
  • frm 項(xiàng)目依賴文件
  • modules 模塊及頁面邏輯視圖文件夾
  • img 放置用到的圖標(biāo)
  • js 放置頁面js文件
  • locale 放置國際化資源文件
  • third-part 放置第三方插件

--打包目錄

/dist
    /frm
        /base
            /smft.min.js
            /common.js
            /require.min.js
        /static
            /css
            /images
            /js
            /temp
        /third-part
            /weditor
            /...
    /modules
        /common
            /workman
            /
        /chatroom
            /js
                /page.js
        /...
  • frm 項(xiàng)目頁面依賴文件
  • modules 項(xiàng)目功能模塊
  • common 公用模塊及組件
  • chatroom 具體功能模塊

安裝編譯

環(huán)境準(zhǔn)備

  • nodejs
  • ruby (api生成需要)

安裝設(shè)置環(huán)境

下載安裝node

安裝grunt命令

npm install -g grunt-cli

安裝bower命令

npm install -g bower --save

安裝工具插件

npm install -g copy --save
...       

安裝依賴js庫

npm install -g requirejs --save
...

運(yùn)行部署命令

- 運(yùn)行:grunt start
- 打包部署:grunt build
- ...

使用示例

典型的index頁代碼

<!DOCTYPE html>
<!--[if !IE]><!-->
<html>
<!--<![endif]-->
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="renderer" content="webkit">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <title>標(biāo)題</title>
    <link href="frm/libs/dist/css/svmuu-default.min.css" rel="stylesheet">
    <script type="text/javascript" src="frm/libs/dist/js/svmuu-all.min.js"></script>
</head>

<body>

</body>
<script data-main="svmuu/chatroom/js/main" defer="defer" src="frm/requirejs/require.js"></script>
</html>

Important

  1. <!DOCTYPE html>聲明是必須的,此聲明必須位于第一行,此聲明之前不能出現(xiàn)任何內(nèi)容(包括空格),否則瀏覽器無法檢測。
  2. 針對IE的注釋是必不可少的;
  3. X-UA-Compatible元標(biāo)簽的配置是必不可少的,尤其是針對IE的配置,可以強(qiáng)制IE使用“標(biāo)準(zhǔn)模式”渲染頁面,而不是以“怪異模式”;
  4. renderer元標(biāo)簽用來兼容國產(chǎn)的一些垃圾雙核瀏覽器,如360等,強(qiáng)制它們以chrome內(nèi)核渲染頁面;
  5. viewport元標(biāo)簽用來支持響應(yīng)式設(shè)計(jì);
  6. svmuu-default.min.css 為系統(tǒng)平臺(tái)公用css壓縮文件;
  7. svmuu-all.min.js 為系統(tǒng)平臺(tái)公用js壓縮文件;
  8. data-main 為模塊化加載的入口文件配置;
  9. ...

組件庫

  • 第三方組件
  • 自定義組件
  • 另:盡量引用成熟穩(wěn)定的第三方插件以及開發(fā)自己的自定義組件。

優(yōu)化方面

  • 盡可能的減少http請求數(shù)
  • 將js和css獨(dú)立成外部文件
  • 壓縮js,css,圖片
  • Css放在頁面的上方,js放在頁面下方
  • 移除重復(fù)的腳本
  • ...

編程規(guī)范方面

  • 參照js編程規(guī)范文檔;
  • 模塊化定義規(guī)范;
  • 組件編寫規(guī)范;
  • css樣式規(guī)范;
  • 注:規(guī)范文檔后面有文檔產(chǎn)出。

隨著公司業(yè)務(wù)的增加及成熟,會(huì)持續(xù)調(diào)整并完善前端框架,優(yōu)化前端開發(fā)環(huán)境及業(yè)務(wù)合理化,代碼可維護(hù)性,擴(kuò)展性,網(wǎng)站性能等方面持續(xù)改進(jìn)。

《未完待續(xù)...》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,353評(píng)論 25 708
  • 前端集成解決方案要求: 模塊化開發(fā)。最好能像寫nodejs一樣寫js,很舒服。css最好也能來個(gè)模塊化管理! 性能...
    Www劉閱讀 3,058評(píng)論 1 20
  • 比起“我懂你”“我真切地了解你所思所想”我覺得更讓人感動(dòng)的是“我無法真正地了解你,我也無法和你感同身受,但是我在盡...
    Effy渣沸閱讀 147評(píng)論 0 0
  • 2017-6-24 夏至過后,便是滂沱的雨季。從南到北,下個(gè)沒完。身上也跟黏了漿糊似的,哪兒哪兒都不自在。在潮濕的...
    榕嬤嬤閱讀 332評(píng)論 0 0
  • 眼看著夏天結(jié)束了秋天快要來了。告別了夏天炎熱期待著秋天的秋高氣爽和碩果累累。 十一小長假的到來讓我們happy得不...
    qsf閱讀 595評(píng)論 1 0