标签: prefetch

缓存或预取Django的反向关系

考虑一个带有Publishers表和Books表的shema

def Publisher(models.Model):
  city = models.CharField()
  ...

def Book(models.Model):
  title = models.CharField()
  publisher = models.ForeignKey(Publisher)
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我希望显示某些发布商及其所有图书的列表.在我的视图功能中,我使用类似的东西来获取所需的发布者

publishers=Publisher.objects.filter(city='NY')
Run Code Online (Sandbox Code Playgroud)

然后在我看来,我迭代发布者和publishers.book_set.all之类的

{% for p in publishers %}
....
   {% for b in p.book_set.all %}
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但它显然会像数十亿次一样击中数据库.

我如何优化代码,以便django只能击中db一次或两次?

python django prefetch

2
推荐指数
1
解决办法
1168
查看次数

Django存储prefetch_相关结果

我知道我可以指定像这样存储 prefetch_lated 的结果。

 my_objs = MyClass.objects.prefetch_related(
     Prefetch('relation', to_attr='relation_as_list')
 )

 for my_obj in my_objs:
     l = my_obj.relation_as_list
Run Code Online (Sandbox Code Playgroud)

是不是和下面的一样呢?文档说 prefetch_lated 存储导致查询集,但我不明白我在哪里获得性能提升?

 my_objs = MyClass.objects.prefetch_related('relation')

 for my_obj in my_objs:
     l = list(my_obj.relation.all())  # looks like DB hit but it isnt?
Run Code Online (Sandbox Code Playgroud)

django prefetch

2
推荐指数
1
解决办法
4716
查看次数

如何与预取相关和预取聚合

我有两个模型诊所和诊所信用:我想要一个诊所列表和可用余额的总和问题是如果我使用注释,我必须循环使用诊所信用查询集:

class Clinic(models.Model):
    """
    clinic model
    """
    user = models.OneToOneField(User, related_name="clinic", primary_key=True, 
     on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'clinic'




 class ClinicCredits(models.Model):
 """
  credit details for clinic
 """
    clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE, related_name='c_credits')
    credits = models.FloatField('credits', default=0.0)
    balance = models.FloatField('balance', default=0.0, help_text="balance after deduction of credits")

    def __str__(self):
        return self.clinic.name

    class Meta:
       db_table = 'clinic_credits'
Run Code Online (Sandbox Code Playgroud)

这是我获取诊所的查询:

    clinics = Clinic.objects.filter(practice_id__in=user.dietitian.practiceid).order_by(
        'user__date_joined').prefetch_related(Prefetch('c_credits',ClinicCredits.objects.filter(balance__gt=0),'credit_'))
Run Code Online (Sandbox Code Playgroud)

以及我如何在这种情况下使用聚合,或者是否有其他方法可以使用可用积分来检索诊所列表。

django foreign-keys prefetch django-annotate

2
推荐指数
1
解决办法
127
查看次数

Lazy Route 被预取,忽略 webpack 魔法注释 (Vue)

我需要开发一个具有登录视图的服务器端身份验证的应用程序。如果我想使用Vue Router在登录和索引(受保护的视图)之间动态切换,我需要避免在成功身份验证之前登录视图下载(预取)索引,因为如果没有,服务器将用登录页面回答索引预取要求。

我试图在具有两条路由的原始 Vue Router 示例中实现此目的。家及周围。第一个被包含,第二个被延迟加载(但预取),这将是实际应用程序中的受保护页面。

为了避免预取,我已经尝试了我找到的所有 webpack 魔术注释,但预取仍然发生。

这是代码:

import Vue from "vue"
import VueRouter from "vue-router"
import Home from "../views/Home.vue"

Vue.use(VueRouter);

const routes = [
  {
    path: "/",
    name: "Home",
    component: Home
  },
  {
    path: "/about",
    name: "About",
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about"*/ /* webpackMode: "lazy" */ /* webpackPrefetch: false */ /* webpackPreload: false …
Run Code Online (Sandbox Code Playgroud)

prefetch webpack vue.js vue-router

2
推荐指数
1
解决办法
2419
查看次数

sveltekit 基于哈希的路由

我对 svelte 尤其是 SvelteKit 还很陌生。目前,我正在做 2 个项目。

第一个是 SPA,其中我使用svelte-spa-router来管理不同的状态,并提供像在老式网站中那样来回导航的功能。这非常有效:)

第二个项目是 SvelteKit 应用程序。我有 3 个用例:

  1. 搜索产品
  2. 创建产品
  3. 显示排名前 10 的产品

首先,我认为如果每个用例需要的话能够预取某种 JSON 数据会很有趣,但另一方面,我不想为每个子用例创建一个路由页面因为我不希望用户每次执行简单操作时都刷新页面。因此,我使用 3 条路线在这 3 个“用例”之间导航:

src/routes/search_product/+page.svelte
src/routes/create_product_page/+page.svelte
src/routes/show_top_10_products/+page.svelte
Run Code Online (Sandbox Code Playgroud)

现在,我遇到了一个问题...创建产品页面需要 3 个步骤。这 3 个步骤由以下 3 个不同的 Svelte 组件表示:

  1. EnterProductBasicInfo.svelte
  2. UploadPictures.svelte
  3. GivePrices.svelte

如果用户正在创建产品页面并处于步骤 2),则会向他显示该UploadPictures.svelte组件....但是如果他按后退按钮,他将退出该create_product_page路线,而不是返回到步骤 1)是EnterProductBasicInfo.svelte组件。

所以,我想我可以使用我svelte-spa-router在 SPA 中使用过的,但我在这里询问专家 SvelteKit 中是否有另一个内置解决方案能够管理路线,而无需每次刷新整个页面路线改变。如果您有一些关于 SPA、SSR、预加载与预取的好链接,我会接受它,因为它对我来说仍然有点模糊。

非常感谢你的帮助。

routes prefetch preload svelte sveltekit

2
推荐指数
1
解决办法
3740
查看次数

现代CPU缓存是否经过优化以应对不断的跨越?穿越线程?

假设我有一个大数组,并且有多个线程从数组中读取.每个线程通过跳过一个恒定量迭代数组,但从不同的偏移量开始.因此,线程1可以从元素0开始,然后读取元素32,64,96等.但是线程2从元素1开始,并且读取元素33,65,97等(记住'元素'可以构成不止一个字节或单词)我知道通常空间局部性对于获得最佳缓存性能是可取的,但我还读到现代CPU具有寻找访问模式的硬件预取器,并且对我的一个步幅似乎是一个明显的模式.

  • 这个缓存在现代包装盒上是否友好,或者不是吗?
  • 如果我将步幅增加到大于缓存行的大小,该怎么办?
  • 答案是否受到多线程的影响(所以尽管访问相同的内存,它们可能运行在具有不同缓存的不同内核上)?

architecture performance multithreading caching prefetch

1
推荐指数
1
解决办法
843
查看次数

如何像这样使用useState?这是什么意思?

谁能解释一下const rerender = React.useState(0)[1]这是什么?

import React from 'react'
import axios from 'axios'
import {
  useQuery,
  useQueryClient,
  QueryClient,
  QueryClientProvider,
} from "@tanstack/react-query"
import { ReactQueryDevtools } from "@tanstack/react-query-devtools"

const getCharacters = async () => {
  await new Promise((r) => setTimeout(r, 500))
  const { data } = await axios.get('https://rickandmortyapi.com/api/character/')
  return data
}

const getCharacter = async (selectedChar) => {
  await new Promise((r) => setTimeout(r, 500))
  const { data } = await axios.get(
    `https://rickandmortyapi.com/api/character/${selectedChar}`,
  )
  return data
}

const queryClient = …
Run Code Online (Sandbox Code Playgroud)

prefetch rerender reactjs react-hooks

1
推荐指数
1
解决办法
368
查看次数

预取指令行为

为了满足某些安全属性,我想确保一个重要数据在语句访问时已经在缓存中(因此不会有缓存未命中).例如,对于此代码

...
a += 2;
...
Run Code Online (Sandbox Code Playgroud)

我想确保aa += 2执行之前就在缓存中.

我正在考虑使用PREFETCHhx86 的指令来实现这个目的:

...
__prefetch(&a);     /* pseudocode */
a += 2;
...
Run Code Online (Sandbox Code Playgroud)

但是,我已经读过,之前插入预取指令a += 2可能为时已晚,无法确保aa += 2执行时是否在缓存中.这个说法是真的吗?如果是,我可以通过CPUID在预取之后插入指令来修复它,以确保执行了prefectch指令(因为英特尔手册中说明了相关PREFETCHh的命令CPUID)?

x86 assembly caching prefetch

0
推荐指数
1
解决办法
708
查看次数