Javascript 处理不同页面之间代码重复的正确方法

Javascript 处理不同页面之间代码重复的正确方法,javascript,html,web,Javascript,Html,Web,假设我有两个页面,每个页面都有自己的js文件,其中一个页面需要另一个页面js文件中的一些函数(可能只有一个) 我不想复制相同的函数。我可以将两个js文件都包含到该页面中,但这是正确的方法吗?还有其他方法吗?如果您正在使用javascript ES6,您可以模块化您的函数并使用导入/导出关键字 见文件>> 如果您使用的是较旧的javascript版本,那么您的工作方式是正确的。如果您使用的是javascript ES6,那么您可以模块化您的函数并使用导入/导出关键字 见文件>> 如果您使用的是较旧

假设我有两个页面,每个页面都有自己的js文件,其中一个页面需要另一个页面js文件中的一些函数(可能只有一个)


我不想复制相同的函数。我可以将两个js文件都包含到该页面中,但这是正确的方法吗?还有其他方法吗?

如果您正在使用javascript ES6,您可以模块化您的函数并使用导入/导出关键字

见文件>>


如果您使用的是较旧的javascript版本,那么您的工作方式是正确的。

如果您使用的是javascript ES6,那么您可以模块化您的函数并使用导入/导出关键字

见文件>>


如果您使用的是较旧的javascript版本,那么您使用的方法是正确的。

这里有两种主要的部署方法(我不是说源文件;保持这些小文件,并在构建阶段合并):

  • 在所有页面上使用一个JavaScript文件,该文件具有长缓存头,并且名称在更改时会更改

    是的,这意味着该文件中有一些函数不会被给定页面使用,但也意味着当用户在站点上从一个页面移动到另一个页面时,他们不必下载该页面上的JavaScript。此外,当他们回到站点时,由于缓存头很长,他们可能不必再次下载JavaScript(除非他们的缓存已经循环,这很可能是令人遗憾的)

  • 创建一个“通用”JavaScript文件,其中包含页面上使用的通用函数,然后为每个需要自己特殊函数的页面创建特定于页面的文件。再次使用长缓存头和名称,这些头和名称在您更改文件时会更改,这可能有利于缓存

    这意味着访问一个页面将需要加载两个JavaScript文件,而不是一个,但这不是什么大问题,通过使用长缓存头,当这些文件在您的站点中导航时(可能是当它们返回时,但缓存循环很快),您至少可以避免其中一个文件(公共文件)


  • 这里有两种主要的部署方法(我不是说源文件;保持这些小文件,并在构建阶段结合使用):

  • 在所有页面上使用一个JavaScript文件,该文件具有长缓存头,并且名称在更改时会更改

    是的,这意味着该文件中有一些函数不会被给定页面使用,但也意味着当用户在站点上从一个页面移动到另一个页面时,他们不必下载该页面上的JavaScript。此外,当他们回到站点时,由于缓存头很长,他们可能不必再次下载JavaScript(除非他们的缓存已经循环,这很可能是令人遗憾的)

  • 创建一个“通用”JavaScript文件,其中包含页面上使用的通用函数,然后为每个需要自己特殊函数的页面创建特定于页面的文件。再次使用长缓存头和名称,这些头和名称在您更改文件时会更改,这可能有利于缓存

    这意味着访问一个页面将需要加载两个JavaScript文件,而不是一个,但这不是什么大问题,通过使用长缓存头,当这些文件在您的站点中导航时(可能是当它们返回时,但缓存循环很快),您至少可以避免其中一个文件(公共文件)


  • 使每个函数都成为一个模块。例如:模块函数1、模块函数2是,仅包括这两个文件。如果用户以前访问过另一个页面,那么它可能在缓存中。一个页面可能会加载多个js文件。将共享方法加载到单独的文件中,并将其加载到两个页面中。使每个函数都成为一个模块。例如:模块函数1、模块函数2是,仅包括这两个文件。如果用户以前访问过另一个页面,那么它可能在缓存中。一个页面可能会加载多个js文件。将共享方法加载到单独的文件中,并将其加载到两个页面中。最新的chrome版本适用于ES6。您可以使用导入/export@kuhaku:我不这么认为,不。如果是的话,那是全新的,可能是Chrome独有的。最新的Chrome和Firefox支持除我上次检查的模块之外的所有ES2015(也称为“ES6”)。但是有各种各样的工具可以实现这一点——CommonJS、RequireJS、Webpack、Browserify…@kuhaku:刚刚检查了最新版本:不,Chrome本机还不支持ES2015模块。从,我的Chrome支持几乎100%的功能,从,他们说Firefox和Chrome可以很好地支持导入/导出。最新的Chrome版本在ES6上运行良好,您可以使用导入/export@kuhaku:我不这么认为,不。如果是的话,那是全新的,可能是Chrome独有的。最新的Chrome和Firefox支持除我上次检查的模块之外的所有ES2015(也称为“ES6”)。但是有各种各样的工具可以实现这一点——CommonJS、RequireJS、Webpack、Browserify…@kuhaku:刚刚检查了最新的:不,Chrome还不支持ES2015模块。从,我的Chrome支持几乎100%的功能,从,他们说Firefox和Chrome可以很好地支持导入/导出。你说什么“名称在更改时会更改”?另外,除了“长缓存头”对js文件而言,您是指类似的内容吗?@kuhaku:Names:听起来差不多。使用构建过程,根据MD5哈希或类似内容为文件创建新文件名(并确保您的HTML使用新名称).Cache headers:这方面有很多文章,我不想在这里复制它们,但是你为.js文件设置了缓存,这样浏览器就可以保留它(比如)一年,而不用重新检查你的服务器。因为你不使用HTML来做这件事(所以会提供最新的内容),当他们得到更新的HTML时,它会使用一个新的文件名,他们会得到最新的JS。你说的“名称更改时会更改”是什么意思?还有,你的意思是这样的吗