带有Angular指令的SVG:性能不佳
SVG with Angular directive : bad performances
这是我第一次在这里问问题,但我完全被卡住了。我正在用Angular创建一个交互式svg地图。它与D3配合使用很好,但我希望使用Angular及其指令和模板。
目前,我设法让地图出现在屏幕上并对其进行操作,但表现很糟糕。我知道我必须过滤我的数据,但我不知道它在哪里:是在控制器上,还是在指令的链接上,还是API上?我不知道。
请注意,自从我3个月前开始学习Angular以来,我仍然是Angular的新手(不到一个月),即使是代码。所以,你肯定会在这里读到一些愚蠢的东西。
无论如何,我的问题是:如果(我想根据年份输入删除路径),我应该怎么做才能用一个简单的ng来替换复杂的ng隐藏
因此,我从API中检索一个JSON路径列表。
myjson:[{"land_name":"landa","path":"…","born":5000,end:5152}{"land_name":"landi","path":"…","born":1200,end:7100}{"land_name":"lando","path":"…","born":100,end:4000}]
我的api(节点+猫鼬):
// get all the lands (accessed at GET http://localhost:8080/api/landapi)
.get(function(req, res) {
landapi.find(function(err, docs) {
if (err)
res.send(err);
res.json(docs);
});
});
角度:
我的工厂:
.factory('landDataFactory', ['$http', function($http) {
return $http.get('http://localhost:3000/api/landapi')
.success(function(data) {
return data;
})
.error(function(err) {
return err;
});
我的控制器:
.controller('testCtrl', function($scope, landDataFactory) {
var vm = this;
vm.paysList = [];
vm.year = ''; (==> ng-model in the template)
landDataFactory.success(function(data) {
vm.land = data;
for (var i = 0; i < vm.land.length; i++) {
vm.LandList.push(vm.land[i]);
}
});
我的指令:
.directive('dynamicMap', function() {
return {
restrict: 'E',
replace : true,
scope: {
datapath : '=',
year : '='
},
templateUrl : './modules/dynamicmap.tpl.html',
link : function(scope, element, attrs) {
}
};
我的模板:
<div>
<div class="year">
<input ng-model="year" type="number" step="50" class="inputDate col-xs-2 form-control" placeholder="date""> <br/>
</div>
<svg class="Map">
<g class="drawLand" ng-repeat="data in datapath">
<path ng-hide="year == NULL || data.born > year || data.end < year" ng-attr-d="{{ data.path }}" id="{{ data.id_land }}"></path>
</g>
</svg>
</div>
我调用它时的指令:
<dynamic-map datapath="vm.paysList" year="vm.year"></dynamic-map>
提前感谢
我几乎没有资格发表评论,因为我只在Angular上玩了大约2天,但在那短暂的时间里,我发现如果你有中等大小的数据集,那么很容易遇到性能问题。据我所知,您应该非常努力地限制创建的双向数据绑定的数量。由于您的代码有一个ng repeat,如果可能的话,您应该考虑将{data:path}
替换为{::data.path}
,以一种方式在repeat内部进行绑定。
不过,我真正的建议是不要使用棱角分明的。据我所知,Angular 1.0是一条死胡同,因为它很快就会被Angular 2.0所取代。此外,Angular的整个哲学似乎是围绕着"看看这个语法有多好!HTML和javascript从未如此简单!"的理念构建的,"哦,你想制作一个真正的应用程序吗?这里有一些让它发挥作用的丑陋技巧,顺便说一句,你不明白指令、工厂指令和指令工厂之间的区别吗?你怎么可能不知道每个标签都有不同的作用域规则…".
简而言之,等待Anuglar 2.0或者寻找其他东西。我选择了react.js,到目前为止,我发现它重量更轻,更直观,更适合长期生产。
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何更改<svg>标记为<img>用js标记
- 锚点元素不't使用svg时,请打开EDGE上的href
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- SVG具有旋转图像的低性能
- 带有Angular指令的SVG:性能不佳
- Web应用程序性能:SVG、Canvas或Dom Manipulation
- 改进了画布中 SVG 路径渲染的性能
- SVG筛选器性能问题
- svg卷轴在mozilla firefox中的性能
- 在SVG中添加更多的圆圈会大大降低性能
- 在React中加载SVG的性能
- 使用嵌套组改进SVG动画性能
- 如何不断移动SVG路径而不损失性能
- SVG 属性和样式之间是否存在性能差异