首先,笔者本身不是大牛级别的程序员,一个入行没多久的菜鸟而已,因此观点难免有所偏差,欢迎指正,不喜勿喷。算是自己工作三年以来的经验之谈吧。
什么是前端?前端的过去,现状,未来
简单的说前端就是在B/S模式中,处在browser部分的代码,使用的技术主要为javascript ,css,html,html(当然还有actionscript,vbscript等)主要用于内容的展示,css主要用于页面的美化,javascript主要用于行为的控制。然而,前端却不止于此,首先前端代码不一定只适用于B/s模式,比如c/s,移动端,服务端,诸如大家都知道的QQ,YY,还有很多客户端(也不全是组件化的开发模式),我们看到的界面,有很多其实就是我们平时看到的html,只不过是用c++或者类似的方式提供了一个IE的核。phonegap,这个感兴趣的朋友可以自行百度下,一个致力于提供前端开发者一个可以写跨平台移动应用的工具,通过自己底层对前端内容进行解析,可以生成app的工具。至于最近如火如荼的node,更是了得,基于V8引擎提供了诸如文件,进程等操作,让前端工程师可以染指服务端(姑且这么称呼吧)。
在大概七八年前吧,那时候还没有前端这个称呼,html都是静态的,这让我想起了王菲的《寒武纪》,故事从一双玻璃鞋开始...因为表单的验证,js闪亮登场,把部分属于服务端的验证放在浏览器去做,节约了服务的成本,因此迅速风靡一时。网络硬件增强,带宽的增强,让更多的图片,富媒体在网页上的出现提供了良好的条件,html+css迅速兴起,而javascript也不再是当初那个只用于做表单验证的年轻的语言,dom标准的推广,jQuery等一系列优秀插件的出现,javascript能够做的事情越来越多,从最初的验证演变成千变万化的特效,再到如今的项目。
由于个人高度问题,关于前端的现状和未来,仅仅个人观点。就目前来看,前端工程师的需求量和待遇相对过去有很大的提升,互联网的信息共享以及网络服务的兴起,需要大量的前端工程师去实施,而前端的技术也不再是当初简单的只需要html做好内容,css做好展示,js控制行为了。如果一个公司只有不到10个人,那么可能不太需要什么严格的制度,大家可以很开心的和谐的去工作,当在这个公司有天有一万人的时候,我们就必须有一定的制度去管理了,不然就会和混乱,很难协作。同理,如果一个网站只是简单的内容呈现没有太多的业务需求,前端工程师只需要按照设计师的要求完成内容就可以,但是业务很复杂,我们就需要多人协作,就需要模块划分,然后再就是如何去维护。前端框架就出现了,方便复杂的项目更好的管理和协作。所以笔者认为的前端的现状是百花齐放,各种框架,插件层出不穷,例如jq,underscore,arale,requirejs,kissy等等,同时也有各种项目管理工具,grunt ,gulp,fis(相对于之前的ant,maven等)。前端的未来,肯定是有,眼界问题,不在这里挖坟乱说,欢迎高人讨论。
如何入门
前端的入门相对于java,php等相对简单,html,css简单的语法一学就会,js方面需要了解的东西多一点,基本的语法肯定是要的,DOM、BOM、Ajax,事件的要知道,然后就是插件了,在刚开始可以放缓对兼容性的了解,插件会帮去抹去大部分的兼容性问题,我推荐jQuery作为最近基本的插件,当然其他类似的也可以,就jq而言,需要了解选择器,事件绑定,动画,ajax,回调等等。html/css方面本身入门比较简单,恰好本人不善此道,所以不在此多说。然后自己写上一两个网站,基本就知道是怎么回事,算是简单的入门,然后学会使用一些基本的工具,学会使用浏览器调试,然后还需要掌握一些软技能,比如如何跟设计师沟通,如何跟服务端同事描述你需要的接口,跟PM沟通,切图等等,总之,记住,你不光是一个写页面的,设计师,PM,server他们都在为你服务,你的劳动成果是呈现给用户的最终结果。
类似如何入门前端的话题网上不少,总之天道酬勤,不要因为自己现在的处境而找各种借口,动起来,每天改变一点,人生或许会因此不一样。
性能与维护
一个好的网站,首先应该快速的响应用户的行为,试想用户用了很长的时间才加载完一个网页,除非有特殊的需要,一般的用户不会有太多的耐心去等待。就如何提升网站性能,YUI的大神们在很早之前就提出14条天条,这个网上能搜到很多,我就不再copy了,总结一下,主要分为以下几方面吧。
1.浏览器资源加载的优化,诸如压缩合并css,脚本文件,合并图片(css sprite),把脚本文件放在body最后等等,赖加载部分内容(按需加载),使用独立的静态资源服务器(原因可以参考浏览器支持的相同域名并发数字)
2.代码级别的优化,诸如减少dom的操作(笔者建议使用模板来完成),合理的使用正则表达式
关于维护,其实个人也没太多的经验,一方面是晚上必要的文档,另一方面就是模块化,尽量单一职责,还有就是UI的操作跟数据的操作分离,避免因为需求变更导致的需要改动很多东西,所以尽可能在不要把几个功能糅合在一起,这样你在改动的时候会很痛苦。另外,html的结构要尽量的清晰,这个也是我不擅长的,html的结构会很大程度上决定你css修改的难易程度。
前端的工具
关于工具,实在有太多了,调试工具例如各个浏览的F12,vs等等,还会用到诸如wareshark,fiddle等抓包工具,在这里我想聊得是一些js框架,现在主流的框架大多都遵循commonjs规范,诸如requirejs,seajs,node等等,这些工具让js按照模块定义,加载,运行,封装必要的方法,开放接口,等等,还有模板的使用,尽可能的减少了对dom的操作。这样做的好处一方面是性能,一方面是维护性,开发者很容易找到自己需要实现或者修改的位置。还有就是项目管理工具,诸如grunt,gulp等工具,通过简单的配置文件,就可以完成文件的项目的打包部署等,npm上面有着很丰富的插件库,用来实现各种的功能,诸如压缩合并,css sprite,文件添加MD5等。
关于轮子
大神们都说不要重复的造轮子,我个人赞同,重复写一个jquery有什么意义,况且你写的也不一定比别人好,但这并不是说,一个简单的功能你为了使用一个轮子而引入一个jqueryUI,首先jqueryUI是支持定制化的引入的,一个基础的功能你完全可以自己去实现,无需引入那么多东西只为了其中的一个功能点。另外,也可以尝试自己去写写插件,这对于自己提升很有帮助的。