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