Virtuoso SPARQL查询在JavaScript提取上缓慢

时间:2018-12-14 14:33:20

标签: javascript browser fetch sparql

当我通过浏览器或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>

Network Tab of the MWE Network Tab of the query URL in Firefox

1 个答案:

答案 0 :(得分:1)

请注意请求标头中的差异(尤其是Accept: */*Accept: text/html,application/xhtml..., */*;q=0.8之间的差异)。

我相信,如果您将JS/fetch() request headers与浏览器的设置相同,则会发现响应时间将匹配。