如何在IE6中处理带有数千个复选框的页面上的javascript

如何在IE6中处理带有数千个复选框的页面上的javascript,javascript,internet-explorer-6,performance,Javascript,Internet Explorer 6,Performance,我在ASP.NET中使用一些javascript编写的代码方面遇到了问题,我向服务器发回了对大约8000个复选框的网格所做的更改。这是,当我测试它的时候,在IE6中有大约1000个复选框,一切看起来都正常。但是现在,在导入了真实的数据之后,我被IE6的缓慢和我编写的代码不会削减它的现实所困扰 我必须使用IE6来测试它,因为不幸的是,客户端要求web应用程序与它完全兼容。如何提高页面的速度 编辑 我数了数页面上的行和列:66*110=7260复选框 代码 [……] [……] var isD

我在ASP.NET中使用一些javascript编写的代码方面遇到了问题,我向服务器发回了对大约8000个复选框的网格所做的更改。这是,当我测试它的时候,在IE6中有大约1000个复选框,一切看起来都正常。但是现在,在导入了真实的数据之后,我被IE6的缓慢和我编写的代码不会削减它的现实所困扰

我必须使用IE6来测试它,因为不幸的是,客户端要求web应用程序与它完全兼容。如何提高页面的速度

编辑

我数了数页面上的行和列:66*110=7260复选框

代码

[……]


[……]


var isDirty;
var识别器;
函数SaveAssociation(){
setIsDirty(假);
}
//检查页面是否已被修改
函数CheckIsDirty(_id){
setID(_id);
如果(getIsDirty()==true){
ShowConfirmPopup();
}否则{
ShowGridPopup();
}
}
函数ShowGridPopup(){
如果(getID()=“EqClasses”){
ShowClassPopup();
}else if(getID()=“失败”){
ShowFailurePopup();
}
}
//isDirty设定器
函数setIsDirty(changeVal){
isDirty=changeVal;
}
//isDirty吸气剂
函数getIsDirty(){
回报率;
}
函数ClickSaveButton(){
var _id=$('a[id$=“butSaveAssociation”]”)attr(“id”);
__doPostBack(_id.replace(“”、“$”);
}
函数ShowClassPopup(){
var_id=“”;
var modal=$find(_id);
modal.show();
}
函数ShowFailurePopup(){
var_id=“”;
var modal=$find(_id);
modal.show();
}
函数ShowConfirmPopup(){
var_id=“”;
var modal=$find(_id);
modal.show();
}

当然,我不知道你在做什么,但一个页面上有8000个复选框对我来说似乎对用户很不友好。考虑添加分页和过滤以保持每页复选框的数量,也许是100?

编辑-您似乎还认为这是一个IE6问题。我冒昧地猜测,任何浏览器都会对您所说的音量产生问题


双重编辑-好的,在查看您的代码之后,我确信提高速度的唯一方法是减少网站上的控件数量。你在JS中没有做任何疯狂的事情。

当然,我不知道你在做什么,但是在一个页面上有8000个复选框对我来说似乎非常不友好。考虑添加分页和过滤以保持每页复选框的数量,也许是100?

编辑-您似乎还认为这是一个IE6问题。我冒昧地猜测,任何浏览器都会对您所说的音量产生问题


双重编辑-好的,在查看您的代码之后,我确信提高速度的唯一方法是减少网站上的控件数量。你在JS中没有做任何疯狂的事情。

呼应@Matt Grande-你在尝试做一些不可能的事情。IE6运行javascript的速度非常非常慢。在终端用户可能正在使用的古老硬件上,速度也会相应地慢一些。无论你做什么,几乎不可能避免内存泄漏。这不是一个好办法


如果你真的需要一个页面上的6000个复选框,那么考虑另一种方法。例如,使用预渲染的所有复选框的单个图像。捕获鼠标点击事件,找出他们使用鼠标位置选中的框,用VML显示复选标记,并将信息保存为数组或JSON,保存在隐藏字段中。

Echoing@Matt Grande-你在尝试做一些不可能的事情。IE6运行javascript的速度非常非常慢。在终端用户可能正在使用的古老硬件上,速度也会相应地慢一些。无论你做什么,几乎不可能避免内存泄漏。这不是一个好办法


如果你真的需要一个页面上的6000个复选框,那么考虑另一种方法。例如,使用预渲染的所有复选框的单个图像。捕获鼠标单击事件,找出他们使用鼠标位置选中的框,用VML显示复选标记,并将信息保存为数组或JSON,保存在隐藏字段中。

如果不想提高速度,可以降低速度。让我们看看javascript。你有演示页面吗?若并没有代码可看,你们只会得到模糊的猜测和“最佳实践”讲座。“我怎样才能提高页面的速度?”——重新设计它。我想不出在一个HTML页面上有8000个复选框的好理由。或者任何地方的任何界面。@JFB-如果他想在一个页面上设置8000个复选框,那么你就要说服他,他的设计是荒谬的,并建议其他方法。我理解,如果这是客户想要的,可能很难说服他们放弃这个想法。但是,作为开发人员和网页设计方面的知识专家,告诉他们什么是可能的,什么是不可能的,也是你的工作。告诉他们,如果他们想使用十年前的浏览器(字面意思),有些事情是不可能的。当你在教育他们这方面的时候,也建议一个替代方案。比如,“我们不能做X,但我们可以做Y,这就是为什么”客户并不总是正确的。在使用IE6时,“客户想要这个”并不是在页面上放置8000个复选框的有效借口。我不确定你希望得到什么样的答案。你不想提高速度,你想降低速度。让我们看看javascript。你有演示页面吗?如果没有代码可看,你只能得到模糊的猜测和“最佳实践”讲座
<asp:Repeater ID="repChkAssociations" runat="server" DataSource="<%#Failures%>">
<ItemTemplate>
    <td style="text-align: center;">
        <asp:CheckBox ID="cbEqClassFailure" runat="server" Enabled="<%#AllowEditAssociations%>"
            ToolTip='ommited code'
            Checked='ommited code'
            OnClick="setIsDirty(true);"
            >
        </asp:CheckBox>
    </td>
</ItemTemplate>
<script src="~/Scripts/jquery-1.6.1.min.js"></script>

<script type="text/javascript">

    var isDirty;
    var identifiter;

    function SaveAssociation() {
        setIsDirty(false);
    }

    // check if the page has been modified
    function CheckIsDirty(_id) {
        setID(_id);
        if (getIsDirty() == true) {
            ShowConfirmPopup();
        } else {
            ShowGridPopup(); 
        }
    }

    function ShowGridPopup() {
        if (getID() == "EqClasses") {
            ShowClassPopup();
        } else if (getID() == "Failures") {
            ShowFailurePopup();
        }
    }

    // isDirty setter        
    function setIsDirty(changeVal) {
        isDirty = changeVal;
    }

    // isDirty getter
    function getIsDirty() {
        return isDirty;
    }

function ClickSaveButton() {
    var _id = $('a[id$="butSaveAssociation"]').attr("ID");
    __doPostBack(_id.replace("_", "$"), '');
}

function ShowClassPopup() {
    var _id = '<%= eqClassPopup.BehaviorID %>';
    var modal = $find(_id);
    modal.show();
}

function ShowFailurePopup() {
    var _id = '<%= failurePopup.BehaviorID %>';
    var modal = $find(_id);
    modal.show();
}

function ShowConfirmPopup() {
    var _id = '<%= confirmPopup.BehaviorID %>';
    var modal = $find(_id);
    modal.show();
}
</script>