Javascript 检查链接在angularjs中是否有https://
我的angular应用程序中有大量JSON格式的数据Javascript 检查链接在angularjs中是否有https://,javascript,html,angularjs,json,Javascript,Html,Angularjs,Json,我的angular应用程序中有大量JSON格式的数据 [ {"link": "https://stackoverflow.com"}, {"link": "https://stackoverflow.com"}, {"link": "id-aW783D"}, //This is a wrong data {"link": "https://stackoverflow.com"} ] 但正如您在JSON中看到的,第三个对象有一个无效值(不是链接) 现在我需要用a绑定这些链接,但是
[
{"link": "https://stackoverflow.com"},
{"link": "https://stackoverflow.com"},
{"link": "id-aW783D"}, //This is a wrong data
{"link": "https://stackoverflow.com"}
]
但正如您在JSON中看到的,第三个对象有一个无效值(不是链接)
现在我需要用a
绑定这些链接,但是{“link”:“id-aW783D”}
在a
中无效,因为它不是有效的URL
我添加这段代码是为了避免无效链接,但有了这段代码和大量数据,应用程序需要花费大量时间来加载
for(i; i < $scope.data.length; i++){
item = $scope.data[i];
if (item.link.indexOf("https://")){
item.ID = item.link;
}
else item.ID = '';
}
- {{j.link}
使用:ng show=“j.ID.indexOf('https')==0”
Js速度相当快。Ng if的速度要慢得多。以及呈现html标记
例如,为100万个对象运行“for”:
var start = new Date();
for(i = 0; i < 1000000; i++){
item = {link: '123321https://'};
if (item.link.indexOf("https://")){
item.ID = item.link;
}
else item.ID = '';
}
console.log(new Date() - start)
var start=newdate();
对于(i=0;i<1000000;i++){
item={link:'123321https://'};
if(item.link.indexOf(“https://”){
item.ID=item.link;
}
else item.ID='';
}
console.log(新日期()-start)
在我的chrome浏览器中使用139ms
我怀疑我的电脑能在有1kk链接的页面上生存下来
实际上,您需要的是虚拟/无限滚动。如果您想针对更大数量的数据进行优化,您不想将过滤逻辑卸载到模板中。你可以尝试不同的逻辑,比如
var data_to_render = $scope.data.filter(function(item) {
return item.link.indexOf("https://") === 0;
})
这将返回一个新数组,因为javascript中的变异可能代价高昂,并且避免将项变量指定X次
除此之外,如果只是显示一个数据列表,可能需要尽可能限制显示的元素数量。过滤一个数组中的数十万项并不是一个真正的问题,一次渲染它们会降低大多数设备的速度。您可以使用过滤器!上面的例子速度很快,但在我的例子中不是这样,我有大规模的嵌套json数据,也许我需要添加服务器端分页,谢谢您的回复。:)关键是,在进行一些非常繁重的计算之前,任何js函数的处理结果都会比呈现标记快得多。所以thin point渲染的不是JS。