实战DHTML性能优化,改善自定义下拉框控件
先介绍一下本文演示用的代码,在我的项目中要实现一个自定义样式的下拉框,使用自定义的下拉箭头和自定义颜色的边框来取代系统默认的select。要实现这个功能就需要通过table模拟实现。那么我使用一个js方法来实现这个模拟过程,并封装为initSelect(id, width, height)方法。
并提供setSelect(id, index)进行某选项的选中,以及其他一些方法,全部功能至少同时兼容IE和FireFox。
因为当初写的比较随意,代码全部完成后,发现性能相当低下。大约出生日期这样的3个下拉框需要几百毫米的时间。
整优化过程我分3次进行
第一步
优化的技巧之一就是优先优化循环体,我把循环体内的不良做法优化,例如
for(var i=0;i<sel.options.length;i++)
--》
for(var i=0,j=a.length;i<j;i++)
sel.options[i].value;
--》
a[i].value;
本步产生代码initSelect2,祥见包内的s.js,下同
第二步
通过上面一个很小的改动,可以节省一些时间了,但是不会有什么大的改观,离我们优化要达到的目标相去甚远。那么现在静下来想一下,应该修改一下逻辑了
由于我们initSelect采用的方式是通过createElement创建TR,然后添加到table的rows集合中,由于创建和解析html都需要时间,所以效率较差,下面我们改良为数组方式
var arr = new Array(a.length);
for (var i=0,j=a.length;i<j; i++)
{
arr[i] = "<tr><td title='" + a[i].text + "' value='" + a[i].value + "'>" + a[i].text + "</td></tr>";
}
oCell.innerHTML = "<div id=\"O" + id + "\" class=\"select\" onselectstart=\"return false\" onmouseover=\"HoverOptions(event);\" onmouseout=\"OutOptions(event);\" onclick=\"ClickOptions(event, 'O" + id + "');\">\
<table cellsapcing=\"0\" cellspadding=\"3\" border=\"0\" width=100%>\
<tbody>" + arr.join() + "</tbody>\
</table>\
</div>";
这样DOM只需解析一次HTML,取得了很好的效果,速度提高了3倍,从300ms降到几十毫秒。
本步产生代码initSelect3
第三步
那么还可以进一步优化吗,答案是肯定的。我们前两步的重点是循环体,现在该着眼大局了,由于整个方法体内仍然多次使用了innerHTML,这是一个非常慢的操作,微软非常推荐使用innerText来尽可能代替innerHTML,但是显然不适合此处。而且必须要指出的是innerText不属于W3C标准,因而不被fireFox支持。
我前面的一些随便中的DHTML技巧里已经指出了insertAdjacentElement会比insertAdjacentHTML效果好,但是这次我们决定抛弃insertAdjacentElement而使用insertAdjacentHTML,因为这样以来我们可以把HTML解析降低为一次,所以我们把多个节点使用一个insertAdjacentHTML完成,而不是insertAdjacentElement配合多次innerHTML赋值。采取这些调整以后,我们的代码再次得到提速,虽然效果不很明显,但是仍有超过10%的改善。
本步产生代码initSelect4
参考时间:
initSelect 313
initSelect2 297
initSelect3 140
initSelect4 94
后记
其实这个方法在项目开发初期就有了,当时使用的是
for(var i=0;i<sel.options.length;i++)
{
td.innerHTML += "<tr><td>" + sel.options[i].text + "</td></tr>";
}
结果当时一个50项的select在我的3g cpu上竟然需要500ms以上的加载时间,这次调优,我重写了该方法,并分步进行了优化,希望能给DHTML开发者们带来一些启示。
如果诸位需要使用这个自定义下拉框,只需select.js和s.css,而优化演示请看demo1中的文件(代码不完整,只做演示)
全文完
分享到:
相关推荐
在HTML中,创建一个可多选的下拉框通常涉及到`<select>`元素与`<option>`元素的组合,但为了实现多选功能,我们需要使用`<input type="checkbox">`和自定义的JavaScript或者利用现代浏览器支持的Web组件技术。...
微软Dhtml网页开发控件帮助文档(翻译)微软Dhtml网页开发控件帮助文档(翻译)
开发者可以利用这些组件快速构建功能丰富的动态页面,同时,该库优化了性能,使得在不同浏览器上的表现更加一致。 3. **manifest.txt**:这是一个清单文件,通常用于Web应用程序或浏览器扩展,列出应用程序所需的...
JavaScript 和 DHTML 动态树控件在网页开发中经常被用来展示层级结构的数据,例如网站导航、文件系统或者组织架构。这些控件通过交互式的界面,为用户提供了一种直观的方式来浏览和操作数据。以下是对这四种个人收集...
随着技术的发展,该控件可能有更现代的版本,提供更多的特性和优化。开发者应关注官方更新,适时考虑升级以获得更好的性能和兼容性。 总之,`dhtmltree`作为一款强大的JavaScript树型控件,不仅简化了在JSP中构建...
"一个基于dhtml+js实现的Web颜色拾取控件colorpicker"是一个纯JavaScript编写的库,它允许开发者在网页上集成一个功能丰富的颜色选择器,用户可以通过这个控件轻松选取并设置颜色。 dhtml(Dynamic HTML)是一种...
【Dojo自定义控件应用】 Dojo是一个强大的JavaScript库,专为构建复杂的DHTML应用程序设计。它通过解决DHTML的遗留问题,如浏览器兼容性、动态内容管理和事件处理,为开发者提供了一套完整的工具集。尽管Dojo的文档...
5. **拖放功能**:允许用户在页面上拖动元素,实现自定义布局。 6. **实时内容更新**:通过Ajax(Asynchronous JavaScript and XML)技术,可以异步从服务器获取并更新内容,提高网页的响应速度。 DHTML 手册通常会...
在本篇文章中,我们将详细介绍如何自定义dhtmlxgrid的CELL编辑事件,实现自定义的编辑控件。 一、自定义CELL编辑事件 在dhtmlxgrid中,可以通过继承eXcell类来实现自定义的CELL编辑事件。在上面的示例代码中,我们...
【网站性能优化28条守则】是一篇关于提升ASP应用程序和VBScript性能的文章,它提供了许多实用的建议,旨在帮助开发者改善ASP页面的运行效率。这篇文章基于在Microsoft官方网站和其他站点的实际测试,证实了这些优化...
JavaScript通常用于操作DOM,添加、删除或修改页面元素,从而实现DHTML的效果。 CSS在DHTML中扮演着重要角色,它负责定义元素的外观和布局。通过选择器和规则,我们可以改变HTML元素的颜色、大小、位置等属性。CSS3...
在本文中,我们将探讨几个常用的DHTML控件,这些控件在开发Web应用程序时非常有用,特别是对于那些希望增强用户界面交互性的开发者。DHTML(Dynamic HTML)是一种技术,允许网页内容动态更新,无需重新加载整个页面...
“libCompiler”可能是一个编译器库,用于处理JavaScript代码,可能包括代码压缩、混淆和优化,以提高页面加载速度和代码安全性。 “docsExplorer”可能是文档浏览器或一个工具,帮助开发者查阅和理解dhtmlxSuite的...
DHTML通过JavaScript可以扩展这些控件的功能,例如: 1. **事件处理**:JavaScript可以监听并响应控件的点击、改变等事件,从而实现动态效果。 2. **属性操作**:可以修改控件的属性,如改变按钮的文字或颜色。 3. ...
TreeGrid是一个DHTML的表格控件,它完全使用JavaScript语言编写,用以实现HTML页面上的table, grid, tree view 或者 grid with tree里的数据地展示和编辑。EJS TreeGrid还提供了强大的甘特图功能,能够满足您把项目...
- 滚动条特效:自定义滚动条样式,实现平滑滚动。 学习和掌握DHTML,对于现代网页开发至关重要,它能帮助开发者创造出更具吸引力和用户体验的动态网站。随着Web技术的不断发展,DHTML的概念逐渐被更现代的前端框架...
本Dhtml手册.chm文件是一个关于DHTML的综合参考资料,对于想要深入了解和学习DHTML的开发者来说,是一份宝贵的资源。 1. **HTML基础**:DHTML建立在HTML的基础上,HTML是超文本标记语言,用于创建网页结构。DHTML...
**DHTML默认行为中文手册** DHTML(Dynamic HTML)是一种技术,它允许网页在不刷新整个页面的情况下更新部分内容,实现动态交互效果。这个“DHTML默认行为中文手册”是针对开发者的重要参考资料,旨在帮助他们理解...