当您的页面链接至使用 target="_blank" 的另一个页面时,新页面将与您的页面在同一个进程上运行。 如果新页面正在执行开销极大的 JavaScript,您的页面性能可能会受影响。

此外,target="_blank" 也是一个安全漏洞。新的页面可以通过 window.opener 访问您的窗口对象,并且它可以使用 window.opener.location = newURL 将您的页面导航至不同的网址。

单击下面的一个链接,打开一个需要大量JavaScript计算的页面(以下并非链接,请参见原文——译者注):

<a target="_blank">
<a target="_blank" rel="noopener">

没有rel="noopener",随机数会被新打开页面中的JavaScript阻断。不仅如此,所有主线程活动也会被阻塞,试试选择页面中的文本。但加了rel="noopener"之后,随机数生成一直保持在60fps。当然,是在Chrome或Opera中。

大多数浏览器都是多进程的,除了Firefox(他们正在改)。每个进程包含多个线程,包括我们常说的“主”线程。解析、样式计算、布局、绘制和非worker的JavaScript都在主线程里执行。就是说,一个域中的JavaScript与另一个标签页或窗口中的域中的JavaScript在不同的线程里。

然而,由于我们可以通过window.opener同步跨窗口地访问DOM,因此通过target="_blank"启动的窗口还在同一个进程(线程)中。通过window.open打开的iframe和窗口也一样。

rel="noopener"会阻止window.opener,因此不存在跨窗口访问。Chromium浏览器为此做过优化,会在独立的进程中打开新页面。

REFs

最新文章

  1. salesforce 零基础学习(十八)WorkFlow介绍及用法
  2. ComboBoxEdit设置选项值(单选 多选)
  3. 解猜数字(XAXB)
  4. jquery若干问题
  5. 新手教程之使用Xib自定义UITableViewCell
  6. ubuntu13.04下载android4.0.1源码过程
  7. 用const取代宏定义更好的管理内存
  8. RR 插入不影响
  9. 走进C++程序世界------继承和派生
  10. HashMap,LinkedHashMap,TreeMap的区别(转)
  11. DataGridView很详细的用法
  12. SQLCODE=-668, SQLSTATE=57016, SQLERRMC=7
  13. Mesos源码分析(16): mesos-docker-executor的运行
  14. node.js api文档生成
  15. Docker下安装Influxdb-1.6.1和Grafana5.2.2
  16. 项目:《JavaWeb图书管理系统视频》--代码修复还可以运行起来
  17. [lightoj P1306] Solutions to an Equation
  18. Golang 数组、切片、映射
  19. [转]Git忽略提交规则 - .gitignore配置运维总结
  20. L2-017. 人以群分

热门文章

  1. PAT 1082 Read Number in Chinese[难]
  2. java 的==和equals的区别(二)
  3. 转载Liferay PortletPreference store()方法研究
  4. SEO笔记:Anatomy of a URL
  5. hdu5021 树状数组+二分
  6. 学号20155308 2016-2017-2 《Java程序设计》第7周学习总结
  7. Gulp命令自动生成精灵图
  8. Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1
  9. 20145315 《Java程序设计》第六周学习总结
  10. noip2017普及 兔纸游玩记