script标签和link标签属性小记

498 阅读2分钟

dns-prefetch

看别的网站的时候经常看到类似这样的的代码<link rel="dns-prefetch" href="https://fonts.googleapis.com/"> ,那dns-prefetch到底有什么用呢?

dns-prefetch(DNS预获取)是尝试在请求资源之前解析域名,仅对跨域上的dns查找有效。 dns-prefetch 可帮助开发人员掩盖 DNS解析延迟

当浏览器从(第三方)服务器请求资源时,必须先将该跨域域名解析为 IP地址,然后浏览器才能发出请求。此过程称为 DNS解析。DNS 缓存可以帮助减少此延迟,而 DNS解析可以导致请求增加明显的延迟。对于打开了与许多第三方的连接的网站,此延迟可能会大大降低加载性能。dns-prefetch 可帮助开发人员掩盖 DNS解析延迟

script 标签的defer和async 属性

当浏览器加载 HTML 时遇到script标签,就会等待script脚本执行完成再去加载后边的dom元素,造成页面的阻塞, defer 和 async 属性解决了这个问题

下面说下三种不阻塞页面加载的方式

defer 和 async 还有动态创建script

不阻塞页面加载script的方式.png

接下来说下html页面的生命周期

DOMContentLoaded,load,beforeunload,unload

html生命周期.png

beforeunload

window.onbeforeunload = function (e) {
  e = e || window.event;

  // 兼容IE8和Firefox 4之前的版本
  if (e) {
    e.returnValue = '关闭提示';
  }

  // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
  return '关闭提示';
};

unload

假设我们收集有关页面使用情况的数据:鼠标点击,滚动,被查看的页面区域等。当用户要离开的时候,我们希望通过 unload 事件将数据保存到我们的服务器上

    window.addEventListener('unload', logData, false);

    function logData() {
        navigator.sendBeacon("/log", analyticsData);
    }

navigator.sendBeacon的使用

用于通过HTTP将少量数据异步传输到Web服务器。

为满足统计和诊断代码的需要,这些代码通常尝试在卸载(unload)文档之前向web服务器发送数据。过早的发送数据可能导致错过收集数据的机会。为了解决这个问题, 统计和诊断代码通常要在 unload 或者 beforeunload (en-US) 事件处理器中发起一个同步 XMLHttpRequest 来发送数据。同步的 XMLHttpRequest 迫使用户代理延迟卸载文档,并使得下一个导航出现的更晚。下一个页面对于这种较差的载入表现无能为力。

但是 sendBeacon() 方法会使用户代理在有机会时异步地向服务器发送数据,同时不会延迟页面的卸载或影响下一导航的载入性能。这就解决了提交分析数据时的所有的问题:数据可靠,传输异步并且不会影响下一页面的加载

  1. 请求以 POST 方式发送。
  2. 我们不仅能发送字符串,还能发送表单以及其他格式的数据
  3. 数据大小限制在 64kb。

#参考

zh.javascript.info/onload-ondo…

zh.javascript.info/script-asyn…