【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

书评和采访:ExtJS in Action

  • 2011-03-24
  • 本文字数:4375 字

    阅读完需:约 14 分钟

Jesus Garcia 编写的《 ExtJS in Action 》是一本介绍跨浏览器 JavaScript 库 ExtJS 的书,ExtJS 用于构建富互联网应用(Rich Internet Application)。ExtJS 包含大量的组件、可扩展的组件模型,提供了易用的 API 来构建针对基于 JavaScript 的 Web 应用的完整、稳定的平台。

本书作者在 IT 和企业 web 应用开发领域拥有超过 16 年的经验。他在数个大公司部署过基于 ExtJS 的应用,如万豪国际、洛克希德马丁、摩根大通和美国金融监管局。业余时间,Jay 喜欢帮助 ExtJS 社区,他是 ExtJS 非官方雇员中最活跃的发帖者之一(超过 13000 个帖子)。

本书包括如下内容:

  • 使用核心组件如布局面板构建动态 UI
  • 创建动态表单,提交数据无需页面刷新
  • 使用树状组件、菜单和工具栏的有用组件
  • 创建定制的复合组件
  • 全面解析 Ext JS 3.0

读者会了解 ExtJS 组件模型和布局,学习核心组件如 Container 类在构建复杂用户界面时作为构建模块的运行机制。本书覆盖了 ExtJS 常用类、AJAX、Observable (ExtJS 事件模型 l)、DOM 辅助类和辅助函数,并介绍了如何使用 JavaScript Object Notation (JSON)。它还探讨了定制或者扩展 ExtJS 组件的可行办法。

本书的出版商 Manning 为 InfoQ 读者提供了第三章试读《组件模型和生命周期》。

InfoQ 采访了本书作者:

InfoQ:Hi Jesus,能否介绍一下自己,以及编写这本有关 ExtJS书籍的初衷?

Jesus我从 2006 年初就开始使用 ExtJS,当时它只是 YUI 库的一个扩展集。那时,它被称为“YUI-ext”,由一个名为 Jack Solcum 的家伙作为边缘项目开发。像许多刚接触该框架的新人一样,我最初被数据网格吸引。真正让我倾心该库的是文档,可能是最好最新的 Ajax 框架 API。

在我接触该框架不久,我决定成为一名专家,专注我的事业,成为一名独立咨询顾问。做出决定之后,我开始活跃于早期社区,花费大量时间在帮助社区上,回答人们的提问解决他们的问题。通过这种方式,我学到了比只是应用开发更多的有关框架的知识。直到现在,通过帮助别人来回馈社区仍然是我学习大量知识的一种方式。

活跃于 ExtJS 社区使我赢得了一些声誉,因此被来自 Manning 的 Michael Stephens 看中。他联系我,还有其他活跃的社区成员,来审阅一本书的提案。在阅读了提案内容表格的前几行之后,我就意识到这本书不是“Ext JS in Action”。在提交了我的想法和推荐的目录之后,Michael 举行了一个审查会议,在那里他问我是否愿意提交一个自己的目录,然后我就提交了。然后两年之后,现在我们有了这本书。

InfoQ:什么是 ExtJS,它想解决什么问题?

JesusExt JS 是一个针对 Web 的 UI 库。它是市场上的轻量级工具,因为它通过抽象,支持开发人员不必强制编写 HTML 的源代码,而且允许开发人员灵活地扩展组件库或者通过简单强大的插件架构创建真实的插件。

Ext JS 解决了管理 HTML 和 CSS 的问题,提供了媲美桌面应用的 UI 外观。它支持开发人员在现有 HTML 网页中注入组件或者开发富企业级 RIA,其中一些应用于关键任务应用,如实时监控和网络基础设施的管理。

框架也包含许多实用工具,如数据存储、模板和 xTypes,进一步提高了应用开发能力。

InfoQ**:在书中,你提到 Ext JS遵循的组件和容器模型是它比其他 Ajax库与众不同的主要原因,你能详细说说吗?**

Jesus组件和容器模型(还有其他特点)使 Ext JS 在其他同类 Ajax 库中别具一格,因为它们使库的 UI 部分结构化。没有它,Ext JS 不会这么与众不同。

组件模型为框架引入了“组件生命周期”,为组件带来了一套定义良好和可靠的行为。它分为三个阶段,初始化(Initialization)、渲染(Render)和销毁(Destruction)。初始化指组件新实例的初始化时刻。渲染阶段指组件被渲染或者绘制到屏幕上的时候。最后,销毁阶段支持组件执行清理任务,如所有注入的 HTML 节点的删除和清除事件监听器。

容器模型支持组件通过父子关系模式来管理其他模型。通过容器模型,开发人员可以轻松地创建动态 UI——利用它的 add() 或者 remove() 来添加或者删除一个或几个子元素。为了管理子元素的视觉组织,容器使用了布局(Layout)。

InfoQ**:你能透漏一下工作中如何使用 Ext JS吗?你了解其他人如何使用它吗?是否存在 RIA应用不适合采用 Ext JS****?Ext JS适合移动 web应用吗?**

Jesus我通常使用 Ext JS 为许多客户开发应用。我最近一个任务是为客户开发界面管理成员信息。因为 Ext JS 功能齐全,所以我可以利用它开发各种应用,比如定制 UI 从 IBM 的 Tivoli Enterprise Console 和 HP Universal CMDB 中合并数据、为 EMC 的 Documentum 产品开发前端界面。我已经开发了几个应用来帮助公司制定考试内容。

开发人员可以充分利用 Ext JS 来开发 RIA 中所需的功能。这几年,我已经看到了各种各样的应用,大部分是基于业务的。

Ext JS 本身不是为移动 web 应用而定制的,但是它的兄弟 Sencha Touch 是。我已经看到并且实验了在 iPad 上运行有限功能的 Ext JS 应用。它不支持触摸功能,而且 UI 主题不是以移动为中心的。

InfoQ**:Ext JS在各种浏览器平台上的运行情况如何?你想对那些由于当前的兼容性问题或者害怕因未来升级失去兼容性而惧怕使用 Ext JS的朋友说些什么?**

Jesus:这可是个老问题了。我想说 Ext JS 在最好的环境中运行最好。一般来讲,Ext JS 在基于 Webkit 的浏览器中运行最好,在 IE 中最差。当然,浏览器还要更加努力解决这些问题,但是在 Ext JS 3.0 的最初版本中存在一些代码问题导致 IE 的缓慢性能。

众所周知,Ext JS 3.0 的最初版本的性能比 2.X 差得多,但是在后续版本中好得多。Ext JS 团队非常重视来自于客户和社区成员的反馈,并采取必要修改在不限制功能的情况下获得更好的性能。

我也提到框架的性能需要开发人员配合做大量的工作。 初级开发人员往往易犯简单错误,如所谓的“overnesting”。这种情况是指不必要的通过父组件包装子组件,并且为 UI 添加了不必要的层。另一个常见错误是加载数以千计的记录到视图中(GridPanel、DataView、ListView 或者 ComboBox),导致屏幕中出现“JavaScript is running too long”消息。

从 2.x 升级到 3.x 非常简单,在 3.x 不同版本中升级也是如此。以我的经验来说,大家遇到的大部分升级问题是他们存在代码依赖、使用或者重载了私有方法,这些方法标记为私有是有原因的。显然,这种做法不值得推荐给团队甚至资深的开发人员,你应该做些工作使升级更容易。

InfoQ**:对于开发 Ext JS应用,你喜欢哪种过程?你使用哪些工具?你觉得现在的 JavaScript/HTML工具好用吗?**

Jesus通常我在笔记本电脑上开发应用,这样可以尽可能快地收到反馈。我遵循框架模式来开发应用。例如,我喜欢根据类的命名空间在文件系统(和项目)中安排文件。这种做法能够快速访问文件。同样的模式适用于插件、用户扩展(ux)或者应用于框架的重载。

开发 JavaScript 代码有一些优秀的工具,但是我最喜欢使用 Jetbrains’ Intellij IDEA 开发应用。虽然它的运行速度不是最快的,但是我爱上了它。它支持比如动态代码补足和重构类成员等,还有自己的 JavaScript 调试器,虽然我一般不用它。

我听过开发人员喜欢使用 NetBeans 甚至 Aptana(包装了 Eclipse)。

InfoQ:使用大型的客户端框架如 Ext JS会导致调试时有困难吗?代码遇到问题时,你如何调试?

Jesus困难有很多原因。首先,开发人员使用 ext-all.js(框架的精简版)而不是 ext-all-debug.js (保留了空格,删除了注释)。如果异常被 JS 解释器抛出,异常消息因为 JS 的简化通常晦涩难懂。如果在 IE 中查看错误,一般看不出任何意义,增加了难度。通常,为了解决问题,可以使用解压缩的 ext-all-debug.js 来开发应用,这会使错误消息好懂些,至少可以找到异常抛出的准确行数。

一旦 ext-all-debug.js 抛出异常,我通常会查看异常发生的位置,从中找到异常对应的方法,然后找到该方法归属的类。绝大多数情况下,都是些低级错误。

因为我使用 WebKit,所以查看 ext-all-debug.js 文件成百上千的 JS 代码轻而易举。可悲的是,Firefox 的当前版本妨碍了 Firebug 达到同样的性能水平,因此几个月之前我从 Firefox 转移到了 WebKit。我也在 IE8 中尝试过,但是结果让我很崩溃。

InfoQ:在工作中使用功能测试方法吗?感觉如何?

Jesus答案是没有。我曾经想在客户的应用开发周期中加入单元测试,但时间是个问题。花费在编写测试的时间可以节省未来修补缺陷的更多时间,但是做出初始投资对客户很困难。

InfoQ:在书中,你描述了使用 Ext JS时框架之外的若干组件,易于扩展吗?易于创建新组件吗?

Jesus我觉得易于扩展框架,因为我从 2006 年就开始使用它了。开发 Ext JS 的时候就被设计为可扩展的,存在针对它编写的插件,而且采用了一些最佳的 JavaScript 开发模式。

扩展组件的难度水平与开发人员对 Object Oriented JavaScript 模式和框架的经验有关。你必须熟悉 OOJS(原型继承)才能够扩展组件。毕竟,如果你不理解原型继承,在 JavaScript 内扩展的概念会比较生疏。还需要能够理解例如执行上下文概念和关键字“this”的使用方法。

同样,你应该熟悉 Component、Container 和布局模式来正确的扩展组件同时避免例如 overnesting 的常见错误。熟悉框架的其他部分也有帮助。

我写这本书主要是因为看到很多初识框架的开发人员想要构建复杂的应用。然而,他们发现在完成简单任务时就磕磕绊绊,这都是因为没有必要的基础知识来完全理解和使用框架。

对于想提高 JavaScript 速度的人来说,我推荐 Dustin Diaz 的《Pro JavaScript Techniques》(Apress)。这本书会详述现代 JavaScript 编程,是你充分了解一些高级代码。

InfoQ**:随着 HTML5的出现,你认为 Ext JS会如何发展?**

JesusSencha 团队的一个优点是向前看。他们努力使 4.0 兼容 HTML5 和 CSS3。Ext JS 4.0 与 Sencha Touch 共用同一个代码库,而 Sencha Touch 已经对这些技术有大量的支持。

InfoQ**:你觉得本书对于那些初识 Ext JS的人和想在 Ext JS开发中更进一步的人有哪些帮助?**

Jesus对于 Ext JS 的新手来说,我认为深入理解 Component、Container 和 Layout 模型非常有用。我尽可能清晰地讲解这些内容,并从读者中得到了好评。

对于老手来说,我认为本书最有价值的部分是后三章(15-17)。第 15 章介绍了创建 Ext JS 扩展的基本知识,并使用现实例子开发插件。最后两章构建了一个虚构应用,使读者了解核心的决策过程,如安排命名空间和开发抽象来减少冗余代码。

不同经验水平的开发人员在阅读完本书之后都给予了积极的反馈,他们表示其中一些概念在不同的方面提供了帮助。

你可以在 InfoQ 找到更多有关 ** JavaScript Rich Internet Applications **的内容。

查看英文原文: Book Excerpt and Interview: ExtJS in Action


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2011-03-24 22:504189
用户头像

发布了 501 篇内容, 共 247.9 次阅读, 收获喜欢 57 次。

关注

评论

发布
暂无评论
发现更多内容

华为云第二期线下meetup·北理工站圆满落幕

华为云开源

开源

全新升级!腾讯云大数据ES Serverless服务开启日志分析新体验

腾讯云大数据

elastic

LangChain:打造自己的LLM应用 | 京东云技术团队

京东科技开发者

langchain LLM模型 企业号 8 月 PK 榜

医疗知识图谱问答——文本分类解析

北桥苏

Python 聊天机器人 neo4j 图数据库 知识图谱

中国出海企业如何防范恶意退货欺诈

Geek_2d6073

数据库,主键为何不宜太长长长长长长长长?

java易二三

Java 数据库 编程 程序员 计算机

分布式服务高可用实现:复制 | 京东物流技术团队

京东科技开发者

数据库 复制 高可用设计 分布式服务 企业号 8 月 PK 榜

etl engine 监控面板 为管理者掌握平台运行情况,决策执行方案提供即时数据支撑

weigeonlyyou

数据交换 物联网 数据采集 ETL Kafka ETL

数字化转型背景下经管大数据课程教学能力进阶提升训练营,线下培训圆满收官!

ModelWhale

人才培养 学科交叉 师资培训 教育数字化

EPM时代,国产化替代夺回话语权

智达方通

企业管理软件 EPM 智达方通 全面预算管理 智达方通EPM

MobPush Android SDK 厂商推送限制

MobTech袤博科技

前端 App 前端开发 前端开发工具

使用轻量级 CDC debezium-server-databend 构建实时数据同步

Databend

提升你的前端技能:掌握 Axios 的 GET 请求

Apifox

程序员 前端 前端开发 HTTP axios

FastAPI简介:快速理解Python Web框架的新标杆

Liam

Python 程序员 后端 web开发 FastApi

网心科技:AI重新定义音视频生产力“新范式”

网心科技

AI 边缘计算 边缘云

华为开发者大会2023即将召开:HarmonyOS 4 小艺或将迎来全新升级

最新动态

蓝牙智能设备数据采集平台化方案 | 京东云技术团队

京东科技开发者

数据采集 企业号 8 月 PK 榜 蓝牙智能设备

LED透明屏清晰度受什么影响

Dylan

广告 案例 信息 LED显示屏 屏幕

华为云与医药企业共话AI 助力医药行业数字化转型和创新发展

新消费日报

盘点一对一直播源码iOS系统维持平台稳定功能(一):弹性扩缩容

山东布谷科技

软件开发 源码搭建 iOS SDK 一对一直播源码 弹性扩缩容

权威认证 I ONES 连续5年通过可信云企业级 SaaS 服务评估

万事ONES

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)

洛神灬殇

MySQL MySQL8.0 版本升级 服务调整

高性能网络建设指南,《智算中心网络架构白皮书》开放下载

Baidu AICLOUD

大模型训练 高性能网络 RDMA

一种轻量级定时任务实现 | 京东云技术团队

京东科技开发者

定时任务 系统稳定性 轻量级 企业号 8 月 PK 榜

低代码是什么意思?

优秀

低代码

什么是数字化?数字化转型概念是怎么兴起的?

优秀

数字化转型 数字化

GaussDB技术解读系列之SQL Audit,面向应用开发的SQL审核工具

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

落实《中国人民银行业务领域数据安全管理办法》,极盾科技是怎么做的?

极盾科技

数据安全

NFTScan 正式上线 zkSync NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT\

数据智能:加速企业数字化转型

软通咨询

数据智能 #人工智能 数字化咨询

方法论揭秘|研发数字化转型,这家保险企业做对了什么?

万事ONES

书评和采访:ExtJS in Action_Java_Dio Synodinos_InfoQ精选文章