【问题标题】:Using AJAX only for whole website,optimal or not仅对整个网站使用 AJAX,优化与否
【发布时间】:2019-03-19 15:07:07
【问题描述】:

我有一个模板结构,其中有一个 HTML 文件,其中加载了相关的 HTML 和 JS 文件(使用 AJAX)。

部分根据用户的活动加载(页面从不重新加载哪种有利于用户体验)。 即

用户点击一个菜单说“个人资料”,这会导致:

  1. jQuery.load 方法用于加载文件“/some/path/profile.html”。

  2. jQuery.getScript.load()回调中使用,包括像“some/path/profile.js”这样的js文件,profile js有个人资料页面的事件处理程序以及相关的业务逻辑。

这发生在应用程序的每个菜单项/部分,例如“配置文件”、“文件”、“仪表板”等。

它工作得很快,但我不确定这是否是执行此操作的最佳方式。

  • 如果用户随后两次单击“个人资料”按钮,浏览器会 先清理之前加载的资源(profile.html,profile.js) 重新加载它?

  • 当用户在访问“个人资料”后访问新部分时说“仪表板”,会 浏览器在加载之前再次清除 Profile 的资源 仪表板?

如果不是这样的话,这是否会导致浏览器出现一些与内存相关的问题?我对此进行了搜索,但没有看到任何相关情况。

P.S:在这种结构中,通常一些 HTML 部分存储在 JS 变量中以供进一步使用。我在 SO 的某处读到这样做是一种不好的做法,但我无法找到有关它的详细信息。如果开发人员精通并且将 HTML 存储在 JS 变量中,我认为这不应该是一个问题。

【问题讨论】:

  • 这可能看起来很明显,但如果不缓存,您不会获得缓存的好处,如果这些事情发生了很大变化,但如果它们随着时间的推移保持不变,那么就不会那么大了。另一种方法是在文件更改以模拟文件版本时更改参数,但不要在每次加载项目时使用新的时间戳。
  • 请注意,“业务逻辑”都应该在后端服务中进行验证,而“行为逻辑”是网站的外观和感觉,除了改善体验之外不需要验证,例如(检查在提交 X) 之前,还要检查后端以确保例如有效值。
  • @MarkSchultheiss 我认为不重新加载页面会更好地利用浏览器缓存。我添加了一张图片以进行进一步描述,中心内容通过 AJAX 更新,其中主要有表格、表单等,但没有许多图像或任何东西。中心部分 HTML 在更新之前存储在一个 JS 变量中,一旦我读到这不是一个好方法,但不知道为什么。

标签: javascript jquery html ajax content-script


【解决方案1】:

这是我对此的理解:

  • 您必须确保在最后单击相同按钮时不发送请求。
  • (忘了我们是在处理脚本/HTMl)图片中没有缓存
  • 清除资源?是的,如果出现在同一部分,它将从 DOM 中删除。但我想如果每个部分内容使用相同的占位符,这是必要的。
  • 如果您知道每次每个部分都会再次返回相同的模板,您可以在客户端创建一个本地缓存,就像 memoization 一样查看模板是否已经存在。

希望这会有所帮助。

【讨论】:

  • 所有正在加载的动态脚本/HTML都有一个附加的时间戳,因此它们不会被缓存。
  • 某些部分使用 EXCEL 解析器等实用程序库,这些库也以这种方式动态加载。当用户导航到另一个部分时,它们也会被删除吗?此应用中不会发生页面重新加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多