比如说,我有一个产品实例。产品实例链接到第 4 级子类别。如果我只想获取根类别和第 4 级子类别,下面的查询足以以最少的数据库查询获取数据:
Product.objects.filter(active=True).prefetch_related('category__root',
'category')
Run Code Online (Sandbox Code Playgroud)
如果我必须联系该产品类别的父级并get_ancestors()为此使用方法,则会发生近三倍的模式数据库查询。
如果我使用get_ancestors()方法编写如下查询,则数据库查询保持低位。
Product.objects.filter(active=True).prefetch_related(
'category__root',
'category',
'category__parent',
'category__parent__parent',
'category__parent__parent__parent',
'category__parent__parent__parent__parent')
Run Code Online (Sandbox Code Playgroud)
但是当深度级别未知时,此查询无效。有没有办法在上面的查询中动态预取父母?
好的,所以它不是一个巨大的担忧,因为它只有少数浏览器支持:
然而,预取让我抽搐.如果用户登陆您的页面并退回到另一个站点,您是否支付了他们访问预取链接的带宽?
是否存在开发人员预取页面上的每个链接的风险,这反过来会使网站对用户的体验变慢?
看起来它可以改变分析.人们会通过预取强制页面浏览到用户吗?
安全性,您不会知道正在预取的页面.它可以预取恶意文件吗?
对于使用有限的移动用户来说,所有这些预取是否会让人痛苦?
我的理解是硬件预取永远不会跨越页面边界.我想知道软件预取是否有相同的限制,即我可以使用软件预取来避免未来的TLB未命中.从搜索周围来看,它似乎是可能的,但我在文档中找不到任何确定的内容,因此引用会很好.
我对Nehalem,Sandy Bridge和Westmere特别感兴趣.
我在Google App Engine项目中使用了typeahead.js,并且在使用预取时遇到了问题.
当我使用local时,typeahead工作正常但是如果我将相同的数据集复制到json文件并使用prefetch,则typeahead不起作用,即不显示任何建议.
这是我使用local的代码版本:
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Demo</title>
</head>
<body>
<div><input type="text" name="typeahead-example" placeholder="Type here" class="typeahead-example"></div>
<script src="./js/jquery-1.10.2.js" type="text/javascript"></script>
<script src="./js/hogan.js" type="text/javascript"></script>
<script src="./js/typeahead.min.js" type="text/javascript"></script>
<script>
$(document).ready(function(){
$('input.typeahead-example').typeahead({
name: 'example',
local: [{value: 'Abc Def', tokens: ['Abc', 'Def'], name: 'random1', val2: 'A', val3: 'B'},
{value: 'Def Ghi', tokens: ['Def', 'Ghi'], name: 'random2', val2: 'C', val3: 'D'},
{value: 'Ghi Jkl', tokens: ['Ghi', 'Jkl'], name: 'random3', val2: 'E', val3: 'F'},
{value: 'Jkl Mno', tokens: ['Jkl', 'Mno'], name: 'random4', …Run Code Online (Sandbox Code Playgroud) 根据此链接预取,预取仅适用于特定浏览器.不幸的是,我需要它主要在移动设备上工作.
任何人都有一个解决方案如何预加载,预取,缓存页面,以便它适用于iOS?(苹果浏览器)
我在prefetch_related具有 5 m2m 字段的模型上遇到了一些严重的性能问题,并且我正在预取一些嵌套的 m2m 字段。
class TaskModelManager(models.Manager):
def get_queryset(self):
return super(TaskModelManager, self).get_queryset().exclude(internalStatus=2).prefetch_related("parent", "takes", "takes__flags", "assignedUser", "assignedUser__flags", "asset", "asset__flags", "status", "approvalWorkflow", "viewers", "requires", "linkedTasks", "activities")
class Task(models.Model):
uuid = models.UUIDField(primary_key=True, default=genOptimUUID, editable=False)
internalStatus = models.IntegerField(default=0)
parent = models.ForeignKey("self", blank=True, null=True, related_name="childs")
name = models.CharField(max_length=45)
taskType = models.ForeignKey("TaskType", null=True)
priority = models.IntegerField()
startDate = models.DateTimeField()
endDate = models.DateTimeField()
status = models.ForeignKey("ProgressionStatus")
assignedUser = models.ForeignKey("Asset", related_name="tasksAssigned")
asset = models.ForeignKey("Asset", related_name="tasksSubject")
viewers = models.ManyToManyField("Asset", blank=True, related_name="followedTasks")
step = models.ForeignKey("Step", blank=True, null=True, …Run Code Online (Sandbox Code Playgroud) 我想将模型属性预取到 Django 中的查询集。有没有办法做到这一点?
以下是三个模型:
class Place(models.Model):
name = models.CharField(max_length=200, blank=True)
@property
def bestpicurl(self):
try:
return self.placebestpic.picture.file.url
except:
return None
class PlaceBestPic(models.Model):
place = models.OneToOneField(Place)
picture = models.ForeignKey(Picture, on_delete=models.CASCADE)
class Picture(models.Model):
file = ImageField(max_length=500, upload_to="/images/")
Run Code Online (Sandbox Code Playgroud)
我需要类似的东西:
qs = Place.objects.all().select_related('bestpicurl')
Run Code Online (Sandbox Code Playgroud)
任何线索如何做到这一点?谢谢!
这是一个场景,一个包含多个投标的项目模型。
Class Project(models.Model):
user = models.ForeignKey()
Class Bid(models.Model):
project = models.ForeignKey(Project, related_name='bids')
Run Code Online (Sandbox Code Playgroud)
当我们查询项目时,我们想要预取项目的投标。
Project.objects.filter(whatever condition).prefetch_related(
Prefetch('bids', queryset=Bid.objects.all())
)
Run Code Online (Sandbox Code Playgroud)
这里我们只想获取属于过滤项目的投标,而不是所有投标,我们如何指定呢?我期待类似的事情
queryset=Bid.objects.filter(project=project?)...
Run Code Online (Sandbox Code Playgroud)
谢谢。
请帮忙!
[+] 我有什么: 每个桶里都有很多斑点。Blob 的大小各不相同,从小于千字节到大量千兆字节。
[+] 我想做的事情: 我需要能够在这些 blob 中传输数据(比如大小为 1024 的缓冲区或类似的东西),或者在 Python 中按一定大小的块读取它们。关键是我不认为我可以只执行bucket.get_blob(),因为如果blob是TeraByte那么我将无法将它保存在物理内存中。
[+] 我真正想做的事情: 解析 blob 内的信息以识别关键字
[+] 我读过的内容: 很多关于如何分块写入谷歌云,然后使用 compose 将其拼接在一起的文档(一点帮助都没有)
很多关于java的预取函数的文档(需要是python)
谷歌云API
如果有人能指出我正确的方向,我将非常感激!谢谢
如何在动态路由导入中禁用rel="prefetch"?
我正在使用 @vue/cli 4.3.1 和 Webpack 4.43.0,尝试禁用预取:
在route.js中
const Registration = () => import( /* webpackPrefetch: false */
/* webpackChunkName: "registration" */ '../modules/Popup/Registration.vue')
Run Code Online (Sandbox Code Playgroud)
尝试在 vue.config.js 中配置,但没有帮助
chainWebpack: config => {
config.plugins.delete('prefetch')
config.plugins.delete('prefetch-index') // or
config.plugins.delete('preload')
}
Run Code Online (Sandbox Code Playgroud)
但无论如何都有
<link rel="prefetch" ....>
Run Code Online (Sandbox Code Playgroud)