在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?

在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么?,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有一个asp.nset-mvc站点,我有一个存在于许多不同视图中的局部视图 还有一个.js文件与该局部视图使用的功能关联 现在,我将js文件包含在每个父视图中,其中包含头部部分中的这个部分视图 我现在想,通过从每个父视图中删除对javascript文件的引用,并将该引用放在部分视图的主体中,维护起来就更容易了。(所以它只是列在一个地方) 有人看到这一变化有什么负面影响吗?这是只被特定的局部视图利用的javascript的推荐做法吗?我认为一个好的解决方案是创建扩展方法,在局部视图中添加java

我有一个asp.nset-mvc站点,我有一个存在于许多不同视图中的局部视图

还有一个.js文件与该局部视图使用的功能关联

现在,我将js文件包含在每个父视图中,其中包含头部部分中的这个部分视图

我现在想,通过从每个父视图中删除对javascript文件的引用,并将该引用放在部分视图的主体中,维护起来就更容易了。(所以它只是列在一个地方)


有人看到这一变化有什么负面影响吗?这是只被特定的局部视图利用的javascript的推荐做法吗?

我认为一个好的解决方案是创建扩展方法,在局部视图中添加javascript


一个很好的例子:

在我看来,你最好还是把它和其他脚本放在一起

您应该捆绑、缩小和“永久缓存”脚本。如果你这样做,那么即使是你网站的新用户也只有一个小文件可以下载。通过将其分解为多个文件,您只会造成伤害。对他们来说,最好是一次下载所有他们需要的东西

如果你的网站有很多不同的部分,你不会期望用户交叉,那么我会考虑单独的捆绑。例如,可能是未经验证的部分和“仅限成员”部分。即使这样,也不会有太大的区别,因此以一种对站点的整体架构有意义的方式将它们捆绑在一起可能更有意义(例如,可能只有成员的部分是不同的mvc区域)

但是,仅仅因为不是每个页面都会使用它,就单独拉出部分需要的脚本将适得其反


编辑:我想重读后我理解得更好了。我说的话仍然有效,但重点是捆绑销售。不要只在每个需要的页面上包含所有脚本的单个脚本引用。最好将站点需要的所有脚本基本捆绑起来,并将它们包含在每个页面上。使用缓存,用户只需下载一次,然后在浏览您的站点时,不会再发出脚本请求,而不是在每个页面的结尾都有另一个需要下载的独特脚本。

我想问自己几个问题:

  • js文件有多大?它缩小了多大
  • 它在应用程序中的平均使用次数是多少
  • 如果它是一个没有被大量使用的大文件,我会将脚本包含在文件中,而不做任何处理。

    您需要记住,js文件是缓存的,如果普通用户将进入部分视图,他将需要下载脚本。

    关于脚本\样式处理的良好实践:

    使用组合的js文件并在生产中缩小它们。
    这可以通过使用资产管理器或使用捆绑包“分组”js文件来实现



    您还可以使用“require.js”加载依赖项脚本。
    我没有使用过它,但据我所知,您可以设置依赖于其他模块和js文件的模块和js函数



    您的问题的答案可以从这个问题的答案中得出:

      你认为这个部分视图是整个Web应用程序的一部分,还是仅仅是一个单独的组件?
    通常,它是web应用程序的一部分,因为您只在这个web应用程序中使用它。因此,从这个角度来看,没有必要将视图与其javascript捆绑在一起,因为javascript和视图都是web应用程序整体的一部分

    • 我们什么时候打包东西
    当它们相互关联,而与整体之外的任何事物无关时。我怀疑这个视图的javascript不依赖于它之外的任何东西。甚至连jQuery都没有?甚至没有任何类型的框架,例如knockout或bob.js? 如果是,那么为什么不将视图与其中的那些框架捆绑在一起呢

    是的,答案是-依赖性。一个是实现,另一个是依赖。但是,当在一个web应用程序中处理部分视图时,实现和依赖项之间的边界变得模糊。原因是,部分视图是web应用程序的一部分。它只是一个框架处理事情的方式,让您以可重用的方式分离部分视图。但局部视图仍然是整个web应用程序的一部分,因此也是其实现脚本的一部分

    如果您遵循了所有这些想法,那么您会同意,在这种特殊情况下,您是想将代码与部分视图捆绑在一起,还是想将其与web应用程序的其余脚本捆绑在一起并不重要这完全是一回事


    因此,决策必须由其他指标决定,如脚本加载性能等。这超出了问题的范围,但提供的描述应该足以作为答案。

    通过将引用放在局部视图主体中来加载javascript是正确的策略。您可以避免所有其他页面上的解析和解释开销。即使您的javascript文件被缓存,在包含它的每个页面上执行它仍然需要时间(无论多么微小)。如果您有复杂的逻辑,或者在DOM上迭代,或者您有许多这样的文件,该怎么办

    实际上,这是走向成熟依赖关系管理的第一步。如果您知道在哪个页面上使用了什么功能,那么将来任何重新分解或维护工作的成本都会降低

    问题是如何从部分视图中引用javascript资源。您不想只转储一个
    @{
      Bundles.Reference("scripts/your-dependency.js");
      Bundles.Reference("scripts/another-dependency.js");
    }
    
    <body>
      ...
    </body>
      @Bundles.RenderScripts()
    </html>