【问题标题】:window.open force new JavaScript threadwindow.open 强制新建 JavaScript 线程
【发布时间】:2016-08-08 19:14:19
【问题描述】:

有谁知道是否有办法为新窗口强制使用新的 JavaScript 线程?

我有一个 ExtJs 应用程序,其渲染步骤正在扼杀用户交互。我现在不能扔掉整个 Ext 应用程序,所以我设计了一种方法来利用 localStorage 来管理浏览器窗口之间的传递事件,并用一个新的 Angular2 应用程序替换应用程序的高活动数据输入部分分机应用程序的窗口。

虽然 Angular2 方面的表现非常出色,但当带有 Ext 应用程序的父窗口在渲染步骤期间挂起时,带有 Angular2 应用程序的窗口也会挂起,导致用户丢失击键(这很糟糕)。

理想情况下,能够将 Angular2 应用的 JavaScript 线程与 Ext 分离是我想做的事情。

有谁知道这是否可行?

【问题讨论】:

  • 为什么不直接生成一个工人呢?
  • 为了哪个?除非我在工人的工作方式中缺少某些东西,否则工人对我没有好处?当 ExtJS 应用程序处于渲染步骤时,它会锁定主 JS 线程,这是唯一可以与锁定两个窗口的 DOM 交互的线程(也就是发生在另一个窗口中的数据输入)。
  • 不要认为会有跨浏览器的方式来做到这一点。请注意,如果您在 I 浏览您的网站时这样做,我会非常恼火 - 我使用 Firefox 并且打开一个新窗口似乎非常昂贵(我的插件没有' t 似乎有帮助) - 打开一个新窗口往往会导致所有浏览器实例一次挂起长达 10 秒。都是因为你认为window.open减少挂起。
  • 这是一个基于 PHP 和 RPG 的大型企业 ExtJS 4.2 单页应用程序,而不是面向消费者的网站。遗憾的是,这 比在实际应用程序中执行数据输入的性能更高。

标签: javascript multithreading extjs window.open


【解决方案1】:

Javascript 不是线程语言。但是,为了在不阻塞 UI 的情况下运行函数,可以使用一些替代方法。最广泛的解决方案是使用WindowTimer functions

在此处进一步阅读:How can I create an Asynchronous function in Javascript?

【讨论】:

【解决方案2】:

实际上,这取决于浏览器如何处理它.... 还取决于您如何使用什么参数打开浏览器。 如果父母和孩子是耦合的,那么这可能是一个问题。如果父母和孩子是独立的,那么您可能会有所帮助。

检查这个答案 https://stackoverflow.com/a/17169863/2219162

【讨论】:

  • 是的,这是正确的。问题是有人知道在任何浏览器中强制一个新线程的任何方法吗?
【解决方案3】:

没有办法强制为新窗口创建一个新的 JavaScript 主线程。

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 2011-08-04
    • 2010-11-24
    • 2012-09-12
    • 2019-06-08
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多