Clover周报模块 -- 开发总结
2014年7月8日 00:16:05
一、切图
这次开发,切图花了不少时间,样式是用scss写的,第一次用,不过用着用着就发现它的强大,层级、作用域、重用等都非常的方便,还有考拉神器,用着真是爽!不过,改起样式来就蛋疼了,通过浏览器看到的是css样式,然后从css里找到它是scss的第几行,多了一层转折,不能通过浏览器直接看到scss的样式,略感麻烦。

二、布局
整个周报页面是在一张HTML页面上实现的,用Ajax请求各种数据,然后展现到页面的不同位置。因为神框架Avalon的存在,数据的处理变得简单、直观,所以我只需要布一个简单、直观的局就行了。 曾考虑过用表格布局,不过直接被老大否掉了(原因:古老,效率低);因为布局时,页面总有小改动,多一列少一行的,所以就没有去用百分比计算它的宽度(包括用calc),也不想套好几个div把层级弄的无比复杂,最后采用的-webkit-box这个样式来布的局。 但,-webkit-box也是一个不靠谱的样式,坑爹之处在于如果一个有内容,其他没内容,内容会自己独立出来,然后所有有-webkit-box-flex样式的标签来瓜分空间,如图这种坑爹的情况: 一张图(网页在公司,回头截个图) 然后就果断抛弃-webkit-box,用display:flex;来布的局,这个样式硬,不会受内容影响,就它了!

三、模式
使用的MVVM这种设计模式,完全简化DOM操作,交互更加便利。

四、模块
js用的MVVM框架Avalon,除了一直都带的左侧菜单模块(我的前任JS做的,主要用来导航到各个模块,但是没有WordPress这种“收起菜单”的功能),其他内容都由我一个人完成。 主要功能分为“写周报”和“看周报”,将整个body作为一个vm对象,所有数据和方法都绑定在这个对象上(写完之后,感觉这么做有些不太好,一个臃肿的对象,会给浏览器带来更大的处理压力,但当时对于不同vm对象间的通信掌握并不好,所以所有内容全堆在一起了,耦合度高,不利于维护,之后的开发要注意拆分),利用路由器系统进行通信,后期还会加入canvas图表。

五、路由
路由(router)系统是我除MVVM外又一个新接触的东西,通过控制浏览器hash来判断内容的展示,灰常强大与实用。利用路由器系统可以更加便利的进入到正确的内容中,而不是只能从主页面一步一步找到项目所在的位置,也不用像PHP一样?后面加一堆东西来判断,完全由前端控制,用得能不能不要这么爽,不过也有一些开发中实用路由遇到的小问题,会总结一下写一篇博文出来。

六、数据
数据这里,主要由后台进行数据库的各种操作,感觉主要问题在于本周和上周周报的分开存储,本来一个周报需要包含上周完成和本周计划,但这两者都可以不写东西,而传到后台的内容都是分开的,所以到了“看周报”那里经常出现一个周报只有半份(有本周没上周,或有上周没本周)这种状态,非常蛋疼。 然后说一下“看周报”这里的数据结构问题,通过路由器获取的周数和当前浏览部门的id来请求后台,但返回的数据很大(将近200kb)很复杂(7维到8维数组),而只将其到一个时间-部门-项目-周报-细节这样的表格里,在没有简化数据结构时,有时页面的加载的速度(主要是Avalon框架循环数据来创建DOM)会打到惊人的2分钟,让我们老大的老大感到灰常不爽,而后台奈落大汉在忙别的,只能自己优化了。 主要通过ECMA5.0中数组的新方法forEach(再也不用写for循环了),首先将时间单摘出来,然后将大数组简化为部门-项目-细节这样的3维数组(只展示3周周报,将这三周作为项目的属性week0,week1,week2),去除原先大数组中那一堆个用不到的属性,瞬间,页面的加载10秒内就能完成,数据结构真是利器啊,难怪大牛们都说,算法、数据结构优于一切,终于切身的体会到了。 经过将近5周的开发,一个月的辛苦加班,终于在这周一之前上线了(老大还带我们去吃了铁板烧大餐,真是爽啊),而且公司提交周报的情况不错,大佬们也都发出好评,一些自豪感油然而生。不过只把写和看的一些关键功能做出来了,还差统计这里没有完成,需要用到百度的Echart来展示图表,而且还有bug要改,细节要优化,一些开发中的收获也需要整理,未来的日子依旧充实,充满挑战,不过最开心的还是终于不用加班了,欧耶!

七、客户端
客户端使用node-webkit开发,详见使用node-webkit开发Clover桌面客户端的一些记录(一)。

Clover周报模块 -- 开发总结的更多相关文章
- AngularJS多模块开发
angularJS中的多模块开发是指多个module模块开发,步骤为: 1. 确定主模块 var app=angular.module('myApp',[]); 2. 其他的子模块添加到主模块后 ...
- js模块开发(一)
现在嵌入页面里面的javascript代码越来越复杂,于是可能依赖也越来越严重,使用别人开发的js也越来越多,于是在理想情况下,我们只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 于是j ...
- seajs实现JavaScript 的 模块开发及按模块加载
seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--模块开发
之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了大家的评论,有以下几个问题: 1.希望有更多的文档说明. 2.希望介绍下Orchard的 ...
- js 模块开发之一(模块开发价值)
首先引用我们的今天的主角 ----<前端模块化开发的价值> 1,前端开发最常见的两个问题 ---命名冲突和文件依赖 2,对于命名冲突的基本解决办法就是学习其他语言的习惯,添加命名空间 va ...
- nginx模块开发篇 (阿里著作)
背景介绍 nginx历史 使用简介 nginx特点介绍 nginx平台初探(100%) 初探nginx架构(100%) nginx基础概念(100%) connection request 基本数据结 ...
- Drupal8开发教程:模块开发——创建新页面
之前我们已经通过<Drupal8开发教程:认识.info.yml文件>对模块的YAML文件有了了解,今天我们来看如何通过模块开发的方式添加一个新的页面. 在 Drupal 7 中,通过模块 ...
- SpringMvc+jquery easyui模块开发7步骤
搞了一段java的开发,总结出模块开发经验: SpringMvc+jquery easyui模块开发7步骤:1) 数据表(table): 定义表结构并创建数据表t_use ...
随机推荐
- iOS开发工具——统计Crash的工具Crashlytics-备用
简介 Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具.Crashlytics的使用者包括:支付工具Paypal, 点评应用Yelp, 照片分享应用Pa ...
- HttpCookie
参考 : http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 上文结尾有提到一个说法 4. HttpRequest.Cooki ...
- 在QT程序中使用cout和cin
1先输入10个数字,再输出. #include <QtCore/QCoreApplication> #include <QtCore/QList> #include <Q ...
- BZOJ3396: [Usaco2009 Jan]Total flow 水流
3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 45 Solved: 27[Sub ...
- 2015第27周三Java内存模型
自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果不使用或者不常常回顾,那么还不是自己的知识. 要认识java线程安全,必须了解两个主要的点:java的内存模型,java的 ...
- centos 添加用户
测试环境:CentOS 6.0 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 #passwd tommy // ...
- Windows服务器Pyton辅助运维--02.远程重启IIS服务器
Windows服务器Pyton辅助运维 02.远程重启IIS服务器 开发环境: u Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u 运维服务器: Pyth ...
- Android调用第三方应用
Intent intent=new Intent(); //包名 包名+类名(全路径) intent.setClassName("com.qn.app.store", " ...
- HDU_2048——全错位排列递推公式
Problem Description HDU 2006'10 ACM contest的颁奖晚会隆重开始了! 为了活跃气氛,组织者举行了一个别开生面.奖品丰厚的抽奖活动,这个活动的具体要求是这样的:首 ...
- 带’*’号字符串的匹配
目标: 判断源字符串中是否含有指定子串,子串可能会有*号通配符. 初步测试没问题.记录下来.后面要是有问题再来纠正. #include <string> using namespace s ...