• 一些总结与思考(聊聊最近,希望对大家有所帮助)


      已经有一个月没有更博文了,不是忘了,而是这一个月实在是忙的没有时间,也没有心情来花上这一个小时。今天,只是个普通的周五,忙完了一周的工作,半夜里突然想写点什么。

      研一开学前,我就一直在思考,研究生生活应该怎样度过才算有意义?专研实验室项目?找个喜欢的实习?或是潜心科研?作为一个对技术满怀热情的工科男,我一直对互联网技术有很大的兴趣,在本科阶段学习计算机专业基础之余,还自学了一些热门技术,比如:HTML5、CSS3、Java、Scala、Node.js等。

      在本科毕设阶段,我做的是与大数据相关的《用Spark并行框架实现基于微博用户数据的Pagerank算法》,当时接触了Scala这门函数式编程语言,因为Scala封装了所有的Java类库,使用起来也十分便捷。由于本科接触了一段时间的Java,本以为以后会将方向定在大数据与云计算上。但是,由于考研成绩不佳,没能如愿地进入到做毕设的实验室,而是调剂到了网研院另一个中心。由于当年报考我校竞争激烈,就没想太多,有学上就已经很幸福了!

      开学后,了解到按照往年惯例,实验室研一不进项目组,主要学习专业课程,不允许出去实习,于是就想干一些项目来充实一下生活。在同学的引荐下,我加入到了一个年轻的创业团队中,大家都是北邮的学生,怀揣着对梦想的追求,一切都是那么充满希望。印象最深刻的是,CEO同学生动而满怀热情地介绍了我们要做一件多么牛逼的事,我的第一感觉是想法很独特,针对性很强,虽然是我不曾涉及的领域,但顿时就热血沸腾了,决定好好干一番!

      当时的近期目标是,在现在的开发基础上,一个月后上线我们的一个APP,感觉好神奇。而自从我们的CTO放下豪言“一个月没什么问题”之后,我已经意识到我要认识一个大牛了,好开心!我们团队一共五个开发,CTO从英国读研回国先工作,又开始创业,有过很多项目经验,是带头航空母舰。而我们四个虽然专业基础不错,但项目经验还很缺乏,是紧随其后的小船。

      CTO在了解了大家的特长与项目经历之后,对我们进行了大概2周的培训。可万万没有想到,今年实验室提前进项目组,再加上我选的一门编程实验课,导致三个项目同时压在我头上!那时的生活变得格外苦逼,上午去实验室写python(学长是pythoner,没办法得统一语言),下午抽点时间写C(老师说计算机基础和最底层的实现很重要),晚上去公司写JS。。。我只想说,苯宝宝脑子要炸了!

      回到正题,我们要开发一个移动端APP,我们确定了初步的项目框架”Angular.js+Node.js+Phonegap"。由于大家都没有原生应用(安卓、IOS)开发经验,开发周期又很短,所以我们决定用Web的开发方式(HTML、CSS、Javascript),再用Phonegap打包到安卓和IOS上来开发移动端APP。

      下面,我简要介绍下这套非原生开发框架:

      Angular.js:是继Jquery之后又一热门的前端框架,在我的上几篇博文中有对它的简要介绍。

      Node.js:是我大三下开始接触的敏捷开发平台,可以理解为用Javascript来做服务器端开发,听起来很极端,但它具有基于Google V8引擎的单线程、异步多并发、非阻塞、适用于IO密集型等优点。目前,很多创业公司都对Node.js情有独钟,甚至阿里这样的大公司,也进行了大量的Node框架迁移(除了核心的Java平台,因为实在太稳定),它们看中的便是Node适用于IO密集型场景(比如:支付宝)给他们带来的超额利润。

      Phonegap:能让基于Web的开发方式(HTML、CSS、Javascript)创建跨平台应用的快速开发平台,较著名的还有Worklight、appMobi、WeX5等,传说性能接近Native App;

      在开发过程中,我一开始主要负责:后台管理系统中用户管理、动态管理、画室管理三个模块的前后端搭建,前端是Angular,后台是Node.js,数据库是Mongodb。由于Angular以前没用过,所以花了一周学习,它的很多特性都是很优秀的模式,比如:自动双向数据绑定、依赖注入、MVC、模块化等,唯一的遗憾是我们的项目对指令的使用很少,使得代码的可重用性不太高。

      后来,当我们的App做的初具雏形时,投资人开始质疑我们的开发模式,抱怨App太卡。。。由于Angular的路由机制,导致了页面加载的灵活性不太高,也没有Webview的概念,CTO也很无奈,眼看马上就要月底了,为了保证性能,在最紧要的关头决定放弃Angular,选择React.js,一个性能可能会更好的框架,而它的最大的特点就是组件化。

      我们四个当时的感觉就是“我靠,这是在搞笑吗!”这意味着整个前端都得干掉,不过也没办法,谁叫CTO永远都是那么牛逼而自信,我们又硬着头皮按照一套新的前端框架”dcloud+react“重新开发!在接下来开发中,我主要负责后台API的编写,数据库的设计等,所以一直没有机会更深地接触我向往已久的react,以及在dcloud下玩玩原生API,也许这就是”前端想写后台,后台想写前端“定理吧。

      下面,我就简单讲讲在服务器端开发过程中遇到的一些坑,做一个经验总结:

      (1)数据库设计

        由于”Node.js+Monodb“已深入人心,Nosql数据库具有查询效率高,表结构易于扩展,适用于大数据量存储等优势,我们选择了Mongodb。

        总结:

        a.每个Collection尽量包含一个完整的数据模型,不要用字段去依赖另一张没有必要的表。比如:我们定义一个用户表,每个用户有自己的画作Work,我们只需定义一个Collection,将画作信息用一个类似JSON对象的形式保存在User的一个work字段里。这样做的好处是:表间populate操作会更慢,而尽量减少读取数据的开销,对于高访问量的APP来说是很重要的性能优化方式,用户的行为读是一定大于写的。

        b.索引的重要性:通过建立单索引、多索引,能够大大提高查询效率,这也是项目接下来需要优化的部分。

        

      (2)后台API编写

        a.对于每个API的传入参数与返回值,一定要和你项目的前端尽早达成一致!(如果不能随时当面交流,可以通过Coding、Email等的文档形式进行接口统一)

        b.后台开发需要对前端有一定的理解,比如:本地缓存机制、动态页面上下拉动与获取动态API间的逻辑是怎样的。

        c.后台开发需要对浏览器、Web请求与响应原理、Web缓存机制、服务器部署方案等有深刻的理解。比如:cookie原理,GET/POST请求的区别,图片、视频等占用大存储空间的资源应该存储在哪里,本地资源缓存有什么作用等。

        d.访问权限和安全问题:哪些API需要session验证,必须带上保存有用户唯一认证的session,而不是一个简单的_id;Sql注入是什么,如何控制等?

        e.Javascript异步的问题:Javascript两个核心概念便是异步和闭包,学会使用Q这个库(Q.promise、Q.defer)能帮助你很好地处理异步问题,后面有机会再分享这里面遇到的坑。

      (3)测试

        学会使用一些工具,如:用grunt去做自动化单元测试、JS压缩、编译等,而不是一直手动F5,用postman去测试每一个API,而不是直接给前端用。

       (4) 项目部署方案

        知道整个项目是如何部署的,前端和服务器端如何交互,数据库与服务器是如何交互的,阿里云等云存储平台与服务器是如何交互的,数据都存在哪的(OSS或数据库)。只有明白了这些的后台开发,才能满足项目扩展的需求,不断进行技术的迭代更新。

       由于个人水平有限,发表的都是自己实际项目开发中遇到的问题和经验,肯定会有不足和纰漏,希望高手指正,和我交流啦!

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    任务18格式化
    任务17分区
    任务16 BIOS与CMOS
    任务15硬件组装过程说明
    任务14选配机箱
    任务13选配电源
    任务12选配显卡
    任务11选配机械硬盘
    任务10选配固态硬盘
    Android自定义控件:动画类(八)----ObjectAnimator基本使用
  • 原文地址:https://www.cnblogs.com/tangzhirong/p/tzr.html
Copyright © 2020-2023  润新知