我正在尝试预取页面以使用下面的代码(req.jQuery)来提高我们网站的感知性能.
只有0.5%的访问者使用拨号,我不包括查询字符串(旧时间),外部链接(http)和pdfs(我们的大文件采用此格式).在生产网站上,预取我没有考虑过的其他可能的负面情况是什么?
<script type="text/javascript">
$(document).ready(function() {
$("a").each(
function(){
$(this).bind ("mouseover", function() {
var href=$(this).attr('href');
if (
(href.indexOf('?') == -1)&&
(href.indexOf('http:') ==-1)&&
($(this).hasClass('nopreload') == false)&&
(href.indexOf('.pdf') == -1)
) {
$.ajax({ url:href, cache:true, dataType:"text" });
}
});
$(this).bind ("mousedown", function(btn) {
if (btn.which==1) {
var href=$(this).attr('href');
if ($(this).hasClass('nopreload') == false) {
window.location.href = href;
return false;
}
}
});
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
对于某些链接,当它悬停在它上面时会预加载页面并且mousedown将导航(而不是在释放按钮之后).
我还没有完全掌握的一件事是,如果缓存清单在列出的所有文件处于联机状态时也充当预取.
例如,假设我正在访问:
/page1.html
Run Code Online (Sandbox Code Playgroud)
我网站上的每个页面都有相同的声明:
<html manifest="/cache.manifest">
Run Code Online (Sandbox Code Playgroud)
在缓存清单文件中,我有:
CACHE MANIFEST
/page2.html
/page3.html
/page4.html
Run Code Online (Sandbox Code Playgroud)
所以会发生的事情是我首先访问/page1.html,当我在线时,我的浏览器也会知道如何缓存2-4页.当我断开连接并访问第2-4页时,所有内容都会加载,因为它已经被缓存了.
问题:如果我访问/page1.html,并且我仍然在线连接,并访问/page2.html,我的浏览器是否仍会请求/page2.html,或者它是否会向服务器发出另一个请求并使用缓存的内容从/cache.manifest文件?基本上就像firefox使用的预取链接一样?
我正在看一些稍微混淆的代码,它们试图使用各种编译器内置函数对预取指令进行平台抽象.它似乎最初基于powerpc语义,分别使用dcbt和dcbtst进行读取和写入预取变化(这两个都在新的可选流操作码中传递TH = 0).
在ia64平台上我们有阅读:
__lfetch(__lfhint_nt1, pTouch)
Run Code Online (Sandbox Code Playgroud)
写的地方:
__lfetch_excl(__lfhint_nt1, pTouch)
Run Code Online (Sandbox Code Playgroud)
这(读取与写入预取)似乎与powerpc语义相当匹配(除了ia64允许时间提示).
有点奇怪的是,有问题的ia32/amd64代码正在使用
prefetchnta
Run Code Online (Sandbox Code Playgroud)
不
prefetchnt1
Run Code Online (Sandbox Code Playgroud)
因为如果该代码与ia64实现一致(在我们的代码中为我们的(仍然存在的)hpipf端口和我们现在已经死的windows和linux ia64端口的#ifdef变体).
由于我们使用intel编译器构建,因此我应该能够通过切换到xmmintrin.h内置函数来使我们的许多ia32/amd64平台保持一致:
_mm_prefetch( (char *)pTouch, _MM_HINT_NTA )
_mm_prefetch( (char *)pTouch, _MM_HINT_T1 )
Run Code Online (Sandbox Code Playgroud)
...只要我能弄清楚应该使用什么时间提示.
问题:
是否有读取和写入ia32/amd64预取指令?我在指令集引用中没有看到任何内容.
nt1,nt2,nta时间变量中的一个是否优先用于读取与写入预取?
知道是否有充分的理由在ia32/amd64上使用NTA时态提示,而在ia64上使用T1?
在我的Django项目中,我为每个django用户提供了一个配置文件,而配置文件与一个Info模型相关.两种关系都是OneToOne.由于大部分时间我都在为用户使用Profile和Info模型,因此我希望默认选择这些模型,这样我就不会再次访问数据库了.有没有办法使用Django身份验证?
我正在使用Typeahead.js进行自动建议,我的代码是:
var job_scopes = new Bloodhound({
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.value);
},queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 100,
remote: {
url: 'http://www.domain.com/json.php?action=job_title&q=%QUERY'
}
});
job_scopes.initialize();
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想将其更改为prefetch,以便能够tokens在我的JSON中使用并在Bloodhound上基于令牌返回结果.
我不能简单地创建静态JSON,因为我总是将建议项添加到数据库中.
有没有办法动态预取json?
我有一个简单关系的模型
class Tasks(models.Model):
initiator = models.ForeignKey(User, on_delete = models.CASCADE)
class TaskResponsiblePeople(models.Model):
task = models.ForeignKey('Tasks')
auth_user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
我需要编写一个SQL查询的模拟,如下所示:
select a.initiator, b.auth_user
from Tasks a
inner join TaskResponsiblePeople b
on TaskResponsiblePeople.task_id = task.id
where Tasks.initiator = 'value A' OR TaskResponsiblePeople.auth_user = 'value B'
Run Code Online (Sandbox Code Playgroud)
问题是OR语句处理两个不同的表,我不知道正确的Django语法来模仿上面提到的原始SQL查询.请帮帮我!
更新1
根据下面给出的答案,我使用以下代码:
people = TaskResponsiblePeople.objects.filter(Q(task__initiator = request.user.id)|Q(auth_user = request.user.id)).select_related('auth_user')
print people.query
# The result of the print copy-pasted from console
# SELECT * FROM `task_responsible_people`
# LEFT OUTER JOIN `tasks` ON (`task_responsible_people`.`task_id` = `tasks`.`id`)
# LEFT OUTER …Run Code Online (Sandbox Code Playgroud) 我有一个我想象的非常常见的情况,我希望很容易解决 - 一个带有UICollectionView的应用程序,每个单元格中的图像通过http/https从Web服务器上的API获取.
我正在尝试在UICollectionView中实现iOS 10的预取,以便提前请求可能需要的图像.
在我看来,最佳预取应满足各种要求:
我查看了各种现有的库,如SDWebImage和Kingfisher,并且很惊讶,似乎没有任何方法可以轻松地使用任何一个库来满足上述要求.
例如,SDWebImage不符合第二个要求 - 您只能取消所有预取,或者必须为每个图像创建一个预取器(这意味着各种其他SDWebImage功能,例如限制预取图像的并发请求数) - 即要求5 - 不再有效.)
这真的是一个难题吗?我错过了一些明显的解决方案吗 我是否过度思考要求?
这里有三个表:product,model和product_modelN:M关系中的产品和模型.
product product_model model
id name product_id model_id id name
------------ ------------------- ----------
p1 Product 1 p1 m1 m1 Model 1
p2 Product 2 p2 m1 m2 Model 2
... p2 m2
Run Code Online (Sandbox Code Playgroud)
我想做什么:找到所有支持Model 2的产品(例如product 2).然后,对于每个产品,显示产品支持的model_ids列表(product 2=> [ m1,m2])
这是我的第一次尝试.我需要N个查询来搜索model_id每个产品.
# 1 query for searching products
my @products = $schema->resultset('Product')->search(
{ 'product_models.model_id' => 'm2' },
{ 'join' => 'product_model' },
)
# N queries for searching …Run Code Online (Sandbox Code Playgroud) 乌尔里希·德雷珀(Ulrich Drepper)在他的出色著作中提出了一个测试基准,我无法完全确定。
他正在谈论缓存和预取。他首先展示了一个测试,其中他正在访问每个16字节的元素数组(一个指针和一个64位整数,每个元素都有一个指向下一个的指针,但实际上这并不重要),并且对于每个元素,他递增它的值加一。
然后,他继续显示另一个测试,其中他正在访问同一数组,但是这次他将每个元素的值与下一个元素的值之和存储。
然后比较了这两个测试的数据,他显示,工作集小于L2D $的总大小(但大于L1D $的总大小),第二个测试的性能要优于第一个测试,他的动机是从下一个元素读取的内容充当“强制预取”,从而提高了性能。
现在,我不明白的是,当我们不仅要预取该行,而且实际上是从该行读取并在之后立即使用该数据时,该读取如何充当预取?该读取停顿不应该像在第一次测试中访问新元素时发生的那样停顿吗?实际上,在我看来,我认为第二个示例与第一个示例非常相似,唯一的区别是我们存储在上一个元素中,而不是最近的一个元素中(并且我们将两个元素相加而不是递增) 。
为了更准确地参考实际文本,在第22页右第三段中讨论了所涉及的测试,其相对图形为下一页的图3.13。
最后,我将在此处报告相关图表,并进行裁剪。第一个测试对应于蓝色的“ Inc”行,第二个测试对应于绿色的“ Addnext0”行。作为参考,红色的“跟随”行不执行写操作,而仅执行顺序读操作。
optimization caching cpu-architecture prefetch micro-optimization
我正在阅读有关Intel Core i7系统中可用的不同预取器的信息。我进行了实验,以了解何时调用这些预取器。
这些是我的发现
L1 IP预取器在3次高速缓存未命中后开始预取。它仅在缓存命中时预取。
L2相邻行预取器在第一个高速缓存未命中后开始预取,并在高速缓存未命中时预取。
L1 H / W(跨步)预取器在第一次高速缓存未命中后开始预取,并在高速缓存命中时进行预取。
我无法了解DCU预取器的行为。它何时开始预取或调用?它是否在缓存命中或未命中时预取下一个缓存行?
我在其中提到的英特尔文档披露-hw-prefetcher中进行了探索-DCU预取器将下一个缓存行提取到L1-D缓存中,但是在开始预取时没有明确的信息。
谁能解释DCU预取器何时开始预取?
prefetch ×10
javascript ×2
assembly ×1
bloodhound ×1
caching ×1
cpu-cache ×1
dbix-class ×1
django ×1
html ×1
html5 ×1
intel ×1
ios ×1
join ×1
jquery ×1
json ×1
optimization ×1
perl ×1
typeahead.js ×1
uiimageview ×1
uitableview ×1
x86 ×1