前端技术

随着互联网产业的爆炸式增长,与之伴生的Web前端技术也在历经洗礼和蜕变。尤其是近几年随着移动终端的发展,越来越多的人開始投身或转行至新领域,这更为当今的IT产业注入了新的活力。虽然Web前端技术诞生至今时日并不长,但随着Web技术的逐渐深入,今后将会在下面几方面发力。

  1. Web移动终端开发。
  2. JavaScript的兄弟们。

  3. 百花齐放的类库和框架。
  4. project化的Web前端开发规范。

Web移动终端开发

PhoneGap: 一个开源的开发框架,使用HTML、CSS和JavaScript来构建跨平台的移动应用程序。

它使开发人员可以利用iPhone、Android、 Palm、Symbian、BlackBerry、Windows Phone和Bada等智能手机的核心功能,包含地理定位、加速器、联系人、声音和振动等。除了在本地编译应用之外,还可以使用PhoneGap提供的云 端Build工具进行应用编译。

也就是说,仅仅须要将用HTML5写好的应用上传到PhoneGap的云端server,PhoneGap Build就可以将其编译成适合不同平台的应用。

Sencha Touch:讲到这里。就不得不提一些面向移动端的WebUI库,毕竟PhoneGap是一个工具。要想基于Web技术构建完整的App,必须选择一些适 用的移动UI库。而最值得一提的是Sencha Touch,它能够让Web App看起来像Native App。

漂亮的用户界面组件和丰富的数据管理,所有基于最新的HTML5和CSS3的Web标准,全面兼容Android和iOS设备。

PhoneGap 昭示着一种开发趋势,即App也能够使用Web前端技术来完毕。而作为开发人员最经常使用的UI工具箱,Sencha Touch又进一步加速了这样的趋势,眼下在淘宝已有大量的项目採用这样的思路来搭建。即在内置应用的外壳加上自己定义的基于移动Web的UI库。相信在未来这 种模式必会越来越流行。

Media Queries:在CSS2时代,假设你以前为站点设计过打印版CSS。那么就会明确CSS3 Media Queries的作用。只是,CSS3的Media Queries比CSS2的Media Type更有用,由于CSS2 的Media Type并不曾被多少设备支持过。CSS3的Media Queries能够获取这些数据:浏览器窗体的宽和高、设备的宽和高、设备的手持方向(横向还是竖向)和分辨率等。也就是说,Media Queries提供了一种基于不同的平台写CSS的技术。这项技术在2011年初被推广开来,至今已很火热,尤其是在Web页面仍占互联网流量大多数的 今天。这样的兼容技术能非常快让站点兼容移动设备,保证产品实现最快的跨平台的兼容性和多平台的可用性。

Zepto.js:一个专为 Mobile WebKit浏览器(如Safari和Chrome)而开发的JavaScript框架。

它标榜自己简约的开发理念可以帮助开发者简单、高速地完毕开发 交付任务。更重要的是这个JavaScript框架是超轻量级的,仅仅有5KB。Zepto.js的语法借鉴且兼容jQuery。

眼下已有不少站点開始基于 Zepto.js做应用。由于在抛弃了IE浏览器的兼容性问题后,Web开发会变得越来越纯粹,体积更轻巧,编码也更加愉悦。不可否认,随着移动终端开发 越来越流行,Zepto.js在未来将会有更加广阔的应用场景和空间。

Bootstrap:Twitter推出的一个开源的用于前端开发的工具包。它由Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。

Bootstrap提供了优雅的HTML和CSS规范,由动态CSS语言LESS写成。与CSS 框架Blueprint存在非常多相似之处。Bootstrap一经推出便颇受欢迎,一直是GitHub上的热门开源项目,NASA和MSNBC的 Breaking News都使用了该项目。

2012年第二季度,Bootstrap公布了2.0版,Bootstrap 2.0的一个重大改进是加入了响应设计特性,在1.0中,这是让非常多开发者抱怨的地方。并且为了提供更好的针对移动设备的响应式设计方 案,Bootstrap 2.0採用了更为灵活的12栏网格布局。

此外,它还更新了一些进度栏及可定制的图片缩略图,并添加了一些新样式。

值得关注的是,Bootstrap是一个 非常轻量级的框架,2.0在压缩后仅仅有10KB。Bootstrap为我们的站点高速搭建提供了不错的工具和思路,这个工具集将拥有更旺盛的生命力。

JavaScript的兄弟们

CoffeeScript 是一个借鉴Ruby编写的新编程语言,创建者Jeremy Ashkenas戏称它是JavaScript的低调的小兄弟,由于CoffeeScript会将Ruby编译成JavaScript,并且大部分结构都 相似。但不同的是,CoffeeScript拥有更严格的语法。它的最大功绩就是将JavaScript硬绑的C/Java语法抛弃了。改为採用类似 Ruby/Python的语法。Ruby/Python本来就是深受Lisp影响的。与JavaScript算是同门师兄。它们的语法经过了实践考验,非 常适合函数式编程。

这样的优雅的语言独具魅力。即将面世的2013版的淘宝首页即採用了CoffeeScript实现。

TypeScript 是微软开发的JavaScript的超集。TypeScript兼容JavaScript,能够加载JavaScript代码然后执行。

与 JavaScript相比。TypeScript进步的地方在于:添加凝视,让编译器理解所支持的对象和函数,编译器会移除凝视,不会添加开销。添加一个 完整的类结构,使之更像是传统的面向对象语言。因为JavaScript仅仅是一个脚本语言。并不是用于开发大型Web应用。所以没有提供类和模块的概念。而 TypeScript扩展了JavaScript实现了这些特性,能更好地支持大规模JavaScript应用开发。吸引了不开发人员。但要注意,尽管 TypeScript有微软做后盾看起来非常有保证,但眼下提供的仅仅是早期的预览版本号,TypeScript并不像它的站点看起来那样精美。终于版本号可能会 在一年后ECMAScript 6公布会确定。如今的版本号仅仅是个开发预览版。

因此,TypeScript今后发展怎样。还须要进一步观察。

此外。在server端,Node.js越来越流行。现在Node.js不仅作为处理高并发请求的中间层解决方式,还因其灵活的语法和丰富的底层API。越来越多 的人開始用它来写工具。尤其是之前基于Ant或者Java的一些工具现在都有了Node.js的版本号。

如此看来,Node.js在命令行工具领域有着更加 广阔的应用场景,甚至能够取代Perl或者Ruby这些传统的动态语言。

在淘宝Node.js已有非常多的应用场景,比如在数据部门,Node.js被用 作处理高并发场景下的容池,专门吸收高并发的请求,甚至能够保持和client的长链接,而这在之前则须要花费非常高昂的成本,比如Comet技术等。此外。淘宝 的开源前端类库KISSY也能够直接执行于Node.js环境,这样就能够在命令行执行KISSY代码,非常多前端代码就有机会採用自己主动化測试等,提高生产 效率。再者。淘宝内部的开发工具链也已大部分採用Node.js来构建了。

百花齐放的类库和框架

SeaJS是由支付宝前端高级技术专家王保平(玉伯)开发的一个遵循CMD规范的模块载入框架,可用来轻松愉悦地载入随意JavaScript模块和CSS模块。

SeaJS很小巧,小巧在于其压缩后体积仅仅有4KB。并且接口和方法也很少。

SeaJS有两个核心:模块的定义和模块的载入。

SeaJS能够载入随意 JavaScript模块和CSS模块,能保证你在使用一个模块时。已将所依赖的其它模块载入脚本执行环境中。SeaJS能够让你享受写代码的乐趣,不用 去管那些载入的问题。

毕竟如今网页的可维护性和性能问题一样严峻,体如今:文件太多,不利于维护。前端后端都一样。HTTP请求过多,当然这个能够通过合 并解决,但假设没有后端直接合并,那么人工成本会很大。

用SeaJS就能很好地解决这些问题。SeaJS遵循CMD规范,因此能够很方便地书写模块。

眼下已经有越来越多的人採用CMD规范来开发项目了。

近期微软已经正式公布了Windows 8操作系统,Windows操作系统的风格已经全然变成了磁贴状的Metro UI。

对于微软来说。这是一个巨大的改变,并且全部微软的平台包含桌面、平板、移动端及其站点都使用这个UI风格。Metro UI CSS是一个很完整的创建Metro风格的站点框架。它自成体系,但也能够与其它框架一起使用。

使用LESS创建,并且拥有网格系统、排版样式、表格、 button和图片。同一时候也拥有内建的JavaScript组件,帮助你生成片状、菜单、边栏、进度条和提示等。是一个很好用的框架。随着Windows 8的进一步流行,这样的风格的CSS类库一定会成为一种趋势。

Hype是一个小巧的工具,是Mac App Store新上架的一个HTML5创作工具,其好处是能够在网页上做出悦目的动画效果,无须Flash插件。开发该应用的公司Tumult由两个前苹果工 程师创建。并获得了Y Combinator的投资。因为公司的联合创始人之中的一个Jonathan Deutsch曾担任Mail.app后端的技术主管,因此他在接受Paul Hontz的The Startup Foundry訪谈时,谈到公司创始是为了解决HTML5创作工具缺乏的问题。

能够说。Hype是第一个可用的创作HTML5产品的可视化工具。具有里程 碑式的意义。随着硬件性能提升,HTML5的应用程序更加倾向于被工具生成,而不像传统意义上由project师“切”出来。因此工具化是一个方向,无论HTML5 是否真的能在移动终端扎下脚跟,这样的方向是值得坚持的。毕竟,HTML5的应用开发如今还处于原始社会。

iScroll.js是使用原生 JavaScript编写的一个模拟滚动效果的小类库,不依赖于不论什么JavaScript框架。旨在解决移动WebKit系浏览器的区域滚动问题,兼容 Mobile Safari、Android默认浏览器、Safari、Chrome、Firefox5+、Opera11+、IE9+及其它WebKit核心浏览器。 最新版本号为iScroll4。

这个小库一问世就备受关注。由于它不仅能够在PC端完美模拟滚动效果,在移动终端里对触屏事件的支持也堪称完美。

iScroll4 是2011年底问世的,2012年在移动终端产品开发中大放异彩。在淘宝的诸多产品中都用到了这个JavaScript库。iScroll是小而精的经典 作品,名字也带着苹果范儿。

但美中不足的是,仅仅能使用ID调用。只是这个小特性不是什么大问题,能够通过二次封装来解决。期待iScroll4在移动终端 里有很多其它精彩的表现。

前端MVC在2011年是比較火的话题。随着越来越多的人開始尝试使用诸如JavaScript MVC和Backbone.js这些MVC类库。很多其它的产品也看起来更像“软件”而非“网页”。

但因为前端环境的复杂性。我们也渐渐发现“这样的”MVC并 非完美,仅仅能应用于“基于数据驱动”的场景。而对“基于事件驱动”的场景却没有太好的解决的方法。眼下,淘宝有非常多产品在尝试使用“有限自己主动机”来弥补 MVC在这方面的不足。因此,新场景下的MVC还须要更深入的提炼。

project化的Web前端开发规范

2012 年,关于前端开发编码规范的讨论愈来愈多。国外和国内的顶尖开发人员差点儿同一时候对编码规范产生了非常大兴趣,前Yahoo!首页首席前端project师N.C. Zakas在他那本《高可维护的JavaScript》书中也提到规范在团队协作过程中的重要性。而例如以下这两个方面,是值得我们探讨和深思的。

AMD 与CMD规范之争。随着CommonJS的进一步普及,CommonJS规范在标准的模块开发领域发挥着越来越关键的数据,而CommonJS在浏览器端 的难以实现却为这份规范增添了一丝变数。本质上讲,CommonJS是一种用于同步载入JavaScript代码的API规范。很easy优雅。为了在浏览器端实现这样的机制,则不得不增加了一层异步回调。这便是AMD(Modules/Asynchronous-Definition)。RequireJS 实现了这个规范,而Dojo也将立即全然支持(Dojo1.6)。

规范本身很easy。甚至仅仅包括了一个API。玉伯在开发SeaJS的过程中。很多其它地保持 了CommonJS Modules规范的风格,即CMD(Common Module Definition)。较之AMD,CMD没有採用单一的API来适用于多个功能,而是依据不同功能定义不同的API。我觉得,两者在完备性上是基本一 致的。但在社区理念和编程风格上有所差异,开发人员能够依据自己的偏好来选择使用AMD还是CMD编程风格。

Java语言编码 规范对于前端开发编程规范有很大的影响。在Zakas的《高可维护性JavaScript》一书中提到了五种JavaScript编程规范。都和 Java语言编码规范有着类似的渊源:Crockford编程规范、 jQuery核心风格指南、SproutCore编程风格指南、Google的JavaScript风格指南和Dojo编程风格指南。

无论是哪种规范,都 强调了编码风格一致的重要性,这也可看出,前端团队开发越来越看重规范。JavaScript的灵活性须要某种程度的限制。

总之。通过上面的阐述,我们可以看到前端技术的不断进步和推陈出新,也可以体会到项目过程的project化,解决方式的轻量化,库和框架的多元化,知识结构的体系化,这样的趋势在今后会变得越来越明显,也昭示着前端技术的发展方向。

说 到前端技术知识结构的体系化建设。这是我这些年来一直都在做的事情,在2011年也画了一张图来说明我的观点——前端技术体系的建设是一项长期的任务。毕 竟前端新技术新知识层出不穷。对于经典的知识结构的整理也非常有挑战性。但这项工作终究须要有人去做,为新入道的人指出一个大致的方向。

对于前端project师的成 长问题,我也写过一篇长文“前端开发十日谈”。帮助新人们解惑。

很感谢朴灵,已经将这个知识结构新建了一个开源项目(http://github.com/JacksonTian/fks),也希望大家一起參与进来,为前端技术知识体系建设做出贡献。


posted @ 2016-04-11 14:00  zfyouxi  阅读(248)  评论(0编辑  收藏  举报