`
jljlpch
  • 浏览: 323273 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

getstyle性能比较

阅读更多
var Element = {};
Element.getStyles1 = function() {
	var view = document.defaultView;
	var propCache = {};
	var camelRe = /(-[a-z])/gi;
	var camelFn = function(m, a) {
		return a.charAt(1).toUpperCase();
	};
	return view && view.getComputedStyle ? function(el, prop) {
		var v, cs, camel;
		if (prop == 'float') {
			prop = "cssFloat";
		}
		if (v = el.style[prop]) {
			return v;
		}
		if (cs = view.getComputedStyle(el, "")) {
			//if (!(camel = propCache[prop])) {
				//camel = propCache[prop] = prop.replace(camelRe, camelFn);
		//	}
				camel = prop.replace(camelRe, camelFn);
			return cs[camel];
		}
		return null;
	} : function(el, prop) {
		var v, cs, camel;
		if (prop == 'opacity') {
			if (typeof el.style.filter == 'string') {
				var m = el.style.filter.match(/alpha\(opacity=(.*)\)/i);
				if (m) {
					var fv = parseFloat(m[1]);
					if (!isNaN(fv)) {
						return fv ? fv / 100 : 0;
					}
				}
			}
			return 1;
		} else if (prop == 'float') {
			prop = "styleFloat";
		}
		if (!(camel = propCache[prop])) {
			camel = propCache[prop] = prop.replace(camelRe, camelFn);
		}
		if (v = el.style[camel]) {
			return v;
		}
		if (cs = el.currentStyle) {
			return cs[camel];
		}
		return null;
	};

}();
Element.getStyles2  = function(element, style) {
	var camelRe = /(-[a-z])/gi;
	var propCache = {};
	var camelFn = function(m, a) {
		return a.charAt(1).toUpperCase();
	};	
	//if (!(camel = propCache[style])) {
			camel = propCache[style] = style.replace(camelRe, camelFn);
	//	}
	style = style == 'float' ? 'cssFloat' : camel;//style.replace(camelRe, camelFn);;
	var value = element.style[style];
	if (!value || value == 'auto') {
		if(document.defaultView)
		var css = document.defaultView.getComputedStyle(element, null);
		value = css ? css[style] : null;
	}
	if (style == 'opacity')
		return value ? parseFloat(value) : 1.0;
	return value == 'auto' ? null : value;
};



var s = ['width', 'heigth', 'opacity', 'float', 'margin', 'border',
		'background', 'top', 'button','padding-left','padding-right','margin-bottom','border-bottom-width','border-right-width'];
var now = new Date().getTime();
for (var i = 0;i < 10000; i++) {
	var m =parseInt(Math.random()*(s.length-1))+1; 	
	var el=document.getElementById('test1');
	Element.getStyles1(el, s[m]);
}
var now1 = new Date().getTime();
alert(now1 - now);

var now = new Date().getTime();
for (var i = 0;i < 10000; i++) {
	var m =parseInt(Math.random()*(s.length-1))+1;
	 Element.getStyles2 (document.getElementById('test1'), s[m]);
}
var now1 = new Date().getTime();
alert(now1 - now);

 在分析Ext,觉得ext,yui(类似style1的实现)要不要这样做,于是做了一个性能的测试

在IE中 style1:420-440之间,style2:'453-470之间

在FF中,style1:953-970之间,style2:1266-1287之间

加上came缓存的性能提升在0-20之间。

 

先不用去说prototype,mootools的类似的getstyle2的实现上有点问题。而且性能还是差很多,要慢五分之一。

分享到:
评论
1 楼 hackwaly 2009-06-24  
简单的闭包而已,getStyle1利用闭包,实时生成一个最适合的函数。当然比getStyle2每次都判断要快,而且getStyle2里面的cameFn每次函数运行都会生成,在没有针对闭包优化的浏览器中会影响效率。

相关推荐

    使用PHPExcel操作Excel用法实例分析

    在本文中,我们将深入探讨如何使用PHPExcel库来操作Excel文件,这是一个非常实用的PHP库,用于创建、读取和修改Microsoft Excel文件。... ...以下代码片段展示了如何...在处理大量数据时,合理使用内存和优化性能也是关键。

    phpexcel 读取 excel实例

    $sheet-&gt;getStyle('A1')-&gt;getFill()-&gt;setFillType(PHPExcel_Style_Fill::FILL_SOLID); $sheet-&gt;getStyle('A1')-&gt;getFill()-&gt;getStartColor()-&gt;setARGB('FF0000'); // 设置背景色为红色 ``` ### 5. 性能优化 由于...

    Javascript动画效果(2)

    在多物体动画的场景下,例如通过鼠标悬停来触发元素动画,作者推荐不要直接使用offsetWidth属性来获取宽度,而是将`getStyle`函数获取到的宽度值存储在一个变量中重复使用,从而提高动画效果的流畅性和性能。...

    第34章 项目1-博客前端:封装库--展式菜单1

    2. **检查透明度动画**:通过`getStyle`方法获取元素的透明度属性,并与目标值进行比较。如果它们不相等,说明动画尚未完成,将`flag`设为`false`。 ```javascript if (parseInt(target) != parseInt(parseFloat...

    phpexcel实现一般的excel读取和导出功能

    使用`PHPExcel_Worksheet_AutoFilter`和`PHPExcel_Reader_IReader::loadSheetsOnly`可以限制加载的工作表数量,提高性能。 7. **处理错误和异常** 在实际应用中,确保处理可能出现的错误和异常,例如文件不存在、...

    【JavaScript源代码】原生JS实现各种运动之复合运动.docx

    - **性能**:相比依赖外部库的方式,原生JavaScript通常具有更好的性能表现。 ##### 2. **复合运动**: - **概念**:在同一时间周期内,元素的多个属性同时进行变化的动画效果。 - **应用场景**:常用于网页游戏...

    原生js实现jquery函数animate()动画效果的简单实例

    在前端开发中,jQuery提供了一套非常方便的API来实现动画效果,但随着Web标准的发展和性能优化需求的提高,原生JavaScript的方法逐渐受到青睐。通过原生JavaScript实现动画,能够更精确地控制动画过程,并在需要时...

    phpexcel开发手册

    - **目的**: 减少内存占用,提高性能。 - **实现**: 只有当真正需要时才加载特定组件。 **2.3 内存中的电子表格** - **表示方式**: 工作簿由多个工作表组成,每个工作表又包含许多单元格。 **2.4 读取器和写入器**...

    PHP读取excel文件的源代码类

    例如,如果你想获取特定单元格的样式,可以使用`getStyle()`方法。 6. **性能优化** 对于大量数据的Excel文件,可能需要考虑性能问题。可以使用流式读取,只读取需要的部分,以减少内存消耗。 总的来说,通过使用...

    【JavaScript源代码】原生JS实现加载进度条.docx

    - **性能优化**:考虑使用`requestAnimationFrame`替代`setInterval`,提高动画流畅度。 - **兼容性问题**:虽然示例代码考虑了IE浏览器的兼容性,但可以进一步优化,例如使用前缀来支持更多旧版本浏览器。 - **交互...

    PHPExcel_lod.zip

    $sheet-&gt;getStyle('A1')-&gt;applyFromArray($style); // 保存为XLSX文件 $writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $writer-&gt;save('output.xlsx'); ``` 在实际项目中,可能还需要处理错误...

    phpexcel实例

    - **数据格式化**:设定单元格的数据类型,如日期、货币等,`$worksheet-&gt;getStyle('D1')-&gt;getNumberFormat()-&gt;setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14);` - **图表**:创建图表并添加到...

    PhpExcel class

    $worksheet-&gt;getStyle('A1')-&gt;getAlignment()-&gt;setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); ``` - **公式计算**:可以使用Excel的内置公式。 ```php $worksheet-&gt;setCellValue('C1', '=A1+B1');...

    PHPExcel封装类库

    - `getStyle()`方法用于获取单元格的样式,然后可以通过`setNumberFormat()`来设定特定的数字格式。 5. **合并单元格** - 使用`mergeCells()`方法可以合并多个相邻的单元格。 6. **读取Excel文件** - 使用`...

    PHP插件PHPExcel-1.8压缩包

    例如,你可以使用`getActiveSheet()-&gt;setCellValue()`方法设置单元格内容,`getStyle()`和`applyFromArray()`组合设置单元格样式。 4. **格式化和样式**:PHPExcel允许你控制单元格的字体、颜色、边框、对齐方式、...

    PHPExcel.zip

    $worksheet-&gt;getStyle('A1')-&gt;applyFromArray($style); ``` ### 4. 写入数据 如果你有大量数据需要写入,可以使用`fromArray()`方法批量插入数据。这将大大提高效率,避免循环写入的性能损耗。 ```php $data = ...

    phpExcelWriter.zip

    $sheet-&gt;getStyle('A1:A100')-&gt;applyFromArray($styleArray); ``` 在性能优化方面,`PHPExcel`提供了一些配置选项,如关闭自动样式调整、禁用公式计算等,以减少不必要的计算和内存占用。在处理大量数据时,这些...

    ext初级入门

    10. **getStyle**:`Ext.fly('elId').getStyle('color')`和`Ext.fly('elId').getStyle('z-index')`返回元素的CSS属性值。 11. **setStyle**:通过`Ext.fly('elId').setStyle({ /* style properties */ })`可以设置...

    phpexcel的使用

    $worksheet-&gt;getStyle('A1')-&gt;getFont()-&gt;getColor()-&gt;setARGB(PHPExcel_Style_Color::COLOR_RED); // 公式计算 $worksheet-&gt;setCellValue('B1', '=SUM(A1:A5)'); ``` ### 6. 支持的格式 除了Excel文件,PHPExcel...

    PHPExcel类库.zip

    6. **性能优化**:对于大数据量的处理,PHPExcel提供了内存和缓存管理策略,如使用CSV备份,分批处理数据等,以减少内存消耗和提高性能。 7. **兼容性**:PHPExcel兼容多种PHP版本,适合各种类型的PHP项目。同时,...

Global site tag (gtag.js) - Google Analytics