在哪里放置JavaScript配置功能?

时间:2009-10-06 19:53:34

标签: javascript jquery

关于在文件中包含javascript代码而不是将其包含在脚本标记中的一般开发人员意见是什么。

所以我们都同意jquery需要包含在脚本文件中,如下所示:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"
         type="text/javascript"></script>

我的问题是,为了在不在网站的所有页面上的页面上获取功能。我们是否在同一页面或上面称为mysite.js的全局包含文件中包含如下所示的函数。

$(document).ready(function(){
$(".clickme").click(function(event){
  alert("Thanks for visiting!");
 });
});

确定。所以问题是:如果上面的代码将在每个类中被调用=特定页面上的“clickme”,并且您可以从名为mysite.js的包含单独文件或在内容中调用它。页。你会走哪条路?


参数是:

  • 如果您将其包含在页面上,则只会从那些需要js功能的特定页面中调用它。

  • 或者你将它包含在浏览器缓存的文件中,但是jquery必须花费x ms来知道该函数不是在没有“clickme”类的页面上触发的。


编辑1: 好。我想确保人们解决的一点是,如果将document.ready函数称为页面中不存在的东西,会触发浏览器上的任何类型的延迟吗?这是一个重大影响吗?

4 个答案:

答案 0 :(得分:3)

首先 - $("#clickme")会找到id =“clickme”而不是class =“clickme”。如果你正在寻找课程,你需要$(".clickme")

我(尝试)从不在我的XHTML文档中放置任何实际的JavaScript代码,除非我正在快速测试页面上的内容。我总是链接到外部JS文件来加载我想要的功能。没有JS的浏览器(如网页抓取工具)将不会加载这些文件,它使您的代码看起来更清晰“查看源代码”。

如果我只在一个页面上需要一些功能 - 它有时会获得自己的包含文件。这一切都取决于它使用了多少功能/慢选择器。仅仅因为你将JS放在外部JS文件中并不意味着你需要将它包含在每一页上。

我使用这种做法的主要原因 - 如果我需要更改一些JavaScript代码,它们将在同一个地方,并在网站范围内进行更改。

就性能问题而言 - 一些选择器需要花费很多时间,但大多数(特别是处理ID的那些)非常快。搜索不存在的选择器是浪费时间,但当你把它放在第二个脚本HTTP请求的浪费时间(阻止DOM准备好btw)时,搜索空选择器通常会赢作为两个邪恶中较小的一个。 jQuery 1.3 Performace NotesSlickSpeed有望帮助您确定您在搜索课程时失去了多少MS。

答案 1 :(得分:1)

我倾向于使用外部文件,因此如果需要进行更改,则会在所有页面的一个位置完成,而不是x页面上的x更改。

此外,如果您离开项目并且其他人必须接管,那么在项目周围寻找一些内联js可能会非常痛苦。

答案 2 :(得分:1)

我个人的偏好是

  • 完全全局函数,插件和实用程序 - 在单独的JavaScript文件中并在每个页面中引用(非常类似于jQuery文件)

  • 特定页面功能 - 在单独的JavaScript文件中,仅在页面中引用

请记住,您也可以缩小和压缩文件。

我坚信Unobtrusive JavaScript,因此尽量避免在标记中包含任何JavaScript代码,即使JavaScript在其自己的脚本块中也是如此。

答案 3 :(得分:0)

我同意在HTML页面中永远不会有代码。在ASP.net中,我以编程方式为每个页面添加了一个检查,以查看它是否具有相同的名称javascript文件。

EG。 MyPage.aspx 会查找 MyPage.aspx.js

对于我的MVC母版页,我有这段代码来添加一个javascript链接:

        // Add Each page's javascript file
        if (Page.ViewContext.View is WebFormView)
        {
            WebFormView view = Page.ViewContext.View as WebFormView;
            string shortUrl = view.ViewPath + ".js";
            if (File.Exists(Server.MapPath(shortUrl)))
            {
                _clientScriptIncludes["PageJavascript"] = Page.ResolveUrl(shortUrl);
            }
        }

这很有效,因为:

  • 它自动包含在我的文件中
  • .js文件位于页面本身旁边

很抱歉,如果这不适用于您的语言/编码风格。