当前位置: 首页 > 知识库问答 >
问题:

使用Nuxt预取数据以提高加载时间

公孙国兴
2023-03-14

据我所知,人们正在使用服务器端渲染(ssr)来提高用户体验,并通过快速和内容就绪的页面进行SEO。

最近我已经开始与vue nuxt项目在ssr模式。我注意到的是,当我试图在nuxtServerInit操作中预取数据时,我必须等待异步调用完成,然后页面才能提供给我。据我所知,这只会伤害搜索引擎优化和用户体验。

export const actions = {
  async nuxtServerInit ({ commit }) {
    const response = await this.$axios.$get('games')
    commit('setGameList', response.data)
  }
}

是否有一种方法可以将数据预取一次并缓存一段时间,这样用户就不会被迫等待?

还有什么是nuxtServerInit的好用例?不能理解它的目的...

共有1个答案

郝昊东
2023-03-14

使用fetch方法

<template>
  <h1>Stars: {{ $store.state.stars }}</h1>
</template>

<script>
export default {
  async fetch ({ store, params }) {
    let { data } = await axios.get('http://my-api/stars')
    store.commit('setStars', data)
  }
}
</script>

记住要使用Vuex才能正常工作!

更新:如何共享fetch函数

1-创建具有以下功能的文件:

// defaultFetch.js
module.exports = async function defaultFetch({ store, params }){
  // Put some developer magic here to make the code works for you
  let { data } = await axios.get('http://my-api/stars');
  store.commit('setStars', data);
}

2-导入和在其他组件中使用

// amazingComoponent1.vue
<template>
  <h1>Stars: {{ $store.state.stars }}</h1>
</template>

<script>
import defaultFetch from "../utils/defaultFetch";
export default {
  fetch: defaultFetch
}
</script>



// amazingComoponent2.vue
<template>
  <h1>Stars: {{ $store.state.stars }}</h1>
</template>

<script>
import fetch from "../utils/defaultFetch";
export default {
  fetch,
}
</script>

更新2:如何使用和配置axios intance

很简单,更新defaultFetch.js:

// defaultFetch.js

const instance = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

module.exports = async function defaultFetch({ store, params }){
  // Put some developer magic here to make the code works for you
  let { data } = await instance.get('http://my-api/stars');
  store.commit('setStars', data);
}

希望有帮助:)

 类似资料:
  • 问题内容: 我正在使用JSON文件自动填充下拉列表。它绝非庞大(3000行且正在增长),但是刷新页面所花费的时间变得非常明显。 首次加载页面时,将读取JSON,具体取决于用户选择了哪个选项,从而决定了使用JSON的哪一部分来填充下拉列表。 然后将其加载到每次刷新或菜单选择之后。是否可能以某种方式缓存值以防止需要一次又一次地重新加载它? 谢谢。 编辑:更多信息:它本质上是一个单位转换器。JSON包含

  • 目前为止,我们只是使用了存放在内存中的数据集,但深度学习系统经常需要在大数据集上训练,而内存放不下大数据集。其它的深度学习库通过对大数据集做预处理,绕过了内存限制,但 TensorFlow 通过 Data API,使一切都容易了:只需要创建一个数据集对象,告诉它去哪里拿数据,以及如何做转换就行。TensorFlow 负责所有的实现细节,比如多线程、队列、批次和预提取。另外,Data API 和tf

  • 问题内容: 加载Angular应用后,我需要一些模板可以脱机使用。 这样的事情将是理想的: 问题答案: 有一个 模板缓存服务 :$ templateCache ,可用于在javascript模块中预加载模板。 例如,取自文档: 甚至还有一个艰巨的任务,可以从html文件中预先生成一个javascript模块:grunt-angular- templates 另一种可能不太灵活的方法是使用 内联模板

  • 我试图使用find_elements_by_class_name提取页面上的每个class_name='position-header',但当我这样做时,我收到错误: 属性错误:“列表”对象没有属性“文本” 屏幕截图显示,当使用find_element_by_class_name方法时,它返回数据,但当使用find_elements_by_class_name我遇到错误。

  • 我们有一个物联网应用程序,可以接收Kafka上的数据,并将其保存在rdbms中。我们使用的数据库(MemSql)每秒支持20000多个插入。但我的常规存储库。保存方法我每秒只能实现50次插入。我编写了一个简单的代码,正在高速网络aws ec2实例上进行测试 这需要20秒才能完成。我希望达到每秒约1000k的插入。如何提高这种摄取速度?我应该创建一个大小为1000的线程池并从单独的线程调用save吗

  • 问题内容: 在我的应用程序中,有一点我需要对大块连续的内存数据块(100 MB的内存)执行计算。我当时的想法是继续预取程序将来会接触的部分块,以便在我对该部分执行计算时,数据已经在缓存中。 有人可以给我一个简单的示例,说明如何使用gcc实现这一目标吗?我在某处阅读,但不知道如何正确使用它。还要注意,我有一个多核系统,但是每个核都将并行处理不同的内存区域。 问题答案: 使用内置函数作为低级指令的接口

  • 我正在使用Glide在我的中加载GIF。 图像来自服务器,具有高分辨率和大量帧。 我注意到,一旦加载和播放GIF,内存使用率很高,可能导致内存不足。 我尝试了以下Glide方法(),但内存使用率没有改变。 Glide中还有其他可以使用的方法吗?

  • 我们创建了一个程序,以便在其他程序中更容易地使用数据库。因此,我显示的代码将在多个其他程序中使用。 其中一个程序从我们的一个客户那里获得大约10000条记录,并且必须检查这些记录是否已经存在于我们的数据库中。如果没有,我们将它们插入数据库(它们也可以更改,然后必须更新)。 为了方便起见,我们从整个表中加载所有条目(目前为120,000个),为我们得到的每个条目创建一个类,并将它们全部放入Hashm