我可以使用一些帮助调试addEventListeners。
我想要一些关于如何跟踪这些以及他们正在使用的资源的建议。我很确定addEventListeners是我的问题 - 因为 - 我有一个场景 - 当我添加一定数量的这些(超过 10 个)时,一些点击事件开始花费比平时更长的时间。其他事件不会触发。
使用Safari网站管理员工具/“时间轴”跟踪这些较长的点击事件时间 - 我发现诸如“ mousdown ”之类的事件(甚至是常规的onclick=""类型的事件)响应时间从几百毫秒跳到超过 1.5 秒。肯定有一个平静。
同样——在FireFox中——一个“window.print();” 在这种情况下无法触发。奇怪的是 - 如果我在“ window.print() ;”之前放置一个“ alert() ”笑话 功能 -单击以关闭警报的时间间隔 - 足以允许“window.print();” 正常运作。
我假设我的错误与时间管理有关,并且可能与时间管理呈指数增长有关。但我不确定如何最好地调试这些 addEventListeners。
我还有许多可搜索的列表,这些列表可以在用户搜索时动态创建这些addEventListener。也许我没有正确卸载它们?据我所知,可能会创建 1000 万个。
我会尽力在这里提供一些代码 - 但我真正想学习的是如何:
- 管理
- 不要跟丢
- 调试
这些addEventListeners
我查看源代码时看不到它们。在任何浏览器的任何控制台中,我都没有得到任何回报。看起来 - 一旦你创建了这些 - 就不可能跟踪它们并知道他们在做什么或不做什么?
- 怎么样 - 有没有办法跟踪我有多少跑步?
- 我使用 PHP/MySQL 从数据库中调用 Owners Pets 并将值存储在 javascript 数组中。
- 然后我需要创建选项卡来选择每个宠物。(每个选项卡都有一个“X”来删除选项卡和一个监听器)
我循环数据并创建选项卡和addEventListeners,如下所示:
...
for(var i=0; i<Pets_Array.length; i++){// Loop Existing and Active Pets Array Tabs if(Pets_Array[i]['VISITOR_IDENTITY_DELETED'] != "1"){// if pet not deleted // Create Pet Tabbing listeners document.getElementById('Visitor_Details_AUTOTAB_'+i).addEventListener("click", function(event){ event.stopPropagation(); Pet_Tabbing_Auto_Save = true; ID_Of_Pet_Tabbing = this.id; Tst_Sv_Comp('Pet_Tabbing'); },false); // Create Pet DeleteX listeners <?php //if($ADMIN == true){// Only Admin ?> document.getElementById('VISITOR_IDENTITY_TAB_X_BUTTON_'+i).addEventListener("click", function(event){ event.stopPropagation(); Delete_Pet(this.id); },false); <?php //} // Only Admin ?> Last_AutoLoaded_Pet = i; }// END if pet not deleted }//END Loop Existing and Active Pets Array Tabs
这似乎很奇怪 - 我有数百个带有列表和搜索以及页面上的选项卡和功能的addEventListeners 。这一切都表现良好 - 直到您获得超过 10 个这些选项卡和addEventListeners,这足以将所有内容都扔到顶部并导致巨大的延迟时间???
这是我的其他代码,创建也使用addEventListeners的动态搜索列表这些是在搜索功能期间添加的,因为循环了几百个搜索值。这也是在初始化时设置的 - 使用所有值填充列表。无论哪种方式 - 有几个列表有几百个值被创建到按钮中 - 每个都需要一个addEventListeners
......
// Add dbble clck evnt listener
document.getElementById(Who_To_Search_BREED_or_VET_CLINIC_G+'_'+key).addEventListener("mousedown", function(event){
event.stopPropagation();
$('#Add_'+Who_To_Search_BREED_or_VET_CLINIC_G+'_Button').hide();
Handle_Double_Clicks(this.id);
},false);
我还使用了许多图像加载侦听器,这些侦听器位于由选项卡单击触发的函数内部 - 以加载宠物个人资料图像。
IE..
Tab_Click_Function(){
var image = new Image();
image.src = '../application_images/Owners/'+G_OWNER+'/Pets/'+G_Pet_Selected+'/main/'+Main_Profile_Image_For_Pets_Array_G["PET_"+G_Pet_Selected];// Visitor_Profile_Picture image;
image.addEventListener("load", function(){
document.getElementById('PRINT_CAMPER_PROFILE_PHOTO').src = image.src;// show image now that is has loaded into the cache
}, false);
}
我相信我 - 在这里的某个地方 - 没有正确管理这些。我相信,通过一些帮助来了解跟踪、管理和调试这些的最佳方法——我将在这段代码中获得更好的性能——以及未来的代码。
谢谢你。