Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Multithreading_Html_Web Worker - Fatal编程技术网

Javascript 为什么不';网络工作者使用的更多吗?

Javascript 为什么不';网络工作者使用的更多吗?,javascript,multithreading,html,web-worker,Javascript,Multithreading,Html,Web Worker,无论是作为博客帖子的主题,还是在演讲中提到的,我都会不时地接触到这项技术 在我最近参加的一次演讲中,演讲者谈到了网络工作者: 我不太清楚为什么它们没有被更多地使用 经过思考,我意识到,对于一项具有如此明显好处的技术,网络工作者的采用似乎相当缓慢,或者说非常狭窄 网络工作者是否有一些固有的问题使他们变得不那么有用?我只是在错误的地方寻找使用它们的例子吗?还是说Javascript程序员一般不太习惯于创建多线程应用程序。主要原因是它们没有被广泛使用(在我看来): 惯性。它们是一项相对较新的技术,人们

无论是作为博客帖子的主题,还是在演讲中提到的,我都会不时地接触到这项技术

在我最近参加的一次演讲中,演讲者谈到了网络工作者:

我不太清楚为什么它们没有被更多地使用

经过思考,我意识到,对于一项具有如此明显好处的技术,网络工作者的采用似乎相当缓慢,或者说非常狭窄


网络工作者是否有一些固有的问题使他们变得不那么有用?我只是在错误的地方寻找使用它们的例子吗?还是说Javascript程序员一般不太习惯于创建多线程应用程序。

主要原因是它们没有被广泛使用(在我看来):

  • 惯性。它们是一项相对较新的技术,人们还没有花时间去学习它们。你参加了一个关于它的讨论,这意味着你走在了前面;有很多人甚至还没有听说过“网络工作者”这个词,更不用说考虑编码了

  • 浏览器兼容性。旧浏览器不支持它们。大多数人仍然需要为他们的网站至少支持IE8,所以现在还不能使用这样的技术

  • 为什么要麻烦?使用新技术的唯一原因是它解决了一个问题或取得了一些新成果。大多数网站并不真正需要网络工作者。或者即使他们这样做了,他们也看不到有必要

  • 不够闪亮。网络是一种非常视觉化的媒介,过去几年中的许多新浏览器功能都非常视觉化。如果一个新功能看起来不错,那么很容易说服别人尝试它。网络工作者完全是非视觉的;好处是抽象的。开发人员可能会得到它,但对于大多数公司来说,关于花时间和金钱改进网站的决定是由非开发人员做出的,这使得网络工作者很难看到它

  • 我的意见是:

  • 只有当你需要大量计算时,它们才能很好地工作。在其他情况下,您会为共享资源、合并而浪费时间
  • 需要额外的编码
  • 对于简单的任务,它们不会带来太多好处,JS通常不会进行大量计算
  • 不要在每个浏览器上都工作,IE8、ie9不支持它()
  • 工作进程中没有DOM访问权限
  • 有些人只是使用setTimeout和setInterval,但在这些都不是多重威胁中,只有一个CPU同时工作
  • 如果只有一个CPU,它们就不能正常工作。编辑:您可以从后台运行进程中获益
  • 有时很难共享资源,这需要太多的时间,最终结果并不好

  • 但是,当您需要在后台进行大量计算或运行繁重的过程时,您可以忽略旧浏览器,web Worker工作得非常好。

    通常,进行计算的网站是内部网站。大多数大公司使用微软的产品,他们使用IE作为浏览器。拥有最新版本的IE并不容易,因为升级会破坏许多intranet网站。目前我的公司使用IE9,他们计划在两年内推出IE10。。。。我有很多可以使用Web Workers的应用程序,但我不能,因为我没有IE 10…

    Workers中支持的大多数API使我的许多项目无法使用它们

    Firefox在v35之前不会有Websocket支持,performance.now在v34中,IndexedDB支持也没有日期。 Chrome最近才在v38中添加了文本编码器/解码器,无法传递图像数据。 有些功能可以填充,但其他功能不能填充,或者在违背目的的情况下工作会特别痛苦


    WebSocket还没有完成。

    由于这个问题的大多数答案都是几年前的事,以下是我对2019年5月的现状的看法

    ,我认为浏览器支持不再是使用它们的一个重大障碍。尽管如此,网络工作者仍然没有被广泛使用,我接触的大多数网络开发人员也没有使用他们

    当然,不是每个网站都需要做足够的繁重工作来证明一个网络工作者是正当的;许多网站根本不需要JavaScript。所以,我不希望在大多数网站上现实地看到网络工作者

    但“繁重的工作”并不是证明网络工作者正当性的唯一因素——另一个因素是易用性。网络工作者在许多情况下都是一个巨大的挑战。请注意,这涉及到将构建输出拆分为单独的文件,或在运行时生成该代码(例如,使用数据URI或
    fn.toString()
    )。Web开发人员使用许多不同的构建系统,并且在他们的项目中通常有许多依赖项。配置项目以创建这些具有正确依赖关系的附加构建工件可能很困难,或者至少它随您拥有的构建系统而变化


    此外,对于每个单独的项目,这项工作几乎总是由每个web开发人员完成。如果WWs在开发人员已经依赖的流行库和框架中被普遍使用,那么您可以期待更高的Web工作者采用率。但事实并非如此(如果我不得不猜测的话,是因为与API相关的原因),即使对于进行大量同步工作的库也是如此。只要使用主线程是默认的、最容易做到的事情,大多数开发人员都会继续这样做。

    这是一个意见问题,因此可能会因为Stackoverflow的主题之外而被关闭。不过这是一个有趣的问题。@Spudley我很害怕这个问题-我对人们的意见很感兴趣,尽管它会持续下去。我认为,通过一些改写,它可能会变得更加客观-一个询问网络工作者的问题,以防被采纳的问题可能是广泛的,但我认为这比现在出现的基于观点的问题要好