阅读更多
AngularJS是一款开源的JavaScript MV*(MVC、MVW、MVVM)框架,目前由Google维护。AngularJS弥补了HTML在构建应用方面的不足,其通过使用标识符(directives)结构,来扩展Web应用中的HTML词汇,使开发者可以使用HTML来声明动态内容,从而使得Web开发和测试工作变得更加容易。

官方网站:http://angularjs.org/



AngularJS最初由Misko Hevery和Adam Abrons于2009年开发,后来成为了Google公司的项目。

本期我们专访了AngularJS的创始人之一Misko Hevery,请他来为我们介绍一下AngularJS项目开发背后的故事。



ITeye期待并致力于为国内优秀的开源项目提供一个免费的推广平台,如果你和你的团队希望将自己的开源项目介绍给更多的开发者,或者你希望我们对哪些开源项目进行专访,请告诉我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com即可。

请先介绍一下您的经历! Top

加入Google公司之前,我曾在Intel、Xerox(施乐)、Sun和Adobe公司工作过,主要从事数据库/后端方面的工作。加入Google公司后,我开始转向自动化测试,这个工作的主要目的是改进Google的开发者工作效率,从而改善代码库。

我之前并不太热衷于JavaScript,直到我的老板让我涉足这一领域,并让我研究关于JavaScript的所有知识。

讲讲AngularJS开发背后的故事,当初为什么发起这个项目? Top

AngularJS最初是作为一个编外项目(side project),当时我想去看看是否有可能让Web设计师(非开发者)只使用HTML标签来创建简单的应用程序。随着时间的推移,AngularJS演变成了一个全面的开发框架。

2010年是一个转折点,当时我正参与Google Feedback的开发。我们使用GWT进行开发,比较郁闷的是,开发速度和项目的进展比较缓慢。我意识到,我的这个编外项目也许可以让这个产品的构建过程快一些。随后,我将17K大小的基于GWT的应用程序使用JavaScript进行了重写,且代码只有1500行。这引起了很多人的重视,公司也开始资助我们全职开发AngularJS。

AngularJS的设计理念是什么?灵感来自于什么? Top

AngularJS遵循的设计理念是——构建UI应该是声明式的。

灵感来自于我之前在Adobe公司所从事的FLEX方面的工作。但是我还想要有大量的声明式UI,这也是AngularJS中标识符(directives)想法的灵感来源。

AngularJS是如何实现这一理念的? Top

我发现大多数人开始一个新东西时,往往会从他想到的有可能实现的方面入手,然后围绕它创建一个框架。而我更倾向于从我想要的东西入手,我认为某个想法很棒,就会朝着这个目标不断努力,直到实现它。起初,一些想法看似无法实现,但是随着时间的推移,你的一些技能也许可以让它变成可能。

例如:我想要实现不那么突兀的数据绑定,也就是说任何对象都可以进行数据绑定。但是当一个对象发生变化时,无法使用JS来获取通知。这样一来,大多数人就会认为这是无法实现的,他们会让你使用getter/setters来代替字段访问。

AngularJS的设计目标是什么? Top

首要目标是,使Web应用开发更容易,并在这个过程中使Web变得更强。

第二个目标是,向人们展示以这种方式来构建Web应用程序也是可能的。此外,还希望向人们传达一些关于测试、声明式UI和依赖注入方面的知识。

AngularJS项目的开发人员有几名? Top

最初AngularJS项目团队只有Adam Abrons和我两个人。但自从Google公司接管了这个项目后,目前团队人数已经达到了15人。

你们是如何解决AngularJS开发过程中遇到的困难的? Top

考虑你想要实现的东西,然后朝着这个目标努力。你或许不会得到一个非常理想的结果,但是这样会比你一开始就以能够实现作为目标的结果要更好。

AngularJS限定不能超过2000个绑定对象,有人将它视为编写大型应用的限制,对此您怎么看? Top

这不是一个硬性限制。要知道,Angular应用程序的性能与对象绑定数量呈线性关系。绑定的对象越多,应用程序的速度会变得越慢。

对于2000个的限制,我的看法是,这是你能够在一个页面上展示给用户的所有东西的数量限制。通过这个限制,刷新页面的时间可以减少到5ms以下。因此,性能的主要限制因素是人,而不是计算机。

介绍一下AngularJS的dirty-checking机制?其性能如何? Top

Dirty-checking是我们用来检测对象的变化的。我们仅在模型可能发生变化时运行它。这是一个事件驱动系统。

性能方面,如果对象的比较过程相对简单,那么进行1000次比较,在现代浏览器上可能只需要一两毫秒,所以性能真的不是一个问题。正如前面所提到的,性能的限制因素是人。

此外,这样做的好处是,你能够为你的模型使用纯老式的JavaScript对象。

哪些应用适合使用AngularJS?哪些不适合使用? Top

AngularJS可以很好地用来开发表单/报表类的应用程序,而这类应用程序在Web中所占比例高达90%。而如果你想构建一个照片编辑类的应用,你可能不会想去使用AngularJS。

Angular的未来会如何发展? Top

我们希望未来AngularJS能够更好地与Web标准看齐。我们还打算将AngularJS分解成大量的小型库,你可以将这些库集合起来使用,也可以单独使用某些库。

对于前端开发者,你有什么建议? Top

尝试去开发一些伟大的网站,让Web变得更美好。
  • 大小: 62.3 KB
  • 大小: 16.3 KB


评论 共 14 条
14 楼 bigtallhcy 2016-03-14 16:33
angular实现双向数据绑定实在是太好用了,特别是和Ajax一起来用,那叫一个快字!
13 楼 hantsy 2013-11-27 22:16
我写了一些 Samples,前端使用 AngularJS+Bootstrap, 不同的后端(Zend2, Grails, CakePHP)输出 REST API。

https://github.com/hantsy?tab=repositories
12 楼 jianggege 2013-11-08 21:38
感觉AngularJS的设计思想很好,效率很高,但是兼容性和网速慢加载问题需要解决。最近学习中 。http://www.mbaike.net
11 楼 dingherry 2013-11-07 22:30
1927105 写道
我纳闷了,这到底是CSDN专访还是ITEYE专访?

早就合体了,你不知道吗?
10 楼 xsh5324 2013-11-03 09:40
damoqiongqiu 写道
OReilly的《AngularJS》已由电子工业出版社出版
http://damoqiongqiu.iteye.com/blog/1965167

好书!!!超赞!!!
9 楼 damoqiongqiu 2013-10-26 12:35
OReilly的《AngularJS》已由电子工业出版社出版
http://damoqiongqiu.iteye.com/blog/1965167
8 楼 1927105 2013-10-14 18:26
我纳闷了,这到底是CSDN专访还是ITEYE专访?
7 楼 damoqiongqiu 2013-10-12 12:03
Tree型结构可以分分钟拖死dirty-checking机制,之前有人发过优化方案,希望开发者能注意到这个问题。
6 楼 liu3xing3long 2013-10-12 10:38
楼主好人啊
5 楼 witcheryne 2013-10-12 10:25
daquan198163 写道
d442579302 写道
MVW是啥啊,貌似脸搜都难搜到。。。

Model View and Whatever

哈哈!!!
全称听过,MVW简称第一次见到.
4 楼 daquan198163 2013-10-12 00:19
d442579302 写道
MVW是啥啊,貌似脸搜都难搜到。。。

Model View and Whatever
3 楼 smallboby 2013-10-11 21:43
d442579302 写道
MVW是啥啊,貌似脸搜都难搜到。。。

Model View Whatever
是不是这个https://code.google.com/p/dark-matter-data/wiki/MVWOverview
2 楼 d442579302 2013-10-11 18:02
MVW是啥啊,貌似脸搜都难搜到。。。
1 楼 d442579302 2013-10-11 17:41
正在学习。。。。。。  

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 个人总结笔记

    idea 快捷键大全 全文搜索 ctrl +shift +f 显示最近浏览位置 ctrl +alt +left 快速查找上次代码修改的位置 ctrl +shift +backspace 警告快速定位 shift +f2 打开引用该方法的方法 ctrl +B 快速定位方法 ctrl+ alt +b 从剪贴板中选择最近copy的内容 ctrl+shift +v 快速查找到引用该方法或者类的文件的位置 alt +f7 快速定位行 ctrl+g 快速替换ctrl+r 批量修改同个代码块的变量 shift +f6

  • 学习总结and感悟

    在这短短的时间内,我学到了enum这类的枚举函数,学到了函数的表达式及应用,明白了原来函数表达式定义在主函数int main类型之前,只需要设置好再进行调用就能运用了,十分方便~在游戏占比很少网课占比过多的时间中,我学会了均衡,游戏终究只是低级趣味是供人消遣的东西,更多的时间应该放在高级趣味上比如学习,搞钱等等,希望大家也会认清噢~最后我感觉自己还是有点实战经验不足,应该还要多刷题,特别是大题那种的经验过于缺乏了,明天找时间刷题!大家好~又是我啦,这是在博客写的第二篇文章了。

  • 学习笔记总结篇(一)

    文章目录一.c语言的概述二.数据的类型三.常用的输入与输出函数四.操作符五.选择结构(这里开始有示例代码)六.循环控制七.数组八.函数九.指针十.结构体与联合体十一.存储管理十二.文件十三.网络套接字总结 一.c语言的概述 1.c语言是一门通用的程序设计语言,它具有以下6种特点: (1.)高效性:因为它继承了低级语言(如机器语言等等),代码的运行效率高,具有良好的可读性与编写性。 (2.)灵活性:c语言的语法不拘一格,可以在原有的基础上自行定义,给了程序员更多的创作性与想象力。 (3.)功能丰富:除了基础

  • GoFrame带你从0-1快速入门

    由于项目的需要,自己开始了解GoFrame这个框架,网上没有视频学习,所以开始看官网学习,在学习的时候,感觉GoFrame真的是一个不错的框架,整理自己的笔记。大部分和github上的一样,但是本文进行整合,方便大家的学习。

  • JavaScript个人学习笔记总结 - underscore

    文章目录underscore1、Collections2、Arrays3、Functions4、Objects5、Chaining underscore 1、Collections 2、Arrays 3、Functions 4、Objects 5、Chaining

  • JavaScript个人学习笔记总结 - 快速入门

    文章目录JavaScript简介一、快速入门1.1 基本语法1.2 数据类型和变量1.3 字符串1.4 数组1.5 对象1.6 条件判断1.7 循环1.8 Map和Set1.9 iterable JavaScript简介 JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript ...

  • 学习日志 以及个人总结(第六天)

    /每次的和加上新的数 实现累加效果。n%2==1&&n%3==1&&n%5==1 //判断是否满足 //循环体。"语句"执行完,继续判断"表达式"直到,"表达式"为假,找出被2,3,5整除余数为1 的最小的十个自然数。++i) //一定范围。// 触发的那一刻没了 前面后面都有。"表达式"为假,while结束,程序继续往下。//前面的参与,后面的不参与。准备数据 //1.int n;先执行"循环体语句"之后,在判断"表达式"goto //被禁用 慎用。while(表达式)//不写分号。

  • 个人的笔记整理

    MQ怎么处理多余请求任务?监控 分区消费者不合理 宕机导致消息堆积 消息分布到指定的key1.使用JMX监控消息堆积数量 从两个维度 lag和leadLag就是消息堆积数量一旦出现 Lag 逐步增加的趋势,一定要定位问题,及时处理,避免造成业务损失。但是这种增长并不能很好提现问题的严重性,所以还有一个lead值。差值越来越小也就意味着消费者的位移快要低于分区位移马上要数据丢失了。

  • 如何解决GoLand2021版取消Go Module 以及Go get 因被墙下载gin失败

    如何解决GoLand2021版取消Go Module 以及Go get 因被墙下载gin失败 前言: ​ 今天的天气比较的阴冷,这种天气最适合坐在教室里学习,今天刚结束完自己的go基础就兴致勃勃的来学习gin框架,但上来创建一个Go module项目就发现我的GoLand没有这个选项,查了之后才知道最新版将这个功能整合到GO中了,于是我就又兴致勃勃的来学习gin框架,但又又被打脸了,Go get 因被墙下载gin失败。心想这才开始咋都是问题,本想找个伙伴问问,但一想中午一点多,大家都在休息,于是就自己在看

  • 2020个人年终总结

    2020年,平平淡淡的一年 工作方面 工作方面唯一有点成就感的就是带领一个7人小队进行开发,在开发的过程中还要做管理确实不是一件容易的事情。 能力方面 在综合能力上,前面也提到了稍微增长了一点团队的管理经验。 在技术能力上,今年就有点懈怠了;能回忆起来的也就只有两个地方了,第一个是把mybatis的源码看了一下,然后心血来潮写了一个半成品的ORM框架。第二个是总算把TDD的核心理解到了,也运用到了日常开发中。 生活能力方面,增加了一项驾驶能力,总算拿到驾照,并且买了一辆二手车练练手(主要是也买不.

  • 2021年度个人CSDN总结

    2021年度总结,希望下一年的自己变得更好

  • 实战之我的个人博客笔记

        写一个我的个人博客算是我的第一个完整意义上的Html+CSS的实战练习了吧,之前的一些实战小项目都是比较零碎的练习,只涉及一两个知识点。感觉多动手练一练还是比较好的,学到了很多布局的经验和一些新的知识点。我的学习过程是这样的:先是对着视频教程学习了一遍,然后再自己写一遍代码(自己从无到有写代码真的好艰难啊,不过写了五六个小时还好算是还原了出来,很开心啦)。今天就来梳理一下这一次实战练习学到...

  • 个人总结

    好像结课以来就没写过了,算是逃避吧,看了老师发的他们写的总结,可谓是一道见血吧。说出了我们所有人的状态,包括那自以为是的“小聪明”,一直把写博客这件事情当作是一种负担,而不是习惯。或者是为了让自己博客排名更加靠前一些,或者是当作作业去完成。 一直以来,我认为自己是所有人中最懒的那一个,本来就很菜,还不想去努力,有时真的想揍自己一顿。看着他们每次都在榜首,拿着题目的一血,一开始的时...

  • 个人学习总结(2017-04-24)

    还有10天出头离职,接下来要把bootstrap,jquery,backbone,原生js算法的一些东西过一遍 转载于:https://www.cnblogs.com/cumting/p/6759732.html

  • 计算机网络重点回顾

    计算机网络 一.计算机网络概述 计算机网络的概念:(*) 1.计算机网络的定义: ​ 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路链接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 2.计算机网络的组成: 终端系统/资源子网:提供共享的软件资源和硬件资源 通信子网:提供信息交换的网络结点和通信线路。 3.计算机网络的类型: 按照拓朴分类: 星型结构 树形结构 总线型结构 环形结构 网状结构 按照范围分

  • 个人笔记

    在搜索框中输入inurl:*.jsp:查找所有地址栏中.jsp结尾的内容

  • java list类型参数_java – List是一个原始类型.引用通用类型List应该参数化

    List is a raw type. References to generic type List should be parameterized不是错误,而是一个警告.理解泛型是一个基石,如果你打算使用Java,所以我建议你应该检查java的教程页面:所以如果你知道在publiesdList中包含什么类型的对象,你可以这样做:List synchronizedpubliesdList = C...

  • java判断对象所属类型

    使用instanceof 关键字 List<String> list = new ArrayList(); System.out.println(list instanceof Collection);//true

  • java 获取方法返回值list中的类型

    周末写了个小功能,有部分指定请求不走mybatis, 而是走其它http数据服务接口,需要判断dao接口方法中的返回值,来进行赋值. public interface LanguageDao { /** * 查询当前配置的语言 * @return */ List<LngLanguage> queryLanguageList(); } ...

  • java+sql server项目之科帮网计算机配件报价系统源代码.zip

    sql server+java项目之科帮网计算机配件报价系统源代码

Global site tag (gtag.js) - Google Analytics