Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么创建窗口比重新加载窗口慢_Javascript_Html_Google Chrome_Page Refresh - Fatal编程技术网

Javascript 为什么创建窗口比重新加载窗口慢

Javascript 为什么创建窗口比重新加载窗口慢,javascript,html,google-chrome,page-refresh,Javascript,Html,Google Chrome,Page Refresh,上下文:我将解释这个问题的上下文,但我认为这个问题的答案并不是非常具体的上下文 我有一个chrome浏览器的背景页面和一个chrome扩展。该页面执行以下操作: chrome.commands.onCommand.addListener(function(){ chrome.windows.create({ url:"page.html", type:'popup' }); }); 如您所见,当用户触发命令(使用热键)时,这将创建一个新窗口,从我

上下文:我将解释这个问题的上下文,但我认为这个问题的答案并不是非常具体的上下文

我有一个chrome浏览器的背景页面和一个chrome扩展。该页面执行以下操作:

chrome.commands.onCommand.addListener(function(){
    chrome.windows.create({
        url:"page.html",
        type:'popup'
    });
});
如您所见,当用户触发命令(使用热键)时,这将创建一个新窗口,从我的扩展名中加载page.html文件

page.html是一个相当沉重的页面。它运行一组脚本(全部来自扩展目录)和一组图像(也全部来自扩展目录)

上下文的妙语:这里重要的一点是页面完全在本地加载。没有任何东西(直到用户输入)调用到internet,当我脱机时,它可以正常加载

问题

  • 当我通过触发事件加载窗口时,如上所述,加载需要一些时间,比如说可能需要1.5秒。如果我随后刷新新窗口(page.html),它将在0.5秒内加载。是什么导致了时间上的差异
  • 我如何利用更快的刷新率来加快初始页面的加载速度?我可以加载一个隐藏的版本吗?或者以某种方式预先渲染它?如有任何建议,将不胜感激

关于第一个问题:

刷新页面不会导致所有内容(如渲染引擎)再次初始化。根据浏览器的实现,浏览器会在缓存中保留大量资源,并且当再次访问相同的URL(本例中为页面刷新)时,会从缓存中加载资源,这会更快。因此造成了时间上的差异

关于第二个问题:


@elfin forest的回答可能会给您一些启示。

如果您在开发人员工具打开时右键单击“重新加载”按钮,那么您将获得三个选项

正常重新加载

这是默认设置(按F5)。这将使用缓存,但在页面加载期间重新验证所有内容,查找“304未修改”响应。如果浏览器可以避免重新下载缓存的JavaScript文件、图像、文本文件等,那么它会。这可能就是你在速度上有差异的原因

硬重新加载

发出请求时不使用缓存中的任何内容。它强制浏览器重新下载每个JavaScript文件、图像、文本文件等

空缓存和硬重新加载

这是第三个选项,它清除缓存,然后重新加载


尝试其余两种形式的重新加载,然后请报告速度差异是否仍然明显。

当您刷新页面时,Google已经拥有运行脚本所需的所有数据。这意味着,当您重新刷新脚本时,它所要做的就是运行脚本,从而消除收集数据所需的1秒时间。

刷新页面时,您无需再次获取所有内容。大量占用大量加载时间的图像可以保留下来。在任何网站上都可以尝试。刷新它总是比打开一个新网页快,但这并不能解释所有内容都在本地文件夹中的情况。我假设的本地文件夹在被调用之前不在RAM中。因此,即使不涉及网络,将图像从硬盘加载到RAM所需的时间也要比图像已经在RAM中所需的时间多得多。我假设chrome也在缓存和其他技巧方面做了一些鬼鬼祟祟的事情,以使页面加载更快,部分原因是在内存中创建窗口对象(chrome[意味着窗口边框、大小等]、渲染引擎等)的开销。这在重新加载时不需要发生。在Windows系统上,评估加载或重新加载的速度是一种幻想,在Windows系统中,船长是其他一切(Windows 8、81、10),而不是您感兴趣的应用程序。因此,即使您禁用fine或以某种方式,也会出现随机延迟:Windows防火墙、Defender、,etc将有一些东西,而不是你的铬延迟。我认为其他操作系统也会发生类似的事情。在我的系统上,MIcrosoft force上的一些东西被禁用,我可以复制你的情况(无法解释的延迟),计算php脚本解析执行时间的微秒。我有类似的结果当你说“缓存”时,你到底指的是什么?我的理解是,缓存只会节省网络时间。如果所有文件都是本地文件,为什么速度会更快?我指的是浏览器的存储。是的,它确实节省了网络时间,但它所做的远不止这些。当页面第一次加载时,无论页面存储在本地还是某些服务器中,浏览器都会缓存(或存储)页面的某些部分(取决于其实现),并将其存储。因此,当页面下次加载时(在您的例子中是刷新),它将从内存而不是本地获取页面。从缓存中获取数据比在本地获取数据更快。你可以看到(并清除)构建缓存的大小。(@WaleedIqbal“精灵森林的回答可能会给你一些启示”这句话是什么意思?看不到答案或任何说明如何加快窗口创建的内容。非常感谢您的解决方案!看来他的答案现在被删除了。