【问题标题】:Is there any good reason for javascript to be inlinejavascript是否有充分的理由内联
【发布时间】:2023-03-27 23:55:01
【问题描述】:

我一直在建立一个网站。在某个阶段,我注意到 IE 显示有点损坏,Chrome 只渲染了 body 标签(空),而 FF 看起来都不错。

在房间里到处乱扔键盘并用头撞鼠标后,我发现了问题所在。我留下了(不要问如何或为什么,一定是一些闪电般的剪切和粘贴错误)在内联脚本块中未关闭的 HTML 注释。

<script type="text/javascript">
        <!--
        ...
    </script>

我猜(未经测试)如果脚本是外部的,问题要么不会出现,要么会以更明显的方式表现出来。所以无论如何,我开始想,有没有时候你有一个很好的理由来编写内联脚本??

【问题讨论】:

  • 在脚本标签中使用 HTML cmets 没有意义。当 Netscape Navigator 2 是新的(大约在 1996 年左右)时,需要它们来防止旧浏览器将脚本显示为文本。这已经十多年没有问题了,所以不要理他们。
  • 是的,我知道。这是一个完全错误。我不在 js 中使用它们,这就是为什么我提到它一定是剪切和粘贴狂热的结果。 :-( 即 DOH!

标签: javascript html scripting inline


【解决方案1】:

没有。写Unobtrusive Javascript

【讨论】:

  • 我也是不显眼的 javascript 的忠实粉丝。
  • 一些可以帮助您入门的框架包括:jQuery、YUI、Prototype、MooTools、Dojo。
  • sitepoint.com 对此有另一篇好文章 - 找不到链接 ATM
  • 我很早就同意整体不显眼,虽然有时还是会写一些“突兀”的js。所以我猜想内联 js 仍然存在的原因是“因为我们就是这样做的”。嗯,是的,cr@p 原因
  • 不显眼的javascript的原则与将脚本内联有什么关系?您可以使用内联脚本或外部脚本逐步增强您的页面,因此我会将这条评论归入“正确但不相关”的类别。我知道您链接的章节提到使用外部脚本,但它也没有给出这样做的任何理由。
【解决方案2】:

如果您希望您的 Javascript 尽早运行,那么包含内联 Javascript可能是有意义的,因为它会在任何其他 HTTP 请求必须完成之前运行。

在某些情况下,您包含来自 3rd 方提供商的 Javascript,而您实际上别无选择。某些广告系统以及 Google Analytics(分析)会浮现在脑海中。

【讨论】:

  • 我总是将 Google Analytics(分析)代码放在单独的文件中,我认为没有任何理由不这样做。
【解决方案3】:

如果必须动态生成脚本(例如通过 PHP 或 ASP.NET MVC 页面)将是内联它的原因之一 :-)

【讨论】:

  • 只需在您的服务器上设置一个类似 .phpjs 的扩展名,以便由 PHP 处理并用作 text/javascript。如果不担心性能,甚至可以让 PHP 处理 .js 句号。
  • 即便如此,拥有一个带有适当标题的单独 php 文件要好得多(而且,就此而言,有一些方法可以让 php 读取 PHP 代码的 .js 文件)。很少有 JavaScript 必须实际出现在页面上的情况,如果考虑到这一点,大多数情况都可以避免。
  • 如果有需要动态生成 JavaScript 的情况,我会考虑改用 Ajax。
【解决方案4】:

大多数 XSS 漏洞只能使用内联 javascript 来利用。

【讨论】:

    【解决方案5】:

    这不一定是充分的理由,但页面加载速度会更快。为此,有时,即使您在另一个文件中编写脚本,您也希望它在客户端显示为内联。

    【讨论】:

    • 如果在许多页面上都需要它,那么每次重新下载时,该好处很快就会被抵消。如果是一个文件,则可以缓存。与缓存的好处相比,内联是最小的。
    • 通常只有特定于页面的内容会被内联,而且,它实际上取决于您网站的网络延迟与吞吐量。由于大多数浏览器都会根据请求检查文件是否较新,因此当您不内联时仍然会受到轻微影响。我主要不使用内联,我只是说。
    【解决方案6】:

    取决于你打算写多少 JS。如果您正在编写许多支持例程(大量验证检查、文本处理、动画和效果),那么将代码放在单独的文件中是有意义的。这允许代码重用并从您的 HTML 页面中删除大量垃圾。

    另一方面,无需将 10 行代码或单个函数(想到刷新 JS)放在单独的文件中。它的加载速度也会稍快一些,因为浏览器不需要发出额外的 HTTP 请求来下载单独的 JS 文件。

    【讨论】:

    • 如果在许多页面上都需要它,那么每次重新下载时,该好处很快就会被抵消。而如果是一个文件,则可以缓存。
    【解决方案7】:

    我有时会在部分重新加载的页面(例如,将某些事件绑定到新添加的表单字段)和/或使用一些我不会在任何其他页面上使用的独特 javascript 的页面中放置 javascript 内联。

    【讨论】:

      【解决方案8】:

      拥有许多外部脚本最终会降低页面速度,因为浏览器必须分别调用每个文件。将 JavaScript 合并到一个文件或页面本身有时可以缓解这个问题。

      另一方面,我相信浏览器可能会在第一次调用脚本文件时缓存它,所以如果您的网站上有很多相同的代码,那么外部就是要走的路。

      【讨论】:

      • 我喜欢你关于将所有内容都加载到一个页面中的想法。你可以结合已经提到的几个想法来做到这一点。例如,在几个不同的 .js 文件中创建所有 JavaScript 文件,然后使用 PHP 的 include_once 将它们全部加载到一个页面中。因此,您可以编辑多个 .js 文件,但也可以让浏览器读取一页。
      【解决方案9】:

      我在一个叫做 Flex 的东西上做了很多工作,它结合了 XML 和 ActionScript 来创建最终的字节码。 始终最好将两者尽可能分开。这样,您可以非常清晰轻松地将视图(在我的例子中是 HTML 或 MXML)与控制器(脚本)分开

      这也意味着您不必为一行代码查看五个文件——所有代码都在一个地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-04
        • 2010-10-18
        • 2010-09-16
        • 1970-01-01
        • 2021-07-11
        • 2018-02-11
        • 1970-01-01
        相关资源
        最近更新 更多