前端架构设计分析

水木资本网 www.svmuu.com

SvmuuWeb

SvmuuWeb是针对PC端开发搭建的工程化架构

目前系统平台发现的问题

  • 三要素问题 :部分页面的css,html,js混合在一起,不便于优化,管理及后期维护,需分离解耦。
  • 页面加载优化问题:有些页面加载了不必要的js及css文件,还有多次http资源请求,造成加载速度慢,影响用户体验,浪费网络资源,需采用按需加载模式及压缩合并相关资源文件。
  • 代码重用问题: 部分功能页面代码重复很多,后期需要组件化,模块化来解决这部分问题,便于管理和开发。
  • 变量问题:发现系统中多采用的是全局变量,这样会造成命名冲突、代码的脆弱性、难以预测、意外的全局变量不可控等问题。后期采用命名空间,闭包等来解决此类问题。
  • 文件结构问题:后期规范这块。
  • 依赖js库版本管理:后期采用grunt前端工具来优化版本管理,压缩合并,打包等这一流程。
  • 未发现问题:在后期开发中遇到的问题,找合适解决方案。

目的----提升性能和编码效率,便于管理及后期维护扩展

工程化 | 模块化 | 组件化 | 规范化

  • 提高前端开发效率 前端一些常见的任务,如js库的下载和管理、css文件的转换、js文件合并压缩、js测试的执行等,要把这些跟业务无关的问题都在架构层面处理掉。
  • 项目模块化管理 采用AMD异步加载模式,按需及并行加载js库,方便开发,扩展及维护。
  • 工程化打包 最终产出标准的前端模块。

采用的技术栈

  • Grunt – Js任务管理工具,通过各种插件对项目进行各种操作,比如文件转换、运行测试、打包部署等实现自动化。
  • Bower – Js库依赖管理工具。当你需要jquery时,不需要手动下载,只需要执行bower install jquery
  • RequireJs – Js库加载管理,及模块化支持。AMD异步加载模式,可以按需及并行加载js库,可以把我们的代码以模块化的方式组织。
  • jquery – 一个优秀的Javascript库。它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+).
  • backbone – 构建javascript应用程序的一个优秀的类库。他简洁、轻量级、功能实在,采用MVC模式,本身提供了模型、控制器和视图从而我们应用程序的骨架便形成。
  • sass 一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护。
  • 第三方插件 – ......

文件大小

 Backbone.js            6.5
 RequireJs               96kb
 jquery                  84kb

介绍说明

目录介绍:

--架构目录

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各功能任务的配置
  • src 文件夹存放的是所有的的源代码和其他静态资源(比如图片,iconfont)
  • documents 存放开发文档相关
  • node_modules grunt依赖工具库下载
  • Gruntfile grunt入口配置
  • README markdown文件

--开发环境目录

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

  • data 项目所需数据文件夹,如json,txt等格式的配置数据
  • frm 项目依赖文件
  • modules 模块及页面逻辑视图文件夹
  • img 放置用到的图标
  • 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 项目页面依赖文件
  • modules 项目功能模块
  • common 公用模块及组件
  • chatroom 具体功能模块

安装编译

环境准备

  • nodejs
  • ruby (api生成需要)

安装设置环境

下载安装node

安装grunt命令

npm install -g grunt-cli

安装bower命令

npm install -g bower --save

安装工具插件

npm install -g copy --save
...       

安装依赖js库

npm install -g requirejs --save
...

运行部署命令

- 运行: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>标题</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>声明是必须的,此声明必须位于第一行,此声明之前不能出现任何内容(包括空格),否则浏览器无法检测。
  2. 针对IE的注释是必不可少的;
  3. X-UA-Compatible元标签的配置是必不可少的,尤其是针对IE的配置,可以强制IE使用“标准模式”渲染页面,而不是以“怪异模式”;
  4. renderer元标签用来兼容国产的一些垃圾双核浏览器,如360等,强制它们以chrome内核渲染页面;
  5. viewport元标签用来支持响应式设计;
  6. svmuu-default.min.css 为系统平台公用css压缩文件;
  7. svmuu-all.min.js 为系统平台公用js压缩文件;
  8. data-main 为模块化加载的入口文件配置;
  9. ...

组件库

  • 第三方组件
  • 自定义组件
  • 另:尽量引用成熟稳定的第三方插件以及开发自己的自定义组件。

优化方面

  • 尽可能的减少http请求数
  • 将js和css独立成外部文件
  • 压缩js,css,图片
  • Css放在页面的上方,js放在页面下方
  • 移除重复的脚本
  • ...

编程规范方面

  • 参照js编程规范文档;
  • 模块化定义规范;
  • 组件编写规范;
  • css样式规范;
  • 注:规范文档后面有文档产出。

随着公司业务的增加及成熟,会持续调整并完善前端框架,优化前端开发环境及业务合理化,代码可维护性,扩展性,网站性能等方面持续改进。

《未完待续...》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,287评论 25 707
  • 前端集成解决方案要求: 模块化开发。最好能像写nodejs一样写js,很舒服。css最好也能来个模块化管理! 性能...
    Www刘阅读 2,991评论 1 20
  • 比起“我懂你”“我真切地了解你所思所想”我觉得更让人感动的是“我无法真正地了解你,我也无法和你感同身受,但是我在尽...
    Effy渣沸阅读 141评论 0 0
  • 2017-6-24 夏至过后,便是滂沱的雨季。从南到北,下个没完。身上也跟黏了浆糊似的,哪儿哪儿都不自在。在潮湿的...
    榕嬷嬷阅读 291评论 0 0
  • 眼看着夏天结束了秋天快要来了。告别了夏天炎热期待着秋天的秋高气爽和硕果累累。 十一小长假的到来让我们happy得不...
    qsf阅读 567评论 1 0