有没有理由使用document.write()来包含jquery cdn?

时间:2017-04-28 15:09:31

标签: javascript jquery performance document.write

我正在为一个用PHP编写的开源项目的一些可能的附加模块工作。我对在html标题中找到的代码感到困惑,但我对使用除html和css以外的任何东西感到很陌生。

<script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript type="text/javascript" src="//code.jquery.com/jquery-1.12.0.min.js"%3E%3C/script%3E'));</script>
<script type="text/javascript">window.jQuery || document.write(unescape('%3Cscript type="text/javascript" src="<?php echo $template->get_template_dir('.js',DIR_WS_TEMPLATE, $current_page_base,'jscript'); ?>/jquery.min.js"%3E%3C/script%3E'));</script>

我发现他们为什么要添加两次的最接近的答案是本地副本是CDN过载时的后备。 Force Download from local cache

但即使在这种情况下,主要的顶部链接也不会是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"> </script>

...然后如果要通过document.write()包含任何内容,那将是后备吗?

它还会在开发者控制台中抛出错误警告。我问他们是否有某种理由(我还不会理解),就像他们这样做一样。如果我用直接链接替换两行document.write()东西,我就不会收到控制台警告,而且我的项目似乎加载得更快。

1 个答案:

答案 0 :(得分:-1)

document.write用于加载脚本标记的原因是因为事先window.jQuery ||位。像这样使用||运算符来检查是否定义了左侧表达式 - 如果是这样,它什么都不做;如果没有,它会在右侧运行表达式,从而创建脚本标记。只有在页面上尚未加载jQuery时,才能创建加载jQuery的功能。