当我们在一个非常繁重的网页上加载一个巨大的html表单和大量的事件处理程序代码时,页面会变得非常滞后一段时间,响应任何用户交互(比如更改输入值)和1- 2秒延迟。
有趣的是,过了一段时间(取决于要解析的页面和代码的大小,但大约1-2分钟),它通常与平均大小的网页一样快速。我们尝试在开发工具中使用分析器来查看可能在后台运行的内容但是没有任何令人惊讶的事情发生。 页面加载后没有网络流量发生,也没有任何阻塞代码在运行,并且根据分析器,HTML解析时间已经很久了。
我的问题是:
注意:显而易见的是,我们的前端已经过时且效率低下,但我们希望在进行大量重写之前从中挤出所有内容。
答案 0 :(得分:2)
是的,现代浏览器,即现代Javascript运行时在加载过程中执行许多优化,更重要的是在页面生命周期中执行:其中一个是“Lazy / 及时编译”,一般意味着运行时观察到的苛刻或经常执行的模式,并将它们转换为更快,更接近金属的格式。通常以更高的内存消耗为代价。有趣的事实是,这种优化通常会使“看似丑陋,糟糕但可预测”的代码比思想复杂的代码更快“手工制作的优化“一个。
但我不完全确定这是你所描述的现象的主要原因。最初的缓慢和反应迟钝通常是由网络请求,阻塞代码,HTML和CSS解析以及CPU / GPU渲染,即有线/缓存 - >内存 - > cpu / gpu循环引起的,这不依赖于Javascript之前提到的优化。
进一步阅读: