Попробуйте обработать полученные данные постепенно.
В приведенном ниже фрагменте элементы, сгенерированные в блоках 250, в основном с использованием jQuery offferred.notify () и deferred.progress () .
Когда все 10000 обработанных объектов, deferred
объект resolved
с коллекцией из 10 000 элементов. Затем элементы добавляются к document
при одном вызове .html()
в обратном вызове отложен. Then () .done()
; .fail()
callback cast как null
.
В качестве альтернативы, можно добавить элементы к document
в блоках 250, в пределах deferred.progress
обратного вызова; вместо [1]
setTimeout
используется для предотвращения «замораживания веб-браузера».
g4]
$(function() {
// 10k items
var arr = $.map(new Array(10000), function(v, k) {
return v === undefined ? k : null
});
var len = arr.length;
var dfd = new $.Deferred();
// collection of items processed at `for` loop in blocks of 250
var fragment = [];
var redraw = function() {
for (i = 0 ; i < 250; i++)
{
// configurationVariableChart.row.add(
// $(
fragment.push('' +
'' + arr[i] + ' ' +
' ')
// )[0]);
};
arr.splice(0, 250);
console.log(fragment, arr, arr.length);
return dfd.notify([arr, fragment])
};
$.when(redraw())
// `done` callbacks
.then(function(data) {
$("#results").html(data.join(","));
delete fragment;
}
// `fail` callbacks
, null
// `progress` callbacks
, function(data) {
// log , display `progress` of tasks
console.log(data);
$("progress").val(data[1].length);
$("output:first").text(Math.floor(data[1].length / 100) + "%");
$("output:last").text(data[1].length +" of "+ len + " items processed");
$("#results").html("processing data...");
if (data[0].length) {
var s = setTimeout(function() {
redraw()
}, 100)
} else {
clearTimeout(s);
dfd.resolve(data[1]);
}
})
})
Вам нужно использовать curl с куки-файлом, который симулирует аналогичное поведение в браузере.
Когда вы посещаете google.com из Англии, он перенаправляет вас на google.co.uk, однако на этой странице есть ссылка "go to google.com", которая позволяет вам вернуться на google.com и остаться там. Она использует файл cookie, чтобы запомнить настройки вашего сайта.
Например, вот куки, которые у меня есть после этого (используя firefox):
Попробуйте получить доступ www.google.com/ncr
, он избежет перенаправления на страницу .Co.uk (или любой другой национальной).
Несколько взлома, но как насчет использования IP-адреса? http://216.239.59.147/ http://66.102.7.104/
Вы можете использовать www.google.co.uk напрямую, без разницы. google.com/.net всегда выполняет перенаправление в ваше местоположение, но если вы используете TLD страны, например .co.uk, перенаправление не произойдет.
Нет никакого (известного мне) способа предотвратить перенаправление при использовании .com или .net.
Один из способов избежать принятия решения Google о том, в какой стране вы находитесь, - это установить другой IP-адрес. Просто получите один из многих американских прокси-серверов из Интернета и сделайте что-то вроде этого:
$ch=curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCTION,1);
curl_setopt($ch,CURLOPT_PROXY,"8.12.33.159");
curl_setopt($ch,CURLOPT_PROXYPORT,"80");
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3");
curl_setopt($ch,CURLOPT_URL,$URI);
$results=curl_exec($ch);
curl_close($ch);
Таким образом, Google будет думать, что вы пришли с американского IP-адреса, а не перенаправляете на местный Google.