我的前提是错误的。虽然AngularJS确实减缓了速度,但并不是由于我下面描述的问题。然而,是Flim回答了我的问题——如何从Angular作用域中排除一个元素——才能证明这一点。
我正在构建一个使用d3+Raphael从AJAX获取数据生成图表的站点。这会导致DOM中有很多SVG或VML元素,具体取决于用户选择要呈现的图表类型(例如,饼图只有很少的SVG/VML元素,线性和堆积条形图则有许多)。
在使用AngularJS控制的文本字段中输入文本时,我遇到了一个问题:Firefox变得非常缓慢。我输入几个字符,然后等待2-3秒,它们突然出现,然后再输入几个字符,以此类推。(Chrome似乎处理得更好些。)
当页面上没有图表时(用户未提供足够的数据来生成图表),编辑这些文本字段的内容就很好。我认为当AngularJS试图更新DOM并且有数百个SVG或VML元素需要查找时,它会遇到麻烦。
然而,图表中并没有AngularJS需要担心的内容。 (但是,在图表之前和之后都有UI元素需要其关注。)
我可以想到两个解决方案:
将图表的DIV放在AngularJS控制器之外,并使用CSS将其定位到实际所需的位置
告诉AngularJS - 以某种方式 - 不要担心图表的DIV;在保持视图和模型同步时跳过它
对我来说,第二个选择似乎更可取,因为它使文档布局合理/语义化。 是否有任何方法可以做到这一点?(或者,我没有想到的一些更好的解决方案?)