Когда я выполняю запрос SPARQL через браузер или curl, он выполняется намного быстрее, чем в том же браузере с использованием JavaScript fetch. Например, select * {?s ?p ?o.} в DBpedia занимает 400–1000 мс в браузере и несколько секунд при использовании выборки JavaScript. В обоих случаях количество строк ограничивается 10000 (в противном случае полная DBpedia была бы слишком большой). Это не ограничивается DBpedia, это также происходит с нашей собственной конечной точкой SPARQL, которая содержит около 100 тысяч троек. Я использую Firefox Developer Edition 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>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Посмотрите на различия в заголовках запросов (особенно, но, возможно, не только Accept: */* и Accept: text/html,application/xhtml..., */*;q=0.8).
Я считаю, что если вы сделаете Заголовки запросов JS / fetch () таким же, как у браузера, вы обнаружите, что время отклика будет совпадать.