gpt4 book ai didi

internet-explorer - IE 挂起 100% CPU/Got 堆栈跟踪

转载 作者:行者123 更新时间:2023-12-04 07:48:43 27 4
gpt4 key购买 nike

我遇到 IE7 挂起访问我的网络应用程序的情况。基于优秀suggestion来自 George V. Reilly ,我安装了 WinDbg 以下载 IE 符号,设置 Process Explorer 以使用这些符号,然后使用 Process Explorer 获取挂起线程的堆栈跟踪。

我在下面粘贴了堆栈跟踪。是否有人更熟悉 IE 内部结构,了解正在发生的事情,或者对如何处理这个问题有建议?

ntkrnlpa.exe!KiUnexpectedInterrupt+0x8d
ntkrnlpa.exe!PsDereferencePrimaryToken+0x362
ntkrnlpa.exe!KiDeliverApc+0xb3
ntkrnlpa.exe!KiDispatchInterrupt+0x5a2
ntkrnlpa.exe!SeOpenObjectAuditAlarm+0x1ce
mshtml.dll!CTreePos::GetCp+0x5a
mshtml.dll!CFlowLayout::GetNestedElementCch+0x7d
mshtml.dll!CDisplay::FormattingNodeForLine+0x1d5
mshtml.dll!CFlowLayout::LineStart+0xdb
mshtml.dll!CDisplayPointer::GetLineStart+0x44
mshtml.dll!CDisplayPointer::IsAtBOL+0x4e
mshtmled.dll!CCaretTracker::PositionCaretAt+0xf9
mshtmled.dll!CCaretTracker::Init2+0x54
mshtmled.dll!CSelectionManager::SetCurrentTracker+0x26
mshtmled.dll!CSelectionManager::CreateTrackerForContext+0x1c0
mshtmled.dll!CSelectionManager::SetEditContext+0x8b
mshtmled.dll!CSelectionManager::SetEditContextFromElement+0x2ed
mshtmled.dll!CSelectionManager::EnsureEditContextClick+0x343
mshtmled.dll!CSelectionManager::HandleEvent+0xb9
mshtmled.dll!CHTMLEditor::PostHandleEvent+0x89
mshtml.dll!CDoc::HandleSelectionMessage+0x1e0
mshtml.dll!CDoc::PumpMessage+0xb69
mshtml.dll!CDoc::OnMouseMessage+0x3d7
mshtml.dll!CDoc::OnWindowMessage+0x748
mshtml.dll!CServer::WndProc+0x78
USER32.dll!InternalCallWinProc+0x28
USER32.dll!UserCallWinProcCheckWow+0x150
USER32.dll!CallWindowProcAorW+0x98
USER32.dll!CallWindowProcW+0x1b
IEDevToolbar.dll!DllUnregisterServer+0xe21d
USER32.dll!InternalCallWinProc+0x28
USER32.dll!UserCallWinProcCheckWow+0x150
USER32.dll!DispatchMessageWorker+0x306
USER32.dll!DispatchMessageW+0xf
IEFRAME.dll!CTabWindow::_TabWindowThreadProc+0x189
kernel32.dll!BaseThreadStart+0x37

最佳答案

根据堆栈跟踪,它正在更改 DOM。正如您在上一篇文章中评论的那样,IE 在 DOM 上进行读取和写入时效率极低(与 Firefox 和 Chrome 相比。)

可以通过减少和优化 DOM 的读取和写入来解决性能问题:

  1. 尽可能使用简单的 DOM 属性和方法在 DOM 中导航(Document.getElementByIdDomElement.parentNodeDomElement.childNodes[]DomElement.nextSibling 等)而不是 XPATH (CSS) 选择器方法 (DomElement.querySelector)
    • 这是因为 querySelector 在 IE 下的行为复杂度为 O(N),其中 N 是整个 DOM 的大小 - 也就是说,您即使您在没有子节点的叶节点上调用 querySelector,也会付出遍历整个 DOM 的代价!
    • 如果您为 DOM 的相当大的子集中的每个元素触发一个或多个 querySelector 调用,您实际上要支付 O(N^2) 的惩罚
    • 注意YUI的YAHOO.util.Selector.query, Prototype的element.down, element.up, element.select 内部都使用querySelector调用
  2. 如果可能,改变 UI 行为以跳过或推迟尽可能多的 DOM 遍历和修改
    • 一次呈现尽可能少的信息;强制用户点击(例如展开链接等)以便您继续进行其他处理/修改
  3. 从 Javascript 切换到 Flash 或 Java。

考虑到您使用的是 YUI,就选项 1 而言,您可能没有太多选择余地,而且我可以想象选项 3 几乎肯定不是您的选择。不幸的是留下了选项 2。

关于internet-explorer - IE 挂起 100% CPU/Got 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com