`
yiminghe
  • 浏览: 1465530 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ext-core 阅读笔记 - 1

阅读更多


 

1.Ext.lib.Ajax

 

应该是从 YUI 借鉴过来的,没有看过 YUI 源码,它的工作方式确实比较独特,没有采用常见的判断 readystatechange ,而是自己定时轮训查看状态


好处:可以随时终止,只要不轮训就可以了么(例如超时判断),否则 readystatechange 的话,超时就比较麻烦,回调函数仍然会被调用,只有在回调函数中判断了是否超时了。

ps:这种情况也可采取直接将 readystatechange=null 即可。


坏处:可能不是事件发生的同时处理,有点滞后,不过50ms的轮训事件已经很短了。

 

2.Ext.util.TaskRunner

 

这个有存在的必要么?原先可以多个 interval 处理的东西 ,由 taskrunner 管理的话,集中由一个 很短的interval 管理,有什么好处?

 

3.Ext.lib.AnimBase

 

Anim 一块非常复杂,Ext 将各个功能解耦:


Ext.lib.AnimBase : 框架每个想要动画的元素父类

Ext.lib.AnimBase的子类:表示元素具体要哪方面的动画


     Ext.lib.ColorAnim:颜色渐变等
     Ext.lib.Motion:平滑移动等
     Ext.lib.Scroll:平滑滚动等

runtimeAttributes = {} : 记录动画属性 在动画过程中的具体变化

Ext.lib.Easing 由 Ext.lib.AnimBase 调用,元素从一个位置变到下一个位置的值,很多计算方式

Ext.lib.AnimMgr  调度Ext.lib.AnimBase的集合,各个动画 统一 interval 调度

 

由于每个setTimeout会由浏览器新开一个线程来处理,那么当settimeout很多时,浏览器就会不可思议的慢。Efficient Javascript   )

 


让我们看看John Resig 是怎么评价的 :

(From Secrets of the JavaScript Ninja)

 

 

对计时器进行中央控制的好处:

1.一个页面可以同时只有一个计时器在运行
2.你可以随时暂停或继续所有计时器
3.很容易移除回调函数

增加并发的计时器很可能导致浏览器的垃圾回收行为,认识到这一点很重要,垃圾回收简单地说就是浏览器解开节的过程 (删除无用的变量,对象等等),因为计时器脱离正常的javascript引擎控制的流程(通过其他线程), 有些浏览器很擅长处理这种情况,但是有些浏览器就会导致很长的垃圾回收周期,你可能遇到过这种情况,在一个浏览器中 流畅进行的动画在另一个浏览器就变得拖拖拉拉,或者刚开始就结束。所以减少并发的计时器非常有必要(这就是为什么现代的 动画引擎都是只有一个全局控制计时器)

例子:如何把不同属性的动画设置过程用一个计时器来实现

 

<div id="box" style="position:absolute;">Hello!</div>


<script type="text/javascript">

	var timers = {
		
		timerID: 0,

		timers: [],
		
		start: function(){

			if (this.timerID )
				return;
				
			(function(){

				for ( var i = 0; i < timers.timers.length; i++ ) {

					if ( timers.timers[i]() === false ) {
						timers.timers.splice(i, 1);
						i--;
					}
				}
				timers.timerID = setTimeout( arguments.callee, 0 );

			})();
			
		},

		stop: function(){

			clearTimeout( this.timerID );
			this.timerID = 0;
			
		},
		
		add: function(fn){

			this.timers.push( fn );
			this.start();

		}
	};
	
	var box = document.getElementById("box"), left = 0, top = 20;
	
	timers.add(function(){

		box.style.left = left + "px";
		if ( ++left > 50 )
			return false;

	});


	


	timers.add(function(){
		
		box.style.top = top + "px";
		top += 2;
		if ( top > 120 )
			return false;
			
	});
	
</script>

 

这样我们创造了一个中央计时器结构,我们可以随时添加回调函数,并且可以开始停止 这个中央计时器,并且每个回调函数可以返回false来随时终止他们的运行,这比 调用clearTimeout的方式简单多了。

代码详解:


所有的回调函数被保存在一个中央队列(timers.timers),还有中央计时器(timers.timeID), 真正能够开始函数是start(),我们首先检查中央计时器是否已经运行,没有的话就是它运行。

中央处理器遍历所有的回调函数,依次执行。如果回调函数返回值是false,那么 该回调函数从当前队列中移除,这是一种比传统模式简单的停止方法。

另外一点需要注意的是:这种形势下回调函数会以他们添加的次序被执行, 传统的定时器并不能保证这点(浏览器有时会神智会乱 :()

这种定时器的管理方法对于大型应用或者任何形式的动画引擎都非常重要,并且对于 项目后期扩展以及跨浏览器的应用非常有帮助。

 

 

 

4.Ext.Template


大量的利用了 String 的 replace 这个函数

 

compile 非常精巧,利用 javascript 语言特性动态产生特定模板函数 ,对于一个模版固定,数据经常变化的场合提高系统效率,否则每次正则查找确实很低效。

 

ps:传统技术中也有类似的应用,例如 "即时代码生成 "技术, 函数可以在运行时查看各参数值,然后为它的函数体生成更加高效的,直接针对特定参数值执行的代码,然后跳到这些代码去运行。

 

特定的模版函数可以产生特定模板汇合不同数据而产生结果字符串,细节,ie 用了 数组join提高效率,ff 则不用了直接用 + ,可见 ff 对字符串concat优化了,不用我们特殊考虑。

 

09-09-08 note:

 

关于 string 的 加操作,Nicholas C. Zakas 在even faster websites 中也有提到:


从firefox1.0开始,对string的+操作进行了优化,使得直接+操作在任何情况下都要比比array join要快,其他浏览器如chrome,safari,opera,ie8都做了上述优化,而ie8以下的版本则没有优化.


当string长度增长(20+)以及+操作次数增大(1000+)时,ie8以下版本array join方法比+方法越来越快,firefox,safari则两种方法性能越来越接近,当然+操作仍然稍快点,而chome和opera则+方法无论如何都比array join方法会很多.


总结:

所以你可以象ext一样区分浏览器对待,但是一般情况下用+即可.

 

 

分享到:
评论

相关推荐

    Gwt-ext学习笔记之基础篇

    ### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....

    Extjs3.4+Ext-core.pdf+轻松搞定Extjs.pdf

    本资源包包含了与ExtJS 3.4相关的学习资料,包括`Ext-core.pdf`、`轻松搞定Extjs.pdf`以及`Extjs学习笔记.docx`,旨在帮助初学者或有经验的开发者更好地理解和掌握ExtJS 3.4。 `Ext-core.pdf` 是关于Ext Core的文档...

    Gwt-ext学习笔记

    ### Gwt-ext学习笔记知识点详解 #### 一、GWT与Gwt-ext简介 - **GWT (Google Web Toolkit)**:是由Google开发的一款用于构建高度交互式的Web前端应用的开发框架,它允许开发者使用Java语言编写客户端代码,并通过...

    (转载)GWT -EXT学习笔记-基础

    3. 在项目的`public`目录下新建`js`文件夹,并将`ext-2.1`目录下的`adapter`、`resources`以及`ext-all.js`、`ext-core.js`文件复制到`js`文件夹下。 **步骤二:修改HTML宿主页面和模块配置文件** 1. 修改`...

    界面框架extjs学习笔记

    - `extjs/ext-all.js` 或 `extjs/ext-core.js`:根据需求选择引入完整库或仅核心库。 配置BLANK_IMAGE_URL是解决图像路径问题的一个常见步骤,例如: ```javascript Ext.BLANK_IMAGE_URL = "/images/s.gif"; ``` ...

    EXT_JS实用开发指南_个人整理笔记.docx

    - **底层API(core)**:这是EXT_JS的基础,包含DOM操作、事件处理、DOM查询等功能,例如`DomHelper.js`和`Element.js`。 - **控件(widgets)**:提供各种可视化组件,如面板、表格、树、窗口等,它们构建在底层...

    EXT_JS实用开发指南_个人整理笔记

    1. **引入EXT_JS库**: 在EXT_JS开发中,首先要在HTML页面中引入EXT_JS的样式表和JavaScript库文件。通常,这包括`extjs/resources/css/ext-all.css`用于样式,`extjs/adapter/ext/ext-base.js`作为适配器,以及`...

    ExtJs中引用的三个js

    如果你希望减小页面加载时间,可以选择`ext-core.js`,这是一个轻量级版本,只包含ExtJS的基本功能。 2. **核心组件文件**:在开发过程中,我们可能需要引用特定的组件库,如`ext-grid.js`(表格组件)、`ext-form....

    vue-next/runtime-core 源码阅读指南详解

    最近又抽时间把 vue-next/runtime-core 的源码陆陆续续地看完了,期间整理了很多笔记,但都是碎片化的。本来是想整理一下,写成一篇文章分享出来的,但是感觉最终的成果物只能是一篇篇幅巨长的解析文,就算我一行一...

    Ext 学习总结 pdf版

    1. **核心库(Core Library)**:包含Ext JS的基本功能,如DOM操作、事件处理等。 2. **用户界面(UI)部件**:提供了丰富的UI组件,如按钮、面板、表格等。 3. **数据管理(Data Management)**:包括数据存储、数据读取...

    HP笔记本win11 改win10发现不了硬驱动

    标签中的"HP笔记本"指的是惠普品牌的笔记本电脑,"HP11代CPU"是指配备了第11代Intel酷睿处理器的型号,这些处理器可能包含一些特定的硬件特性,如Intel Iris Xe显卡等,可能需要特定版本的驱动支持。 "发现不了硬...

    老师整理的extjs学习笔记

    ### ExtJS 学习笔记概览 #### 一、ExtJS 入门 **1.1 ExtJS 构成及如何引用** ExtJS 是一款基于 JavaScript 的开源框架,专为 Web 应用程序的前端界面设计。其核心优势在于提供了一套丰富的 UI 组件和强大的数据...

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    笔记本主板线路图

    - DC-DC VCORE INPUT CAP 和 DC-DC VCORE (ADP3207): 与CPU核心电压有关的电容和转换器。 5. **其他关键组件**: - SATA HDD CONN: SATA硬盘连接器,用于连接SATA接口的硬盘。 - USB POWER/CONN: USB电源和连接器...

    笔记本原理图

    - **DC-DC VCC1R8M/VCC VIDEO CORE**:视频核心电压转换器,为GPU供电。 - **DC-DC VCC1R2M/VCC CPU IO**:CPU I/O电压转换器,稳定CPU输入输出电压。 - **BATTERY MONITOR**:电池监测,监控电池状态和健康。 -...

    Linux经典学习笔记

    - EXT2和EXT3是Linux常用的文件系统,EXT3作为EXT2的升级版,具有日志功能,更安全可靠。 - swap类型的文件系统用于交换分区,增加系统内存的虚拟空间。 - Linux支持FAT16和FAT32文件系统读写,以及NTFS文件系统...

    core20_theo_pub:酒馆西奥的一部分。 笔记。笔记开源部分,日常码字目录

    convention: r0-mov -- motivation r0-ext -- extention of the know. with the help of internet r1-k2rough -- get a roughly understanding, achieve a detailready state r2-mixed -- mixed detail learned from...

    Linux学习笔记 适合初学者研读

    ### Linux学习笔记精要 #### 一、Linux系统概述与安装 **1.1 Linux内核项目起源** Linux 内核项目始于1991年,由芬兰赫尔辛基大学的学生Linus Torvalds创建。最初的目标是为个人计算机开发一个新的免费操作系统...

Global site tag (gtag.js) - Google Analytics