对csdn论坛的一点点技术上的改进(关于tacontent.htc的绑定问题),欢迎讨论。
用过htc的人应该都知道,htc最大的缺陷是重复下载的问题。
比如
something.htc的内容
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="oncontentready" ONEVENT="element.init()" />
<PUBLIC:METHOD NAME="init" />
<SCRIPT>
function init(){
element.attachEvent("onclick",function(){alert(event.srcElement.value)};
}
</SCRIPT>
</PUBLIC:COMPONENT>
diaplay.htm内容的:
<html>
<style>input { behavior:url('something.htc')}</style>
<body>
<input type=text><input type=text><input type=text><input type=text><input type=text>
<input type=text><input type=text><input type=text><input type=text><input type=text>
</body></html>
当这个网页被打开的时候,something.htc这个文件不是下载一次,分析一次.
而是被重新下载了并重新分析作用于input标签上。
一共下载了十次,被分析了十次。(尽管something.htc已经在您的浏览器的cache里面)
如果有200个<input type=text>那么将被下载200次,这样鼠标晃动厉害,对性能也有影响。
看看CSDN的代码片段:
if (parseInt(window.IEVersion)<6)
document.write("<style>textarea.content { behavior:url('/Expert/xsl/tacontent.htc')}</style>");
显然,每一个回复内容的显示都用了htc,对于那些热门的帖子(回复超过100的,这种帖子不少哦)。
显示起来是很吃力的。
/************************************************************/
我的解决方法:(看等效代码)
something.htc的内容
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="oncontentready" ONEVENT="element.init()" />
<PUBLIC:METHOD NAME="init" />
<SCRIPT>
function init(){
var colls=document.all.tags("INPUT");
var collnum=colls.length
for(var i=0;i<collnum;i++){
colls[i].attachEvent("onclick",function(){alert(event.srcElement.value)};
}
}
</SCRIPT>
</PUBLIC:COMPONENT>
display.htm的内容
<html>
<body style="behavior:url('something.htc')"> <!--绑定到这里-->
<input type=text><input type=text><input type=text><input type=text><input type=text>
<input type=text><input type=text><input type=text><input type=text><input type=text>
<input type=text> ....多少input都不怕了.......... <input type=text>
</body></html>
注意到没有,我把这个htc绑定到body上面,只需要下载和被浏览器分析一次,而
在body的oncontentready事件上运行代码,就相当于在window.onload或者document.onload事件一样。
是在所有input标签都被下载后才访问他们,不存在会访问到一个还没有被下载完的标签的可能。
建议CSDN的相关技术人员关注一下,和大家一起讨论一下,把这个论坛的速度搞上去。
最后,如果我的这个建议有什么不妥的地方,或者我没有考虑周到的地方,请务必让我知道。