① 《AngularJS权威教程》pdf下载在线阅读,求百度网盘云资源
《AngularJS权威教程》([美] Ari Lerner)电子书网盘下载免费在线阅读
资源链接:
链接:https://pan..com/s/1xdVsoDN5VG2vlOuWSkkXGQ
书名:AngularJS权威教程
作者:[美] Ari Lerner
译者:赵望野
豆瓣评分:7.3
出版社:人民邮电出版社
出版年份:2014-8
页数:476
内容简介:本书是资深全栈工程师的代表性着作,由拥有丰富经验的国内AngularJS技术专家执笔翻译,通俗易懂、全面深入,是学习AngularJS不可错过的经典之作。无论是出于工作需要,还是好奇心的驱使,只要你想彻底理解AngularJS,本书都会让你感到满意。
本书将涵盖AngularJS的如下概念。
双向数据绑定
依赖注入
作用域
控制器
路由
客户端模板
服务
通过XHR实现动态内容
测试
过滤器
定制表单验证
深度测试
定制指令
专业工具
对IE的支持
作者简介:作者简介:
Ari Lerner
是一位全栈工程师,拥有多年AngularJS经验,自办并运营AngularJS电子报ng-newsletter.com,在着名硅谷工程师培训学校Hack Reactor担任AngularJS讲师。他的工作涉及软件开发的各个层次,包括基础设施开发、前端应用开发和性能优化。他目前住在旧金山一个阳光明媚的地方,还是FullStack.io创始人。
译者简介:
赵望野
前端工程师,前端基础技术组leader,曾经负责豌豆荚2.0的前端架构设计和主要开发工作,目前负责Front-end Technical Infrastructure的建设,在工作中有丰富的AngularJS使用经验。新浪微博@赵望野。
徐飞
2005年至今一直从事企业应用前端架构,对富因特网应用有较深刻的认识,致力于前端的高效开发,研究过Backbone和AngularJS的源码,翻译过讲解AngularJS基本原理的文章,对脏数据检测和基于存取器两种监听方式的差异有深刻认识。
何鹏飞
网名basecss,目前就职于腾讯CDC,任前端工程师。喜欢阅读,喜欢前端技术,崇尚开源。工作之余翻译过Grunt和Lesscss相关文档,同时也是Lesscss中文社区贡献者。
② 如何评价淘宝 UED 的 Midway Framework 前后端分离
【贺师俊的回答(17票)】:
泻药。
1. 这系列文章写得很好。
【注意,熟悉我的同志应该知道,我极少给出“很好”的评价。】
2. 这系列文章以及其背后的实践重新树立了淘宝系前端工程水准的领先地位。
【在此之前的一段时间内,至少从外部来看,淘宝已经落后于狼系和企鹅系了。】
3. 这系列文章及其背后的实践也证明了nodejs对于前端来说不仅在工具链而且在架构层面的意义。
【注意,这系列文章中的思路其实并不新鲜,但是在淘宝这样规模而且业已非常成熟的产品中实施这样的转变,我认为是具有标志意义的。】
4. 具体细节上仍有许多改善空间,如此系列的第4篇《前后端分离的思考与实践(四)》在防御XSS时还是存在一些传统问题。这方面在参加杭JS的时候,我跟淘宝的herman同学有过沟通,具体就不在本问题展开了。因为这是局部问题,对整体架构影响不大。
5. 注意,以上评价的都是架构,或者说是思路。实施效果是不是好,我相信他们自己的说法。但Midway框架本身因为没有看到具体文档和代码,而且其开发的目的首要是满足淘宝的需求,因此其本身或其具体组件是否在普遍意义上适用和优秀,无法作出判断。
【徐飞的回答(19票)】:
早上看到贺老出马,也忍不住写了一篇来谈一下苏宁这样的公司对这方面的考虑。
近两年来,我一直在思考如何改进前端体系的开发模式,这里面最基础的一点就是前后端的分离。谈到前后端分离,也有一个误区,认为仅仅是以浏览器作分界,把这两部分的代码分离出来。但其实是,做这件事情的本意,是要解决开发模式的问题,也就是要分离前后端开发人员的职责。
针对不同类型的Web产品,这个分离方式是有所不同的。对于Web应用,因为它跟服务端的交互基本就是AJAX或者WebSocket接口,所以这个分离是天然的,整个前端基本都是静态HTML模板,JavaScript模块,以及CSS和相关静态资源,但是对于网购产品这样的形态,它的做法就不一样。
## 展示占主要部分的产品
网购产品的展示需求很重要,图片等资源载入非常多,但相对的操作却很少,基本只有搜索商品,加购物车,结算这样的环节。传统这样的产品,多半是这么个工作流程:
交互出高保真图,前端去切图,生成静态HTML加展示效果,然后,注意,他不是自己接着往下做,而是交给另外一群开发人员,把它转换成服务端模板,比如freemarker或者velocity之类,或者是smarty,为什么要这么做呢?因为这类产品讲究一个首屏优化,是首屏而不是首页,这就意味着对于首屏来说,经过的环节应当尽可能少,比如说,就不能先载入客户端模板,再AJAX一个数据,然后去渲染一下。这么做的性能肯定是不如服务端把HTML生成好,然后一次请求加载的。
这个过程肯定是有一些问题的,比如说,如果开发人员B在套模板的过程中,发现原先的静态HTML部分有问题,应该怎么办?大家知道,一个对HTML和CSS都很熟悉,同时又可以写业务逻辑的前端开发人员是很稀缺的,所以,多数情况下,这两边的技能是不同的,如果是简单的页面问题,这个开发人员可能自己也就解决了,如果他解决不了,怎么办?
如果B自己不改,把他已经搞成服务端模板的代码返回给前端人员A,A也没法下手,因为已经是服务端模板,A手里没有环境,改了之后不知道对不对,不能预览。那么,B把问题告诉A,A修改他的原始版本,然后再拿给B又怎样呢?这时候B又麻烦了,他要对比两次修改的部分,把自己前一阵的修改合并进去。
所以,不管怎么搞,这里面都很折腾。
Midway这个产品,他想要解决什么问题呢?既然说前端人员没法预览模板的原因是,后端在使用服务端模板,那么,我能不能找一种两边都可用的模板,你能在服务端渲染,我也能在客户端预览?服务端跟浏览器端同时都能运行的语言是什么?只有JavaScript。
所以,大家就往nodejs里面去发掘了,一个普通的JavaScript模板库,它在浏览器端也可以渲染,在nodejs端也可以输出成HTML,这时候,那些原来负责整合模板和逻辑的人员改用nodejs,是不是就解决这问题了?
想象一下这个场景多么美好:前端来决定某个模板是服务端渲染还是客户端渲染,当首屏的时候,就在nodejs里面生成HTML,不是首屏的时候,就AJAX过来在浏览器端渲染展示。
从技术方案上看,这么做很好了,工程上又带来另外一些问题,那就是对熟练JavaScript开发人员的需求量大增。对阿里这样的公司来说,前端有大几百人,别的公司只能仰望,所以他当然可以放手一搞,但对我们苏宁这样,前端人数不大的,就麻烦了。如果我们也引入这样的方案,就面临把很大一部分Java开发人员转化成JavaScript开发人员这么一个问题,这个事情短期内肯定是无法解决的,所以反过来会增加前端这边的压力。所以暂时还用不了阿里这样的方案,只能努力先提高人员水平再看情况。
服务端引入nodejs还有别的优势,比如说请求合并等等,这个也可以用其他方式变通解决,比如加一个专门的跟现有后端同构的Web服务器,在那边干这些事。
## 展示和业务逻辑较均衡的产品
对于另外一些场景,也有类似的问题,比如支付产品,展示相对没那么重,但是又算不上Web应用,它面临另外一种情况的前后端分离。这种场景下,前端的出静态HTML和DOM操作类的JavaScript,业务开发人员负责写后端,还有另外一部分业务逻辑的JS。
这里的问题是什么呢?是jQuery式代码造成的协作问题。比如说:
$(".okBtn").click(function() { $.ajax(url, data) .success(function(result) { $("someArea").html(_.template("tpl", result)); });});
因为前端人员的稀缺,所以他不可能帮你把业务逻辑写出来,所以说,这里面$.ajax往里的部分,要业务人员自己写。然后,数据得到之后,又要去处理界面部分。
很多场景下,处理界面远不是这么搞个模板放上去就完事的,所以业务开发人员感到很烦闷,为了这么一点小问题,反复去找前端的人来搞,很麻烦,自己搞又特别花时间,所以都很苦闷。
这同样是一种前后端的分离,只是这个分界线不在浏览器,而在于:是否写业务逻辑。对付这种场景,解决办法就是加强JavaScript代码的规划。现在流行那么多在前端做MV*的框架,不考虑Angular这类太重量级的,来看看Backbone这样的,它到底解决了什么问题?
很多人说,Backbone虽然小,但根本不解决问题。这句话有一定道理,但前提条件是你自己的JavaScript代码分层已经做得很好了。如果做得不好,它就可以协助你解决分层的问题。
刚才那段代码,它的问题在哪里呢,在于职责不清晰。一个函数只能做一件事,这是共识,但由于回调等方式,所以不经意就破坏了函数的单一性、完整性。我们试试来拆开它。
对于一个后端开发人员来说,他为什么常常害怕写前端代码?是因为JavaScript语言吗?其实不是,我们用来写业务逻辑的时候,只会使用JavaScript一个很小的子集,对于这个子集来说,它并不存在多大的学习困难,最麻烦的地方在于DOM、BOM等东西,对于一个后端开发人员来说,如果要求他在掌握服务端代码编写的同时,还要去学这些,那真是有些不容易,所以,我们来给他省点事。
现在我们的出发点是,把这段代码拆给两个不同的人写,一个人操作DOM,另外一个人只写逻辑,绝对不操作DOM。前面这个代码拆给前端维护,后面这个拆给业务开发人员。
最老圡的方式:
a.js
$(".okBtn").click(function() { b1(data);});function a1(result) { $("someArea").html(_.template("tpl", result));}
b.js
function b1(data) { $.ajax(url, data) .success(a1);}
现在大家是不是相安无事了?
如果这么做的话,AB双方要做很多约定,也就是说,这个过程仍然是一个螺旋链。比如说,A先写点击事件的绑定,然后想起来这里要调用一个请求,就去找B写b1方法。B在写b1的时候,又想到他要调用一个界面展示方法a1,然后又来找A写,来回也挺折腾。
况且,有这么一天,A在另外一个地方也想调用b1了,但是由于b1的回调已经写死了,比较蠢的办法就是在a1里面再判断,这是什么东西点击造成的,然后分别调用不同的回调。如果情况复杂,那这个代码写出来真是没法看。
如下:
a.js
var type = 0;$(".okBtn").click(function() { type = 1; b1(data);});$(".okBtn1").click(function() { type = 2; b1(data);});function a1(result) { if (type1) { $("someArea").html(_.template("tpl", result)); } else if (type2) { // ... } type = 0;}
b.js
function b1(data) { $.ajax(url, data) .success(a1);}
稍微好一些的办法是,在b1中,直接返回这个请求的promise,这样可以由调用方决定到底该干什么。
如下:
a.js
$(".okBtn").click(function() { b1(data).success(function(result) { $("someArea").html(_.template("tpl", result)); });});$(".okBtn1").click(function() { b1(data).success(function(result) { // ... });});
b.js
function b1(data) { return $.ajax(url, data);}
如果要对返回数据作统一处理,也可以很容易地在b1中,用promise重新封装了返回出来,只不过这样在a.js里面,直接调用的就不是success,而是then了。
注意到这样的代码还有问题,比如说大量的全局函数,不模块化,容易冲突。此外,没有一个地方可以缓存一些共享数据,比如说这么一个场景:
界面上两个块M和N,其中,M初始载入并加载数据,N在初始的时候不载入,而是在某个按钮点击的时候载入,而M和N中各有一个列表,数据来源于同一个服务端请求。
现在就有个问题,当N载入的时候,它的数据怎么来?比较老土的方式,肯定是载入N的时候,同时也再去请求一下数据,然后渲染到N上。
从一个角度看,如果说不重新请求,N的这个数据应当从哪里来?从另外一个角度看,如果重新请求了,发现数据跟之前的产生了变更,是否要同步给M,怎么同步给它?
我们看看类似Backbone这样的框架,它能提供怎样的机制呢?或者如果我们不用它,怎么自己把这个分层封装得更好一些?
首先,是建立一个数据模型,在它上面添加数据的缓存:
define("model", [], function() { var Model = { data: null, queryData : function(param, fromCache) { var defer = q.defer(); if (fromCache || this.data) { defer.resolve(this.data); } else { var self = this; this.ajax(url, param).success(function(result){ self.data = result; defer.resolve(result); }); } return defer.promise; } }; return Model;});
这么一来,我们在模型上作了数据的缓存,如果调用的时候加fromCache参数,就从缓存读取,否则就请求新的。为了在两种情况下,调用方接口能保持一致,把整个函数封装成promise,以便接着调用。这里的模型定义成单例了,假定是全局唯一的,可以根据需要调整成可实例化的。
这个时候,视图层就要封装DOM和事件的关联关系:
define("view", ["model"], function(Model) { function View(element) { this.element = element; this.element.selector(".okBtn").click(function() { var self = this; var fromCache = true; Model.queryData({}, false).then(function(result) { self.renderData(result); }); }); } View.prototype = { renderData: function(data) { this.element.selector("someArea").html(_.template("tpl", result)); } };});
这个时候,多个视图实例的情况下,数据也能够较好地利用。
这样,前端写这个View,后端写Model,可以作这么个分工。
这个只是很简陋的方式,在复杂场景下还有很多不足,在这里先不展开了。更复杂的场景也就是类似Web应用那种方式,稍后专门写一篇来展开。
## 小结
我们再来回顾前后端分离所要解决的问题,是分离前端和业务开发人员的职责,这个方案怎么定,是应当随着团队状况来确定的。比如阿里前端厉害,人多势众,他的前端就要往后推,去占领中间层。我们苏宁这样的公司,前端比较薄弱,只能在很多场景下,让出中间层,否则战线铺太广只能处处被动。
同一个中途岛,在不同的形势下,占还是不占,是很考验前端架构师的一个问题。
对阿里的这种实践,我们会持续围观,寻找并创造合适的出手时机。
【rank的回答(4票)】:
简单说下自己的看法。
前端不再继续“单纯”在 kissy 上下功夫,而可以考虑向后的延伸架构是一种前端的进步,这种前端架构将重定义阿里的前端工程师工作,很多互联网公司比阿里先行一步。
这个思路与与最早阿里很多前端没有碰后端(例如模板)有很大的关系,用 NodeJS 作中间层能解决现面临的问题,是一种不限于解决当前问题的长远解决方案。
具体是否能解决和解决得好,在于细节,不在新,而在过渡。如,如何过渡目前 NodeJS 与原来的数据交互,如何灰度过渡,工作量等。
平台化与接口化思路(后端数据接口以 Services 存在)让 amazon 收益非浅,现在后端平台化接口化在大公司趋势明显。
平台化需要更多更快的应用层开发选型,NodeJS 是不错的一种。NodeJS 虽然还是有些问题,但从信息面与我们自己的应用经验来看,已有慢慢成为后端 WebApplication 的一种很好的选型方案的趋势。
总的来说,是个趋势。
【Hex的回答(1票)】:
我认为这就是所谓的大前端开发模式。模式确实是好模式,但是真正实践起来,和后端工程师的沟通和协调也会遇到很多问题。
我做过的几个项目都是采用这种大前端的开发模式,前端基于Transformers框架+CodeIgniter组成大前端,这样确实可以很好的隔离前后端,项目可维护性大大提高。
【邓欣欣的回答(1票)】:
上周去杭州玩了下,和之前的阿里同事做了些技术交流,发现这一年,阿里的前端在流程改进上下了很大功夫; 题主所说的中途岛应该是 UDC 团队做的,应该说思路不是很新鲜,国外有 ebay 向 nodejs 的转型案例,国内之前也有网络音乐移动端的案例;
但对阿里前端来说,意义确是很重大,解决了合作流程中的一个很大问题:之前阿里的前端是只写静态 demo,写完给开发套模板,开发不太懂 html,漏写个标签,然后找前端调试,一来一去很折腾,是个必须干但又是个没啥技术含量的事; 中途岛可以很好的解决这类蛋疼事,但是请不要认为前端就因此会后端了,无非是之前浏览器用 ajax 请求接口,现在咱用 node http去请求呗,框架做得牛逼点,统一适配出前端的ajax 接口也不是不可能呀~~,想想嘛,为啥要用 node 呢? 牛逼直接写 java 啊。。哈哈哈~
其他的 F2E 团队也做些很不错的流程改进工具,同样不是很新鲜,但对阿里前端都是比较有意义的工具:
def: 项目构建与发布工具,与阿里的 gitlab, scm 整合,各种 脚手架,build,combo,发布,一条命令搞定,确实很方便;
dip:数据接口平台,定义业务线前后端数据格式的一个内部公共平台,基于 json-schema,好像也可以给你提供 mock 接口;
uitest:前端持续集成平台;之前这东西我是边做边吐槽的,似乎刚上线,类似 jenkis 这些,提交或者发布代码时,先帮你跑一次测试用例;目前通用测试库比较少。
Trace:好像是叫这个名字吧,监控平台,这个比较早就有了,用来监控各个业务线页面的运行状况并搜集各种用户数据,如分辨率,UA
我看来 def 和 dip 对阿里前端的作用会更大些,uitest 估计作用一般,阿里前端是不注重代码质量的,测试用例也仅在几个重要的直接影响交易的业务线会写。
【许文敏的回答(0票)】:
确实不错,从职责上来区分前后端分离才是王道,nodejs将成为前端工程师的基础技能
【猎人豆豆的回答(0票)】:
不要把简单的问题搞复杂,对于淘宝这样规模的公司,有些牵一发而动全身的改动,最好是在权衡风险和收益后再决定,我们是技术的使用者,而不要被技术牵着鼻子走.
【罗正烨的回答(2票)】:
前面前端的大牛们都说了,我换个角度聊聊。
这么讲吧,阿里的前端为什么比其它公司走的远,是因为他们有很多前端,还有很多不用写大量业务逻辑的前端大牛。大牛的作用,就是折腾。阿里的前端工程师水平在自身领域实践上已经跟得上后端。
但这个架构所谓的分离,其实是把很多原来前端不需要做的事揽到了自己的手上,增加前端架构师的KPI,让前端做了更多的事,周报好写。因为nodejs和前端都是js,所以学习成本并不算高,但是对一个技术人员的要求是比原来更高了。
但是,他们团队有很多HC,有很多钱。。所以像我这种一个产品线只有一二个前端的,要是这么玩儿,招人跟不上不说,然后还可以把自己累死。
所以技术选型和架构这种事,还是要根据自己团队的能力和招人啊。
③ 如何评价 Angular 2.0 Final Release 的发布
作者:徐飞
链接:http://www.hu.com/question/50666914/answer/122280198
来源:知乎
着作权归作者所有,转载请联系作者获得授权。
1. 从整体上讲,ng2概念还是偏多的,但这不算问题,因为他面向的主要还是大型企业软件用户,这类群体根本不介意概念再多一些,也不怕设计模式,所以,如果是to C的场景,选择它的可能性不会很大,但是在to B的场景中,或者一些内网应用,还是比较容易获得一些认同的。
2. TypeScript。关于是不是要使用TS,不同的人有不同的见解,很多人觉得这是多此一举,自找麻烦,但如果结合上面提到的它的目标受众的话,还是有比较重要的价值的。这个群体普遍会觉得有类型约束会对生产力提高有帮助。
3. RxJS。它深度绑定的Rx,仍然是一个比较有争议的东西,因为它概念上有一个接受门槛,对初学者并不友好,但仍然考虑它所面临的群体,Rx在.net和Java开发者(尤其安卓开发者)中,普及程度要比在Web前端高多了,而且Rx本身带来的很多优势,能够解决业务上的很多问题,尤其是大量的异步过程组合的问题,此外,有了这么个东西,也可以不需要别的平台里的rex这类东西,就能处理好数据的流动和组件之间的通讯问题。如果能接受这些,那就能够理解前面提到的TS的问题。如果写RxJS,但是不用TS,那就太为难自己了。多个流组合之后的结果,如果能直接看到类型,对生产力还是比较有帮助的。
4. 组件编写的语法。在这个点上,是存在不少争议的,比如说,组件类是否应当是class这种形态?组件的实例化过程,是否也能跟正常的constructor这类东西混合在一起,以增加更多的控制力?Decorator的写法是不是分离出一些东西,让主流程更清晰?我个人是比较倾向于class的写法,所以,我们mobile版,用的是vue,但是用了ts和rxjs,也使用了一些decorator,不注意看的话,可能会以为写的是ng2。
5. Directive。我之前看到某些问题的回答下面,有人提到几个问题:
- ng1引入的directive概念是完全没用的
- ng2是不能跟jq结合,对jq很不友好的
我来解释一下我的观点,后面提到的directive特指attr形态的directive,因为在ng2里面,component还是一种directive。这种attr directive是必要的,它存在的价值是对普通components的补充。因为在组件化体系里,除了“组件”,还有“行为”,行为也是一种形式的组件。
举例来说,如果是界面的组件化,普通人可能都很容易理解,无非就是按照功能切分界面块,不管切得好不好,一般都能像模像样。这时候我问你个问题,如果有一个行为:当鼠标移动到某个组件上,这个组件就展示某种形态的边框。这种应该在代码中被定义成什么东西?
所以,如果你从这个角度理解directive,就可以认识到,把这段东西封装成一个directive,然后加到那些你想有特定行为的组件上,就可以完成想要的功能了。例如:
<button hover-border>a</button>
<todo-list hover-border></todo-list>
这里的hover-border就是一个directive,跟component是正交关系,作为组件的一个修饰,对其功能进行增强。
这时候我们再考虑下,ng体系是不是对jq很不友好?其实不然,你大可以在directive内部去基于dom做某些事情,只不过在ng1里面,你是可以直接在这里用jq,而在ng2里面,是使用ComponentRef, ContentChildren之类的东西去操作组件内部的DOM,并不影响使用jq的一些东西,在跟jq的结合容易程度上,ng跟vue肯定要比react好。
6. Pipe。这个东西,你也可以理解为对filter的一个改名,当然它能做的事情是要多不少的,我举一个比较有价值的东西:async。这是干什么的呢?
<todo-item *ngFor="let todo of todoList" [todo]="todo"></todo-item>
这句里面,todoList是不是必须存在?如果不存在,我们是不是要预先定义占位变量之类?不然就要写ngIf来区分不存在的情况。(当然ng1里面可以不写,空对象异常会被框架吃掉,这是很方便,但是对排错不利)。
但是借助async这个pipe,你可以把这么几种类型绑定过来:
<todo-item *ngFor="let todo of todoList$ | async" [todo]="todo"></todo-item>
这个todoList$可以是:
Todo[]
Promise<Todo[]>
Observable<Todo[]>
也就是说,你可以直接把一个异步的东西绑来这里,它自动帮你做resolve或者subscribe之类的事,这样你在组件类里面就会比较省事了。如果你整个应用是深度使用了Rx的,那在这里省事的可不止一点点。为此,我们也在vue上面做了点改造,这样移动版本也能用类似的方式在模板上绑定Observable。
7. DI和NgMole。说实话,对这两个东西,我是有一定保留的。我当然也知道DI能让很多事情变得方便,但是考虑到一个问题,在前端做DI,绕不开异步加载这么一个坑,当DI和异步加载碰到一起,就比较折腾了。如果说,为了这个,还需要在mole那里再搞什么factory,还要再考虑异步什么的,我心里是有些抵触的,所以对rc5这个版本非常不满,因为这个版本把ng1的mole又用不同的方式拿回来了!
我理解它这么做的用意,除了解决异步DI的问题,还用一定的方式去约束业务代码,包括第三方库的一些组织方式,从而尽可能避免命名空间冲突,比如说,组件在模板中使用时候的命名冲突,引入两个库,都有<my-button>组件这类问题。
但我觉得,这个事情还是没法彻底解决,不光ng没彻底解决,别的框架可能都没尝试解决。这也就是ng2团队考虑得多的地方,因为他是站在一个大型软件开发框架的角度去看待这些问题,这些东西可能勉强解决了那边的问题,但同时,对小型应用的开发团队带来了很多麻烦。
另外,rc5因为引入了NgMole,所以依赖关系的定义也跑到mole这一级了,这让我非常不满,之前在组件上显式定义所有依赖,哪怕连内置的ngFor,ngIf都要定义,我都能忍(当然后来不用了,可以指定到全局去),因为我这么麻烦地定义了组件之间的依赖关系,就可以精确跟踪整个项目的依赖状况,用一种图形化的方式去看这些关系,类似这个:GitHub - manekinekko/angular2-dependencies-graph: A simple tool to draw a component dependencies graph of an Angular2 application. 这是非常有用的!然而现在只能跟踪到mole级别了。
8. 数据的变更检测机制。可能ng1的变更检测已经比较变态了,因为他监控DOM事件、AJAX、定时器等等,在每个可能导致数据变更的地方去做数据比对,可能不少情况下,会导致性能的一些问题。在ng2里面,它竟然是朝这个方向更加进一步了,用了zone这么bt的东西,监控更多东西。但是,注意到,这里它的变更检测策略是不同的,不再会去傻傻检测整个scope树,因为这次没有$scope这种东西了,数据是直接挂在组件这个级别的,所以有机会在数据变更的时候,禁用某个树枝上的所有数据变更监测,从而提高效率。细节可以参照我们团队太狼同学的这篇回答:https://www.hu.com/question/46662780/answer/102300661
9. 性能,所以,我也要提一下性能。为什么这么晚提,因为这个东西没那么重要。只要能减少大多数无效的数据diff,性能都低不到哪里去,只要性能在一个数量级,都不是大问题。现在,ng2,vue,react这些东西,性能其实是一个数量级的,纠结谁比谁快30%或者50%都没有那么重要的,该卡的地方,大家都卡,该流畅的时候,大家都流畅。适当优化自己的数据组织、渲染过程才是正道。另外,ng1也不慢啊,其实也在一个数量级上。这么多人不喜欢它,难道是因为性能?
10. 体积。虽然能摇树,ng2的构建大小还是有些大,不过在to B这个场景,这不算问题。如果做mobile开发,直接打在应用内部,也没什么,那些做轻应用的要慎重。我们也是基于这个原因,在mobile版选择了vue,没有敢选它。
如果是做桌面软件,配合electron使用的话,还是不错的,这些都不用管。
其他么,有一些细节待探讨,比如router只有Observable形态的接口,但是里面有些东西又是转成Promise之类,就不吐槽了。至于网络请求这块,我们是自己做的,没有用ng自己的,因为我们是这么一种搞法:
- 通用的数据层,ts + rxjs构建,这层多做了很多事情,而且是视图层框架无关
- PC端,ng2
- 移动端,vue + ts + rxjs (除了我们,估计你也找不出其他家这么用的)
④ Angular js 初学者该看什么书
建议先把基本的知识过一遍,留下印象比较好。(其实一开始带着问题去学也难受,问题太多了,带着带着就忘了)
1.推荐《angularjs权威教程》(它的英文名就是ng-book),讲的非常详细,对初学者非常友好,而且内容还算新。至少我这本里面有关于angular1.3的内容更新(现在1.3是最新稳定版)。而且译者本身也是前端的大牛:赵望野、徐飞和basecss(何鹏飞)。这里我就不@了。
2.推荐但又不太推荐《精通angularjs》,个人觉得对初学不太有利,因为它的例子不完整,或者说很散,一个完整的例子被拆成很多片段,你得时常前前后后翻十来页去看代码的上下文。不过对于angular基础概念都熟悉的人来说,可以接受吧……书还行吧……
3.视频教程。前面有回答说淘宝有惊喜的,于是我淘宝了一下,发现所谓的视频教程其实就是大漠穷秋老师在慕课网的授课教程 AngularJS实战丨章节 其实是免费的,所以不必花冤枉钱了。另外,youtube上面也可以搜到一些入门教程,我看了几个,还不错。
⑤ vue,angular,avalon这三种MVVM框架之间有什么优缺点
使用Object.defineProperties、 VBScript、 Object.observe,纯事件驱动,兼容IE6,DOM的兼容性处理可与jQuery媲美,体积少 早期的四大MVVM框架,都有大公司引衔: angularjs google出品,思想来自flex,IoC, 脏检测,自定义标签,受限于绑定数
⑥ 有谁知道:当老板开始怀疑总经理时,事事有些防备时,但是表面上又对他不错,请问还能在这干吗
成语故事----犯罪嫌疑人盗斧
曾几何时有一个乡下人,扔斧头。他以为是邻居的儿子偷了所以要注意世界各地人的言行,一举一动,可想而知,人们像盗斧贼。后来,投掷斧头斧头,原来是在山谷中不慎丢失,前几天他在山上的柴火。找到一把斧头,他跑进一个邻居的儿子,然后小心地看他一眼,怎么样一个小偷。
可疑邻盗斧:不注重的事实根据的人,胡乱猜疑的事情。
揠苗助长
春节和春秋时期,宋国有一个农民,他总是怀疑作物的田间生长速度太慢,看看今天,明天,看,我觉得苗似乎总是没有长。他想:有什么办法使它们更高,更快?
有一天,他来到田间地头,苗一拉。的大苗,AA拉真的有很多的努力,他拉过苗,已经破旧,但他很高兴。回到家里还放言:“今天我累了,我帮助苗长高了几英寸!听了他的儿子,赶紧跑到田里去看苗在田间地头有枯萎
无望
周代位的清施凡主主诗,不仅,而且也很好的治理国事。后来,他协助,围绕周厉王国事。然而,周礼不枉费交叉霸气和变态违法的事情。叛徒所有Zhoumei各种请在主直言不讳地劝说弊端的政治事务中的列数,叛徒在周厉王耳边说他的坏话。周厉王博,很累了,从那时起,叛徒庭外和解,其中博放在眼里。主要表达厌恶,写了一首诗,后来收入“诗经”批评的诗叛徒说:“各种邪恶,屡教不改!“
屡教不改:,生病服药不能保存。后比喻不好的东西要省着点。
风和海浪
古代北方和南方宋将军的状态姓氏取名夏悫,他从小就很勇敢的和雄心勃勃的一天,阙叔叔问他是否有任何野心,却回答说:“可借风,破万里浪”是指:我有突破一切障碍向前发展,建立一个企业。阙经过辛勤工作和实践,努力工作,并最终成为一个能征善战的一般。
后来,人们用描述的“风和海浪”不怕困难和锐意进取的精神
5。一衣带水
北方和南方,北方,北周代陈国和南方长江为界。
北周宰相杨戬,废昼迪,当皇帝,建立了隋朝。
他决心要灭掉陈,他说:“我的父母在全国各地的人,是因为有是一个像她带横跨长江窄,就看着南方的人患有救不了他们?
后“一衣带水相隔只有一条狭窄的水域作为一个比喻,非常接近的两个
6山高山流水
弹簧和秋季时代,有个叫俞伯牙,精通音律,精湛的钢琴演奏,是一位着名的音乐家俞伯牙年轻的时候好学,有分工虚高琴技达到水平,但他总觉得自己还不能出神入化性能的各种事物的感受。传说中的老师知道他的想法,拉着他的船到中国东海的蓬莱岛上,让他欣赏大自然的风光,聆听大海的波涛声。扫描地平线伯牙,看到汹涌的海浪,喷激溅海鸟翻飞歌耳山和树木,郁郁葱葱,如入仙境一般的奇妙感觉油然而生,耳边仿佛稍微自然和谐动听的音乐,他无法帮助土地博雅的钢琴演奏,声音休闲反过来,大自然的美丽,到了钢琴的声音,体验到前所未有的水平。老师告诉他:“你必须去学习。
夜博雅乘船游览面对清风明月,他思绪万千,他开始弹钢琴,琴声悠扬,渐入佳境。突然,他听到哇雅文的声音从船上岸边,只见一个樵夫站在岸边,他知道此人当即请樵夫音乐会在船上,兴致勃勃地为他演奏。伯牙弹起赞美高山的曲调,樵夫说:“我真的很不错!庄严肃穆,像一座巍峨的泰山!”当他被打的表现汹涌的波涛时,樵夫说:“太好了!宽广浩荡,好像看见滚滚水,无边无际的大海!“雅令人兴奋的颜色,激动地说:”演唱会!你是我的灵魂伴侣。“樵夫钟子期从此,他们成了很好的朋友。
故事出自“列子·汤问。成语”山流水“的比喻朋友或知己,也用来指音乐美丽
字师
指校正的文章一个非常关键的字老师
宋涛悦语言“,历史的五代补”
唐时期,非常繁荣的时期,中国的封建社会,文学和艺术的发展也很发达,其中最具代表性的诗歌不仅是诗人,诗,而且在艺术含量都很高。
无数诗人的诗人叫齐一直在旷野雪后的一个冬天,他看到傲雪开放的梅花诗兴大发,创作的“早梅”诗,咏诵早开在冬季梅花诗两首写:超越村,昨晚,开分行数是书面的,他感到非常满意。
一个名叫郑谷,齐诗后写这首诗的意思是不是完全,所以他经过反复的思考推敲,雪这首诗改变:超越村,一个开放昨晚的雪,因为他认为,自号梅花分行是开放的,不能算是早梅花
郑谷的这种变化,虽然只是应阅读这个词只有一个字母的变化,但同时尽显“早梅”更恰当地描述问题的意义,诗的意境更加完美。齐郑谷的变化佩服郑谷,说是单词'
8。奉献
曾经有一个名为秋季熟练的棋手,他的棋艺高超。
秋季两个学生一起学习下棋与他的学生之一非常集中精力专注与老师和其他不,他认为,学下棋很容易,并不需要认真对待。老师解释,虽然他坐在那里,眼睛喜欢看着一个棋子在他的心里在想:如果到野外拍摄下来大雁,好一顿不错。“,因为他总是胡思乱想心不在焉,老师的讲解也没听进去
结果,虽然两名学生与老师的教导,但一步前进很快成为一个国际象棋实力的手持式,和其他没有学过一点点技巧。
回答者:的_文_WEN_ - 见习魔法师两个2-25 13:29
你想要什么
孙杨的儿子“,通过阅读他的父亲马,索马轻松,他拿着这本书找到一匹好马。根据这本书中的照片,一事无成。书中所写的特征,寻找,终于找到了千里马的特点,很像一只蟾蜍蟾蜍书会很高兴带回家,对父亲说:“爸爸,我找到一匹千里马,但蹄子稍差。父亲一看,哭笑不得,没想到儿子竟如此愚笨,他幽默地说:“不幸的是,这匹马是太喜欢跳拉车。”然后叹了口气,说:“所谓还找什么你想要的。
南柯一梦成语
疑惑:描述一个很大的梦想,或者比喻徒劳喜悦。
成语的:唐李公佐“南柯太守传
>成语:淳于棼唐朝一次,因为他喝醉了,忍不住在院子里的槐树下分手,没想到他睡着了,在梦中,他看到了楚怀王参拜派人来接他前往淮参拜,其次是他心爱的公主嫁给他,并送他到县南柯太守
在这段时间里,淳于棼治理南柯来得好,也很欣赏王封爵他的五个儿子,两个女儿出嫁王侯非常高,所以他怀参拜
后来,檀萝国攻打南柯郡,淳于棼军输了,那么他的妻子因重者不幸的是,这一切,不希望继续住下去南柯郡淳于棼,返回首都。然而,在资本,有人说王淳于棼生病的国王之前没有验证,把他的孩子被捕,并把他带回原来的家。淳于棼离开淮参拜,醒来时,我意识到,这是一个梦想。
不久,淳于棼在院子里的槐树下发现蚁洞,洞在首尔的宫殿池推入在土壤中,他突然意识到,梦想看到淮参拜,是蚁洞,而最高的树枝槐树可能是县,当他南柯太守。
淳于棼想起临安梦珂,觉得这个世界是无常的,所谓的财富和名声很容易消失了,他最后的冬宫门。
故事由明阳沉琳切割山短语的“按图索骥”来指机械地按老办法做的事情,我不知道的工作,也用来指跟进线索来看待事物。 (完)
。非法侵入
采石河一堆土,李白高年龄的名称;
来回一首诗,鲁班斧在前面。
这是一个诗人的明代“称号的李白李白墓,是世界着名的唐代诗人千古名去世后,有多少文人墨客一直墓李白想待一会儿,诗歌表达内心的感受,他们的行为只能是附庸风雅,“鲁班面前班门弄斧”太不自量力。
鲁班鲁战国时期的人,他是一个良好的生产的紧凑型家电专家,人们称他为“一个聪明的,民间社会一直被视为祖先的木匠,谁还敢使用鲁班斧,炫耀技术的前端,也就是说,想在大行家面前展示自己的技能,这太卑微可笑的行为被称为“鲁班面前弄斧”,简称为“侵入”,俗话说“关公面前耍大刀”的意思差不多 BR p>其实,侵占“的成语,早在唐代,它的原型文学家柳宗元有这一个在序言:”他妈的斧头潘基文,斯里兰卡迎燕耳门! “指用斧头在鲁班面前,表现能力,英人(游行斧专家),皮厚。
成语有时被用来作为一个自嘲的字眼,这意味着,它不敢炫耀自己的技能,前面的专家
极其可疑
一天,乐广请他的朋友在家里,在酒店大堂喝朋友喝,我突然看见玻璃,一条蛇晃动的影子,他的心是很反感,或饮酒后喝到底,心脏不舒服,担心健康家庭
每隔几天发病,音乐广泛听到这个消息,一个朋友生病了,了解他的病的原因。乐广想了想道:“绝对不会有蛇在杯子!于是,他喝了一天去检查,原来,挂在墙上的巨大的大厅,用油漆颜色弓的弓的影子,恰好反映朋友让玻璃时,岳光去,朋友解释这些东西对他这个人疾病尽快明白其中的道理。
后来,人们比喻的“高度敏感”可疑,自相分争,带来打扰
马马
的<BR /传说天上的马神叫马在世界上,它也被称为熟练的识别伯乐相马的利弊。
马本名孙杨被称为第一的,他是一个人的春秋。因为他的马非常好,人们会忘了他原来的名字,干脆称他为伯乐,一直是现在的时间。
伯乐受国王委托,购买一千里的一天马向王说明,千里马罕见,这是不容易找到一个需要参观,楚并不担心,他尽力做好工作。
马跑了几个国家,寻访丰富马沿河北,民不聊生的名称,但仍然没有找到喜爱的好马。一天,马回到齐在路上看到马拉盐出行非常困难的陡坡上。马累得呼呼喘气,每一步都是非常困难的。马马向来亲近,不由他来见马马走近,突然开始复苏睁大眼睛,大声嘶鸣,好像要说话伯乐相马立即从声音判断,这是一种罕见的马
>
罕见
东汉末年,名人恒有才。当时,医生也荣格,他特别赞赏,他推荐给汉献帝时,他写道:“皇室皇宫,将建成的宝藏。如果平衡的一代,罕见。
>汉献帝怕做决定,荣格推荐表曹操曹操召见祢衡,爱他们,不料,祢衡蔑视曹操,他是很不礼貌的曹操派祢衡当鼓击鼓助兴的官员宴会的客人,下令他宓击鼓边谁知,同时大骂曹操,曹操是很尴尬的。恒曹操发送到荆州劝降刘飚,想采取杀刘表的手他认为刘彪祢衡的座上客,每个程序或宣布发布站在宓后来,祢衡刘飚不敬。刘飚送他到部黄作为一个秘书。宓平衡恃才傲慢,非常傲慢,后,终于杀了导致黄
短语“罕见”来形容非常罕见的,非常罕见的。称赞
屡教不改
用于人才
周代凡贝丝·博诗不仅是一个清石,和良好的治理事务。后来,他协助周厉王侧然而,国之大事。李周望飞横跋扈,枉法乱摔东西。巴结博直言说服列数的政治事务的弊端,在周厉王耳边说他的坏话。周厉王博,很疲惫的叛徒,叛徒的叛徒各种Zhoumei法院,看着博的主要表达的厌恶,写了一首诗,后来收入“诗经”。叛徒袭击诗说:“各种邪恶,屡教不改! “
无望”:生病用药不能保存后比喻不好的事情,要省着点。
不学无术
汉武帝统治时期,大将军霍光举足轻重的大臣法庭,并赢得了信任的晋武帝司马炎病危时,委托给他的幼子刘涪陵(赵一荻)去世后,霍光和他的助手,赵迪,李刘迅霍光成做皇帝轩霍光把握事务国家权力40年,根据西汉黄河,发现了不小的功勋。
继承王位后,刘迅,李徐飞他的王后。霍光的妻子霍显贪图富贵的女人,她希望她的小女孩变成一个君主,女王林勋结婚,你拿女王的疾病,贿赂王后中毒亡的女医生。致命的陷阱败露,女性医疗监禁此事霍光的东西,事先什么都不知道,霍告诉他。查获恐怖活动,指责他的妻子做这种事情,他想去报案,但没有受到惩罚的心他的妻子,想想之前思维或邪恶的隐藏下来的东西。霍光的亡,被告知的情况下,轩轩被派去调查。霍光的妻子听到了,他的家人和亲信商量对策,决定召集族人规划叛乱,不想漏风轩出兵霍家包围满门抄斩
优点和缺点的东汉史学家班固在“汉书·霍光传”霍光发表评论,说他是“不学无术,暗大理”意思是霍光读书,没有知识,并因此理解的主要原因短语“不学无术, “,指没有学问,技能
。
才高八斗
南谢灵运,一个写了大量的山水诗作家,他是聪明,好学,读了很多书,从小由他的祖父谢玄爱。
他出生于东晋太史家族,世界他凤姐康粤赣标题,称他为“谢康乐”他,作为诸侯,但没有实权,被送到永嘉任何知府。谢灵运奇怪怀才不遇,往往留下的官方不管,但去山上玩水上。后来,他辞职搬到会稽,经常酗酒和与她的朋友的乐趣。当地太守派人劝他节制一些,他一气之下一顿。然而,谢灵运山水诗写的,但受到人们的喜爱。他写的一首新诗,将立即被竞争的转录,并很快将经历。
邓文迪接到位后,他被召回了资本的官员,他的诗歌和书法赞誉为“宝”。谢灵运更自豪,他说:“世界上只有一石,曹子建独占八斗,我有一个水桶,世界被分为一桶水。”
短语“才高八斗”,从而来描述高度的文学天赋。
⑦ 如何看待前端民工徐飞加入蚂蚁金服
冬季,蚂蚁正忙着把潮湿的谷子晒干。 饥饿的蝉跑来,向他们乞讨食物。 蚂蚁问他:“你为什么在夏天不去收集食物呢?” 蝉回答说:“那时没有时间,我忙于唱美妙动听的歌。” 蚂蚁笑着说:“你夏季如要唱歌,那么冬季就去跳舞吧。”
⑧ 可以通过什么途径了解前端研发的最新资讯
我觉得,前端的技术动态主要有以下几个方向:
1、各种 tips,前端的思考、总结与观察,新技术的介绍和技术经验(多类似网站上的专栏,或者是会议上的一个 talk)
2、新玩具的教程,新项目的介绍(最好有 Github 链接)
3、新标准的发布与制定动态,各大浏览器团队发布动态
4、知名开发者/团队博客,或者一些零散的优秀博文
国外有很多很好的资讯网站,
前提, 英语要好!如果英语不好也没关系,现在很多浏览器都带翻译功能。
先说说国外
JS-头条-伯乐在线 :更新速度很一般,质量层次不齐,但不影响伯乐是盛产好的翻译文章的事实。
最新最热-极客头条:时间多的就看看这里吧。
Hacker News : HN很多人都清楚,基本上你的story在上面站几个小时,就可以陆续帮你带来上万流量。但是由于上面各种信息都有,如果只是前端资讯的话,你就得认真分辨了。 好在用户活跃度极高,可以帮你甄别出信息量大到爆炸的资讯。
这些信息来源质量很多是参差不齐的,不过看多了一般就会有辨别能力了。
不管是什么东西最好都抱着批判性的思维去看,不要说什么就信什么,多一些思考和质疑,被坑的几率就会低很多。