我在苏州通商软件科技有限公司(http://www.6erp.cn)实习。我在MES项目部工作,主要职责是为客户实现生产进度看板(dashboard)
项目介绍
MES(Manufacture execute system)是应用于制造企业的软件系统。这个项目是B/S架构:HTML/Django/Mariadb。这个项目涉及到的技术包括:
- HTML5
- bootstrap 3
- jQuery
- django framework 1.8 and python 2.7
- MySQL 5.5
我的工作
我在团队中的角色,通过Django ORM读取生产数据,生成生产进度表。
遇到的困难点,及解决方案
Q:客户很难理解技术术语,如果能讲清楚我的想法?
A:客户不是软件开发专家,自然很难理解开发中的难点。我的解决方案是避开谈论开发问题,将问题集中在UI上。图形化的看板很容易让客户接受,我用最简单的纸和笔,画出UI草图,经过反复多次的确认,即可确认我的开发目标:要展现一个怎样的生产进度报表给客户。
Q:经常出现错误,如何选择调试方案?
A:由于这是B/S架构的系统,我很难用testcase来测试UI,大多数情况下我需要做功能测试。我的做法是:
- 建立一个本地的virtualhost,使用virtualbox + centos 7
- svn 最新版本的系统建立一个本地运行环境
- 调用云端的数据库服务器(只读)
- 本地测试页面
Q:大数据量的情况下,如何提升browser响应速度?
A:生产方面的数据量往往非常大,我在开发过程中通常发现一次刷新需要10-20s,显然是不可接受的。我尝试的方法如下:
- 表格分页。表格分页是很简单的,减少一次性数据读取量的方法。
- 减少DB读取次数。在Django中,使用filter和exclude来替代循环读取。先一次性读取一部分数据,然后通过算法来建立数据模型。
- 减少render中的循环。Django自带的template系统,容易嵌套循环。我发现嵌套三次以上的循环会让渲染速度降低80%。由于要显示一个表格,我用了简单的key-value模型,一个key代表一个生产指令,而value是个有顺序的list。
- 使用CACHE。Django自带了四种cache方案,我选用了基于file的cache方案,因为它最简单而且不依赖第三方库,可以快速实现。
Q:如何不影响团队其它成员的代码?
A:我们选用了SVN做代码版本管理。

我参与的其它项目
通过第三方登录系统 OAuth
这个MES产品允许用户通过第三方登录,我选用业内的标准OAuth 2.0。
调试服务器
服务器没有公网IP,操作系统是centos。我选用了内网穿透工具ngrok,它有免费的服务。
网友评论