当前位置: 首页 > news >正文

有感Atlas - 优点、缺点、学习

Atlas的优点是什么?
  仁者见仁,智者见智。在这种问题上每个优秀的技术人员应该总是有自己独特的见解。能得到一个能“服众”的结论固然好,但是支持百家争鸣更为重要。我始终认为Atlas的最大长处不在于其Ajax特性,不在于其提供了复杂JS才能实现的多样化功能。在我看来,Atlas是很了不起的,而它的了不起体现在三个地方:
1. Declarative Syntax:

  应该有不少人有过在HTML Element中嵌入浏览器无法识别的属性,而在某个地方通过自己编写的Javascript方法读出并加以一些功能。其实我在数年前总觉得这样的方法是tricky solution。我不喜欢tricky的方法,特别是无条理性的tricky solution。这样的方法的确可以work,但是可读性一般比较差。在大多数时刻,我始终把代码的可维护性放在第一位。后来由于在项目中需要开发一个Rich Client,给用户以大量的操作自由度(描述不当,不过估计无法用三句两句话说清了),于是不得不使用了这个方法。在进行了大量尝试后,发现如果合理使用,这的确是一个非常灵活有效,并且易于维护的方法。ASP.NET强大的客户端Element模型又可以说对这种方法合作的几乎天衣无缝。

  Atlas的Declarative Scripts可以说将上面提到的这个方法进行了极大的升华。将一个从一开始似乎十分Tricky的方法变成了另一种开发方式,将程序设计和XML结合在了一起。事实上,这给了许多项目设计一个参考。将客户端代码的结构化也大大地提高了可维护性。

  原来,代码还可以这么写。
2. Extendable Behavior, Extender, etc.

  它们所作的贡献是提供了良好的设计。能让程序员轻松地写出符合良好设计的代码。

  一个良好设计的代码,其中一个非常基础的特点就是“high cohesion”,也就是“高内聚”。高内聚的组件与外界的依赖很少,这样大大方便了开发,调试,测试,发布和部署。

  就拿开发一个Extender来说,需要的就是写一个Class Library,并编译成一个程序集。使用时只需简单的引入,并像使用普通控件一般即可。在开发时需要的也仅仅是Atlas的基础结构,少得不能再少的一个程序集。

  还是一个典范,还是一个示例。
3. Powerful Foundational Framework

  这里不提Atlas提供了一个完全面向对象的编成框架,提供了一个Compat层来兼容多个浏览器等。现在来思考一个问题:如何写出高性能的Web应用程序?

  或者换个角度想一下,一个网站的性能是从什么方面体现出来的?这不光是要服务器端的努力,特别是现在客户端越来越Rich,客户端的Load也越来越多。优化PLT(Page Load Time)也是一个越来越重要的议题。这需要对于浏览器,HTML以及HTTP标准有相当完整的认识。通过分析Page Load来优化一个页面能够达到非常了得的效果,经过PLT优化的网页往往能将一张页面的打开时间缩短3-5秒甚至更多,并且往往也能减少服务器端的运算以及流量。

  Atlas的基础代码框架的每一步都是尽量地符合优化PLT的Best Practice。所以使用Declarative Script和Atlas框架所提供的JS类往往效率会比较高。打个比方,浏览器对于相同域名只会并行地使用两个端口进行加载,因此将不同资源从不同域名加载是优化PLT的一个常用方式。但是由于可能JS中任何部分的代码都可能会改变的页面的DOM或者Render出不同的内容(例如使用document.write),因此浏览器在下载JS文件时是会Block住其他任何的资源加载,无论其是否在同一个域名中。加上现在JS文件越写越大,数量越来越多,因此浏览器的加载能力就被削弱了。在Atlas中,Binding机制能比较好地处理JS加载问题,以优化页面的PLT以及Perceived Performance。
Atlas的缺点?
  其实我有时候总是会想,Atlas代码是不是写的太庞大了,使用起来方便吗?比如其OO特性,使用起来似乎不是很方便,代码量和代码体积颇高,而且对于没有接触过Atlas的人不是很容易看懂。外界不少提供面向对象机制的JS框架似乎就精炼许多。我也因为某些需要为JS写了一套面向对象机制的扩展,很简单,使用方便,OO机制使用方式也是尽可能地向Java代码靠拢。继承,虚函数等必须的功能也一个不缺。

  不得不说,这个似乎是Atlas的一个瑕疵。但是瑕不掩瑜,Atlas依旧是一套优秀的JS框架。它实现的Ajax,却又远远超越了Ajax本身。冲着Ajax or .NET来接触Atlas的程序员往往总是能从它身上得到惊喜。

学习Atlas……
  我经常在我身边的开发人员中推荐.NET,虽然无偿,但是冲得就是对这一技术的喜爱。我是技术人员。当然对于Atlas也向别人进行过介绍,也看到不少人学习Atlas的情况。

  似乎Atlas进入了.NET相同的情况,大家纷纷在使用,感觉很爽,而去了解它是如何做的人却很少。知道在什么情况下如何使用的人也很少。而且能够灵活使用的人,往往也对其机理有了相当认识。可能的确只有从一个特定的层次以及角度去看它,才能对它有更好的掌握能力。“使用论”和“深入论”的争锋似乎依旧存在。忽然想起Jeffrey Richter说过他的CLR via C#市场反响不好,现在越来越少的人希望从CLR层面去了解.NET Framework……

  其实我也是“使用论”的支持者,但是我仅仅支持良好的使用方式。这都不是一朝一夕能够炼成,也不是仅仅靠了解一门技术就能做到的。要成为一个优秀的技术人员,所需的技术覆盖之广,其实远超过普通技术人员的想象。

相关文章:

  • NSInvocationOperation的cancelAllOperations不会取消正在运行的operation
  • 微软.NET俱乐部Tech-ED2006追踪报道!
  • MAC下SVN客户端Versions和Cornerstone的比较
  • 在ubuntu下用wine玩魔兽世界
  • 小孩不能吃黑枣
  • 9月23日培训日记
  • 治瘊子的小秘方
  • 前几天所有吐槽12306验证码的都应该站出来向12306道歉
  • 9月24日培训日记
  • 9月25日培训日记
  • 贷款和理财的电话
  • 星光灿烂之夜-MVP SuperStar
  • 这些事,我不作,别人也会作
  • Sybase ASE XA分布式事务支持
  • mac系统用键盘操作菜单栏
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Effective Java 笔记(一)
  • JAVA之继承和多态
  • magento 货币换算
  • MQ框架的比较
  • Node项目之评分系统(二)- 数据库设计
  • PHP的Ev教程三(Periodic watcher)
  • Redash本地开发环境搭建
  • SQLServer之索引简介
  • vuex 笔记整理
  • Xmanager 远程桌面 CentOS 7
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 类orAPI - 收藏集 - 掘金
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 思否第一天
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #include到底该写在哪
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT项目实战(天气预报)
  • $.ajax中的eval及dataType
  • (2)(2.10) LTM telemetry
  • (Git) gitignore基础使用
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (数据结构)顺序表的定义
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)EOS中账户、钱包和密钥的关系
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)大型网站架构演变和知识体系
  • .NET Core 中插件式开发实现
  • .net mvc部分视图
  • .Net各种迷惑命名解释
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET业务框架的构建
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [20140403]查询是否产生日志
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林