当我通过浏览器或curl
执行SPARQL查询时,它比使用JavaScript提取的同一浏览器中的查询要快得多。例如,DBpedia上的select * {?s ?p ?o.}
在浏览器中花费400-1000毫秒,而使用JavaScript提取则花费几秒钟。在两种情况下,行数都限制为10000(否则,完整的DBpedia将太大)。这不仅限于DBpedia,它也发生在我们自己的SPARQL端点上,该端点包含大约10万个三元组。我正在使用Firefox开发人员版65.0b3(64位)。如何使用fetch
获得相同或至少相似的性能?要执行MWE,需要绕过CORS规则。
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body>
<script>
const ENDPOINT = "http://dbpedia.org/sparql"
const GRAPH = "http://dbpedia.org";
function sparql(endpoint, graph, query)
{
const url = endpoint +
'?query=' + encodeURIComponent(query) +
'&format=json'+
'&default-graph-uri=' + encodeURIComponent(graph);
return fetch(url);
}
const query = "select * {?s ?p ?o.}";
sparql(ENDPOINT,GRAPH,query);
</script>
</body>
</html>
答案 0 :(得分:1)
请注意请求标头中的差异(尤其是Accept: */*
与Accept: text/html,application/xhtml..., */*;q=0.8
之间的差异)。
我相信,如果您将JS/fetch() request headers与浏览器的设置相同,则会发现响应时间将匹配。