Love.Passion.Dream

关于新的前端开发模式的探索

之前写过一篇如何选择前端开发模式,在那篇文章中更多的是一种询问和质疑。更多的是希望有一个牛人过来一拍桌子告诉我应该怎么怎么做。虽然没有找到答案,不过庆幸的是大加也在探索中,前端开发的迅速发展使得并没有一个标准成熟的答案,但是在大家的探索下前端开发的未来也越来越清晰。遗憾的是这大半年来都在探索C++,IOS等方面的开发,公司需要,呵呵,我就是块砖,哪里需要哪里搬。但是我也从未停止对web前端开发的探索,现在新的相关的项目开始启动,也是该好好梳理一下相关的想法了。

这两年前端开发大红大紫,各种概念层出不穷,尤其是webApp富客户端的概念一直萦绕在前端开发者的头上,各种框架如雨后春笋搬的出现,backbone,angularjs,emberjs等等MV*的框架让人眼花缭乱。前端开发者们谈论着JS就能处理一切,在一段时间中我也在大量的研究那些框架,也和别人一起鼓吹谈论应该使用何种MVC的框架。后来渐渐的意识到过于盲目的追求一些新奇的技术而忽略了实际开发中的不和谐。比如有的地方应该用server-template更好,但是也非要使用ajax请求去通过浏览器渲染,其中一个原因就是不想涉足后端模板那一块,不想和后端开发者去争食,在某种程度上甚至是出于前端开发者的自卑。自己很长一段时间都没能走出这样的怪圈。

所以我也庆幸这一年来能够接触一些不一样的项目,不再限制于浏览器JS。让自己有了一个更广阔的思维去思考。突然意识到技术是应该服务于项目的,所有新奇的技术如果没有办法去解决实际的问题那么也只能是程序员茶余饭后的话题而已。只要能够优雅的解决项目中实际的问题,我们便不能因为自我的短板而去忽略那些正确的解决方案。所以只有基础技术扎实了才能去谈论架构与设计的问题。我现在的技术并不是那么的扎实,但是我想我已经做好的去迎接任何技术挑战的准备,不拘泥于某一项概览,不拘泥于莫一项语言。而是更具项目区选择更合适的开发模式。

闲扯扯完了,牢骚也发完了,各位看官可以随意拍砖。不过我还是要继续献丑谈谈对web前端开发的一点看法。正如之前所说,程序员自身的短板限制了选择的能力,这一点放到前端开发上来讲就是浏览器限制了前端开发者的发挥。不管你用什么样的框架,依然是被限制在浏览器的环境中。所以有一个概念是我比较赞同的,也是很多公司现在或者已经在尝试的:“大前端”。

所谓大前端,那就是把前端开发的范畴从浏览器端向后扩展到web框架。后端仅仅是提供数据接口。所谓的web框架并不仅仅是server-template那一点范围,应该是除了数据外所有的web逻辑。很多人说这样是抢后端同学的饭碗,是前端开发者的逆袭。其实在这种概念下很多后端开发者其实真正上是前端开发。大前端的概念其实让前后端的分界线更加清晰,让后端程序员专注于数据,而不用像以往那样需要按照页面交互设计去吐数据。新的分界线一划分,让人感觉最明显的就是前端开发者有更加充足的power,不在局限于浏览器,能够真正的抛开技术限制去选择合适的开发模式,不管是webApp还是server-side template,这些都能够随心所欲的结合起来。

接下来就是具体细节上应该通过什么样的技术来实现大前端的这么一个概念呢?在公司有一个项目,做的工作是将几个后端的服务数据揉在一起,做一个中间层。我们通过nginx+lua来实现了这么一个项目。仔细想想这个项目虽然不是渲染html页面,没有js,但是它真的实实在在的应该是一个前端的项目,没有涉及到任何大数据的处理,没有数据的存储。但是显然如果用这样的模式来开发一个网站显然不行,lua当前还没有成熟的web开发的解决方案,国际化?组件化?等等。那我们应该用什么呢,Java,PHP,Python,其实这些都可以,至于应该选择什么那就是仁者见仁智者见智了,据我所知百度的前端开发很多都是采用的PHP。之前也读过很多百度前端开发的一些博客,不得不说百度的前端开发还是走得比较早的。PHP这一类的脚本语言的web框架也已经都很成熟了,开发效率也很高,都不失为一种不错的选择。不过可能此处很多人在想,为什么没有NodeJS?OK,这正是我要说的,因为我也选择的NodeJS。

NodeJS的火爆从某种层面上来说是很多前端JS开发者想要逆袭的怒吼,JS终于能够完美的运行在服务器端,这的确是让人激动的。但是当然纯粹的为了技术而选择技术肯定是不可靠的,我想网上关于NodeJS的探讨已经很多很多了,不过我还是要再阐述一些我这么选择的理由

  • 无需语言切换,JS全部搞定

  • 性能方面完全OK,异步事件驱动的IO模型真心不是吹的

  • 可扩展性好,能够自己改造web底层框架

  • 在一大波开发者的努力下使得开发框架逐步得到完善,NPM上面无数优秀的库就说明了这一点

呵呵,有点鼓吹NodeJS的嫌疑了,要是有人质疑一定要吼出来,不要让我迷失在程序员的技术情结里面。另外项目才刚刚开始,后续感受怎样还请有待下次分解!