这段代码有问题吗?获得429响应并受API限制。我的循环是否应该归咎于此?
function getCat(from_locat){
var art_count = 0,
section_to_display = '';
if (!from_local) {
$.getJSON('/api/v2/help_center/sections.json').success(function(data) {
sections = data.sections;
sec_count = data.count;
}).then(function() {
$.each(sections, function(section) {
if (document.location.toString().match(sections[section].id) !== null) {
sections[section].isactive = 'active'; // section heading active?
}
$.getJSON('/api/v2/help_center/sections/' + sections[section].id + '/articles.json?draft=false').success(function(data) {
$.each(data.articles, function() {
if (document.location.toString().match(this.id) !== null) {
this.isactive = 'active'; // activate this
section_to_display = this.section_id;
}
});
sections[section].articles = data;
art_count++;
if (art_count === sec_count) {
renderNav(sections, section_to_display);
if (typeof(Storage) !== "undefined") {
var cache_expiry = moment().add(20, 'minutes').format('X');
sessionStorage.setItem('cache_expiry', cache_expiry);
sessionStorage.setItem('sections', JSON.stringify(sections));
}
}
});
});
答案 0 :(得分:0)
首先,你有两个循环,所以程序的复杂性/大“O”以二次方式增长。因此,如果sections
只有10个元素,那么您的代码至少会消耗所述API(10 ^ 2)= 100次。对于任何API,该消耗率很快将导致429。因此,请尝试降低代码的复杂性。
然而,现在,您的循环在给定时间范围内发出的请求超过了所述API允许的数量。要处理更多请求,某些API要求您是经过身份验证的用户或拥有身份验证令牌。例如,GitHub的API limits requests如下:
速率限制
对于使用基本身份验证或OAuth的请求,您每小时最多可以处理5,000个请求。对于未经身份验证的请求,速率限制允许您每小时最多发出60个请求。未经身份验证的请求与您的IP地址相关联,而不是与用户发出请求相关联。
因此,请检查API是否具有可以使您发出更多请求的身份验证系统。