好久没写blog。最近半年来总感觉自己进入了一个瓶颈期,什么都知道一点,但具体到落地,总是遇到各种各样的问题。总而言之,就是自己的知识体系不够系统。但想要系统的提升,却总感觉无从下手,加上生活上的各种事情,心也总安静不下来。

处于瓶颈期总是很痛苦的。但是这半年来,从之前的不知道自己不知道,到逐渐的知道自己不知道,知道下一步要学什么,也总算慢慢迈出了通往下一个阶段的脚步。希望自己逐步走出瓶颈期与疲倦期,不忘初心,逐步实现自己的人生目标。

好了,步入正题,谈一下最近的研究内容。

因为房天下(搜房网)这边的业务要求,有一些对外的系统还是需要兼容低版本浏览器的(被三四线城市的地产经纪人对IE6,7的执着感动的不要不要的)。同时由于系统架构仍然采用较为传统的基于asp的后端渲染模式,前后端无法分离,所以这几年前端发展的很多解决方案是无法采用的(基于node的前台站,三大框架,webpack2/3),优化的范围也只能限于js脚本。好在之前项目的js开发基本处于野蛮生长状态,没有模块化,没有自动化打包编译,一切函数都是过程式,可以优化的空间还是很大的。

那么,一个基本的功能化的前端项目应该包括哪些东西呢?

  1. 模块化。模块化带来的好处显而易见,一是解耦,使得我们的代码更加可读;二是公用代码复用。现存的几种模块化的方案,AMD,COMMONJS,ES6,根据团队成员的熟悉程度,我们最终选择了基于AMD的requirejs。它能够在保证兼容性的情况下,完美的解决模块化的问题;

  2. 自动化编译/打包。在grunt几近淘汰,webpack大火的今天,webpack似乎是一种不错的选择。但是webpack2/3都已经不支持低版本浏览器,同时webpack本身的配置对于很多后端出身的同事来说确实有些复杂,几经犹豫,最终选择了gulp作为工程化的解决方案。

  3. 语法层面。ES6如今已经全面应用于各大公司的日常开发中,它自身的很多特性,比如class,Module,解构等等,为日常的开发提供了非常多的便利。这个时候看起来babel成为了我们的必选项。但是一个偶然的机会,在同事的推荐下,我把目光投向了Typescript。他是javascript的超集,在完美实现ES6/ES7特性的同时,引入了强类型的概念。有了它,无论是开发时候的放心程度,还是编辑器突如其来的友好,都让我很是欣慰。

  4. MV*框架。有了上面这些,仍然无法避免过程式代码的出现,使得代码难以维护。在对比过一些兼容IE低版本浏览器的框架后,我们选择了Backbone作为解决方案。它足够轻,又能很好的配合underscore;与此同时,underscore中自带的模板引擎_.template()也能给日常的开发带来很大的便利。

综上,我认为在目前的业务场景下(兼容IE低版本,同时前后端不分离,后端渲染),我们前端开发的思路应该是这样的:使用Typescript的语法来写Backbone,完成业务逻辑后,使用gulp进行编译打包;在开发的时候使用Typescript的Module进行书写,这样在编译打包的时候统一生成AMD语法的模块;再在页面中通过requirejs引入入口模块,一切搞定!

技术框架如图:

先写到这儿,具体的示例代码过段时间更新到github。着急的可以先看看我关于typescript和backbone的基础教程