zoukankan      html  css  js  c++  java
  • 一些总结与思考(聊聊最近,希望对大家有所帮助)

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

      研一开学前,我就一直在思考,研究生生活应该怎样度过才算有意义?专研实验室项目?找个喜欢的实习?或是潜心科研?作为一个对技术满怀热情的工科男,我一直对互联网技术有很大的兴趣,在本科阶段学习计算机专业基础之余,还自学了一些热门技术,比如: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或数据库)。只有明白了这些的后台开发,才能满足项目扩展的需求,不断进行技术的迭代更新。

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

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    Oracle常用命令大全(很有用,做笔记)
    表格驱动编程在代码中的应用
    mac 利用svn下载远程代码出现Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
    FAILURE: Build failed with an exception.
    There is an internal error in the React performance measurement code.Did not expect componentDidMount timer to start while render timer is still in progress for another instance
    react native TypeError network request failed
    Android向系统相册中插入图片,相册中会出现两张 一样的图片(只是图片大小不一致)
    react-native Unrecognized font family ‘Lonicons’;
    react-native SyntaxError xxxxx/xx.js:Unexpected token (23:24)
    Application MyTest has not been registered. This is either due to a require() error during initialization or failure to call AppRegistry.registerComponent.
  • 原文地址:https://www.cnblogs.com/tangzhirong/p/tzr.html
Copyright © 2011-2022 走看看