【开源专访】Sea.js创始人玉伯的前端开发之路

摘要:玉伯,淘宝前端类库 KISSY、前端模块化开发框架SeaJS、前端基础类库Arale的创始人。本期【开源专访】咱们邀请玉伯来为咱们分享一些关于前端框架、前端开发的那些事,以及前端大牛是如何炼成的。html

在Web应用程序的用户体验愈来愈被重视的今天,前端开发的地位也上升到了史无前例的高度,而随之而来的也有更多的挑战。前端

为了将前端开发者繁重的工做变得简单,框架应运而生。国内也不乏一些很是优秀的前端开发框架。本期【开源专访】咱们邀请到了国内前端大牛玉伯(@玉伯也叫射雕),请他为咱们分享一些关于前端框架、前端开发的那些事,以及前端大牛是如何炼成的。git

玉伯(王保平),淘宝前端类库 KISSY、前端模块化开发框架SeaJS、前端基础类库Arale的创始人。程序员

CSDN:先介绍一下本身和目前的工做吧!github

玉伯:我叫王保平,阿里花名玉伯。目前在支付宝前端技术部工做,从事前端基础类库、工具等产品的研发。喜欢编码,热爱思考,努力把每一天过得平淡又精彩。后端

CSDN:Sea.js是什么?致力于解决什么问题?浏览器

玉伯:Sea.js是一个很纯粹小巧的模块加载器,它只解决一个问题:前端代码的模块化。经过Sea.js,能够将大量JavaScript代码封装成一个个小模块,而后轻松实现模块的加载和依赖管理。安全

有了Sea.js,咱们就能够书写模块了。Arale则是一套知足支付宝需求的通用模块集合,是一套基于模块化的前端基础类库,目前具有100多个模块,简单易用。前端框架

CSDN:发起Sea.js项目的初衷是什么?它的本质意义是什么?并发

玉伯:2008年,在前端开发过程当中,常常会出现一个单文件几千行甚至近万行的状况。这种大文件,对协做开发、后续维护、性能调优等都不利。Sea.js初衷是帮助前端开发工程师将大文件拆分红小文件,能保持小颗粒度的模块化开发,同时不须要过多考虑依赖关系,让依赖管理轻松自如,让模块化开发变得更天然,就像浏览器原生提供的同样。

Sea.js的本质意义是经过模块化开发,来提升代码的可维护性。对工程师而言,是关注度分离,更将更多精力聚焦在代码自己的逻辑上。

CSDN:Sea.js的设计思想是什么?是如何具体实现的?

玉伯:Sea.js的核心设计思想是保持简单。有两层含义:

 

  1. 对外保持使用接口的简单。Sea.js的经常使用API只有7个,使用者一旦了解,基本没什么记忆成本,能够快速上手。
  2. 内部实现代码尽量简单。追求内部实现的简单有不少好处,好比别人能够比较容易读懂源码,这样就能参与进来协同开发。源码简单,每每也意味着不太会有晦涩的bug存在。Sea.js的内部实现,一直在往“简单得明显没有bug”的方向努力。

 

除了保持简单,Sea.js的设计理念还有职责清晰、性能优先和适度完备。

职责清晰是让Sea.js的范畴明确,随时知道本身应该作什么,不该该作什么。一个框架,最怕的是需求膨胀,最怕的是复杂化。

性能优先是由于Sea.js是底层加载器,假若性能很差,直接会影响页面性能,所以源码中有很多地方会刻意追求性能。

适度完备是从功能的层面看Sea.js的API是否能知足经常使用需求,同时又能经过插件机制对外提供适度的可扩展性。Sea.js不追求可以知足全部需求,而是追求2/8原则。

具体代码实现纯文字不太好描述,感兴趣的能够阅读源码:https://github.com/seajs/seajs,全部源码都在上面,欢迎阅读,欢迎给出建议。

CSDN:Sea.js开发过程当中,最大的困难是什么?是如何解决的?

玉伯:这个提及来比较有意思,在开发过程当中,Sea.js最大的困难,不是编码,而是模块定义规范的肯定。

在业界,目前流行的模块定义规范,有CommonJS的Modues/1.x规范,还有RequireJS倡导的异步模块定义规范AMD。这两个规范,在社区里存在比较大的讨论,各有利弊,适用于不一样的运行环境。Sea.js最后采用的是延自CommonJS Modules/2.0规范的通用模块定义规范CMD。这个至今都有争议,不一样的团队,不一样的场景下,喜爱和选择都有可能不一样。

随着Sea.js的推广,CMD规范目前在国内已经有至关多人承认。接下来会进一步国际化,但愿能获得更大社区范围内的承认。这条路还很长,不能说已解决了,一切还在解决的路上。

不过,这些都不是关键。即使Sea.js之后死掉,只要你们对模块化开发理念有深度承认了,那一切也就值了。

CSDN:Sea.js和Arale目前分别应用在哪些地方?

玉伯:Sea.js目前已应用在阿里、腾讯、网易、百姓网等不少公司,具体能够查看seajs.org首页下面的logo墙,目前国内有大量中小网站采用Sea.js。

Arale的使用范围是支付宝,还有阿里巴巴ICBU部门,在一小部分国内创业型公司中也有使用。

CSDN:您以前还开发过前端类库KISSY,而Arale也是一个基于Sea.js的前端类库,二者有什么不一样?这是在“造轮子”吗?它们的开发初衷是什么?目标又是什么?

玉伯:Kissy和Arale都是前端基础类库,从组件提供的功能来说,存在很大重合度。但从理念上来说,这两个类库有比较大的不一样。

Kissy是大教堂式思路,全部组件,从底层基础组件,到上层UI组件,都是自主研发。这和业界的YUI三、Sencha等类库的思路是同样的。

Arale有所不一样。Arale的首要理念是开放。开放不光意味着将本身作好的贡献给社区,开放更意味着将社区已有的优秀组件直接拿进来用。在开放的理念下,Arale类库里,直接引入了jQuery、Backbone、Moment、Handlerbars等业界成熟组件。在这种思路下,Arale能与开源社区紧密互动,彼此快速共进。

Kissy和Arale的初衷都很简单,Kissy是解决淘宝的前端基础类库问题,Arale则是解决支付宝的前端基础类库问题。二者的目标,都是减小前端开发过程当中的重复工做量,尽可能提升前端开发的工做效率,同时在通用组件层面保障全站的用户体验。

CSDN:Sea.js和Arale将来会如何发展?目标是什么?

玉伯:从2.0开始,Sea.js的发展目标是作简单、纯粹的模块加载器,甚至但愿从2.x的某个版本开始,就不须要更新了,就能知足绝大部分需求,能很是稳定下来,不须要再升级。

Sea.js稳定后,更多精力会放在Arale等前端基础类库的建设上。Sea.js名称中的Sea,是海纳百川、有容乃大的意思。Sea.js但愿是一片海,经过CMD规范,能够容纳各类各样的模块,但愿能造成一个模块的生态圈,能造成生态链,能促进良性循环,能让整个前端开发界都受益。

 

摘要:玉伯,淘宝前端类库 KISSY、前端模块化开发框架SeaJS、前端基础类库Arale的创始人。本期【开源专访】咱们邀请玉伯来为咱们分享一些关于前端框架、前端开发的那些事,以及前端大牛是如何炼成的。


 

玉伯的开源感悟

CSDN:为何选择将这些项目开源出来?开源对于本身的技能提高是否有帮助?

玉伯:选择开源有两个初衷:

 

  1. 将好的东西贡献给社区;
  2. 经过社区让东西更好。

 

Sea.js是在开源中不断成长流行的,不少需求点、优化点,若是不是开源,Sea.js很难走到今天。

开源自己对技能提高我的以为是有限的,但技能以外的软技能提高,好比沟通协做、产品化思路、运营管理等很是有帮助。经过开源的方式,比较容易让一个技术人员有产品观,能让本身的眼界在编码以外看到更多美景。

CSDN:在开源领域这么久,您有什么感悟?您理解的“开源精神”是什么?

玉伯:我理解的开源精神,有三点:

1.  拿来主义。懂得从现有成熟开源项目中去挑选符合本身需求的项目,直接拿来用。程序员容易犯一个病,就是什么东西都想本身造,或者对别人造的,浅尝辄止就判断别人的不行。真正的拿来主义,须要一颗谦卑的心。在「拿」的过程当中,须要去看文档,甚至去读源码,这些过程,对程序员的技能增加都很是有帮助。不少程序员的技能提高,并不是是写的代码太少,而是看的代码不够多。懂得去看、去理解、去用,是迈入开源世界的第一步。

2.  参与比主导更重要。开源世界里永远不会有完美的项目。当你学会了「拿来主义」后,在使用开源项目时,确定会遇到各类bug、各类特性不知足。这时,你能够本身去新开一个项目,也能够参与到该开源项目中去,帮助做者一块儿来完善。我的以为对于绝大部分项目来讲,参与进去帮助完善是更明智的选择。参与进去,可让你更懂得美,懂得感恩之心,懂得回馈之情。这在过程当中,你的功力,每每也会大增。不光是技术上的进步,还包括英语读写能力。在人性沟通上,你也会收获不少,这是无价的财富。

3.  重视社区。除了代码,还有文档、测试用例、Issues 管理、版本发布、升级策略、书籍、视频等等。jQuery、Backbone、AngularJS 等成熟项目,成熟的是社区,而不是源码。好的社区,是在 Google 中一搜索,就能找到很多资料。好的社区,是你踩过的坑,常常已经有人也踩过并整理分享出来了。社区的造成很是不易,若是选择了开源,从项目一开始,就尽可能可能的去让社区逐步造成起来。社区造成后,开源才会活起来,不然就是死开源。

最后,知易行难。上面的道理或许你们都懂,真要作到,则是一场修行。Sea.js 和 Arale 也才刚刚上路,旅途中,有西湖惬意的微风,也有沙漠般的烈日当头。好在,选择了,就不怕远。

CSDN您认为,Kissy、Seajs和Arale这些开源项目为何能取得成功?它们是否从社区中得到了贡献?

玉伯:还谈不上成功。目前社区未彻底成型,以Sea.js和Arale为例,目前从社区中得到的贡献有:

1.  bugs反馈和新功能讨论。这很重要,只知足一个公司的需求时,不少想法都想不到,当有多个公司使用你的产品时,在某些点上能够帮团队打开思路,去看到很多原来看不到的地方,甚至有时会有“为何咱们以前没想到”的感慨。

2.  全网测试。这一块,在Sea.js的开发上尤其明显。Sea.js在每次发布前,都会邀请社区人员一块儿帮忙运行测试用例。前端开发与后端开发的最大区别之一,就是后端代码的运行环境是固定的,是开发人员本身选择的,而前端代码的运行环境却没法固定,是用户决定的。这使得前端代码的测试,除了本身的内部测试,还须要线上的“众包测试”。开源使得“众包”成为可能。

3.  代码优化。因为是开源的,代码是公开的,偶尔就会有人会去阅读源码,并发现其中能够优化的一些点。这在Sea.js和Arale里都有一些案例,有时挺感动的。社区的力量,会给人惊喜。

CSDN:您如何看待国内的开源环境?

玉伯:国内开源环境还不够理想,但愈来愈好了。很期待更多的公司加入并推进开源活动。对于前端开发领域,必定程度上真没有什么秘密,期待更多公司的加入。

 
摘要:玉伯,淘宝前端类库 KISSY、前端模块化开发框架SeaJS、前端基础类库Arale的创始人。本期【开源专访】咱们邀请玉伯来为咱们分享一些关于前端框架、前端开发的那些事,以及前端大牛是如何炼成的。

 

前端大牛是如何炼成的

CSDN:前、后端开发有没有明确的分界(是否能彻底独立)?您心目中理想的前、后端开发模式是什么?

玉伯:先后端开发很难彻底独立,我的以为也没有必要彼此独立。个人想法是“全端工程师”,都是Web开发工程师,从前到后应该都能作才行,这对效率、质量都有好处。

但独立的先后端开发工程师也应该存在。前端一些深钻领域,须要前端领域专家的持续投入,后端也同样。这些专家来自一线开发工程师,同时在某个领域有独到的想法和执行力,能沉淀下来造成工具和技术平台,这些平台反过来提供给「全端工程师」去用,这是往深里钻的技术工具化、平台化思路。

CSDN:有人认为,过多使用框架会致使开发者忽视对JavaScript原生语言特性的学习,变得懒惰,或者基础会很薄弱;也有人认为,只要精通原生JavaScript就能够,无需使用框架也能开发出应用,对此您怎么看?

玉伯:在前端开发工做中,JavaScript语言的使用只占比较小的一部分。更多的精力,须要花在语言以外。掌握JavaScript语言的基本使用,就如咱们在学校学习,须要掌握中学数学的内容同样。这一块我以为不难,只要肯花时间去学就好。

值得提醒的是,若是只精通原生JavaScript,那么就如只会中学数学同样,虽然已经能解决不少问题,但要优雅地、更简单地解决问题就比较困难了。

框架可让你从重复低级工做中脱离出来,特别是应用复杂到必定程度时,若是没有框架层的抽象,代码每每会复杂得难以维护。在前端开发愈来愈复杂的今天,框架已是必不可少的了。学会去用,去拥抱,能够事半功倍。

框架不会让你偷懒,更不会让你基础薄弱。即使是jQuery,若是你对DOM的基本原生操做不太会,那么你也很难真正把jQuery使用得很好。就如中学数学都不理解的话,要把大学数学用得很好只会是梦。

CSDN:对于繁多的前端框架,应该如何选择?

玉伯:这个问题太大了。虚的回答是,根据本身公司的需求去选择合适的就好。实的回答是,用Sea.js吧,而后模仿Arale去造一个适合本身的模块集合,目前这套方案,在我知道的各类场景下,都能比较好的用起来。

CSDN:阿里的前端开发流程是什么样的?

不一样团队不同。好比淘系团队和支付宝系团队不少流程就很不同。流程很大程度上取决于业务类型。淘系不少业务是导购类型,快速每每是第一要素,支付宝不少业务则是金融类型的,稳定与安全每每是第一位的。这两种要求下,产生的流程有很是大的不同,甚至能够说是地球的两极。目前也在逐步靠拢,寻求合理的权衡下的统一。

CSDN:可否分享一些您的学习经历、经验?您认为学习前端开发最重要的是什么?

玉伯:前端开发是距离用户最近的编码工做,我的以为,一个优秀的前端开发工程师,必定要对产品有爱。若是作的产品本身都不怎么用,那么不少交互细节极可能你会缺少深思,你会在潜意识里忽略掉。可是,若是你本身也用这个产品,那么你就不只仅是在编码了,你同时仍是PD、PM、测试等等角色,甚至你就是这个产品的CEO。当CEO的感受挺累但挺爽的,去找到你承认、让你为之疯狂的产品吧,你的开发能力会在你的疯狂中日新月异。

CSDN:您眼中的技术大牛是什么样的?如何成为技术大牛?

玉伯:我理解的技术大牛,就是把事情作得很专业的人。温伯格在《理解专业程序员》中对专业有很好的定义:

专业是指具备了不得的技艺或经验,并为其余人解决问题,不管问题有多麻烦。

不少人在追求具备了不得的技艺或经验,但只有这一项,永远称不上“专业”。专业还必须不厌其烦地为他人解决问题。不管作业务仍是基础技术,都能作得很专业。追求专业,变得专业,价值、成就感每每就会水到渠成。成为技术大牛,也就是天然而然了。

相关文章
相关标签/搜索