AngularJS 进阶 (三十二) 书海拾贝之特殊的 ng-src 和 ng-href
在说明这两个指令的特殊之前,需要先了解一下 ng 的启动及执行过程,如下:
浏览器加载静态 HTML 文件并解析为 DOM;
浏览器加载 angular.js 文件;
angular 监听 DOMContentLoaded 事件,监听到时开始启动;
angular 寻找 ng-app 指令,确定作用范围;
找到 app 中定义的 Module 使用 $injector 服务进行依赖注入;
根据 $injector 服务创建 $compile 服务用于编译;
$compile 服务编译 DOM 中的指令、过滤器等;
使用 ng-init 指令,将作用域中的变量进行替换;
最后生成了我们的最终视图。
可以看到,ng 框架是在 DOMcontent 加载完毕后才开始发挥作用。假如我们模板中有一张图。
那么在页面开始加载到 ng 编译完成之前,页面上会一直显示一张错误的图片,因为路径{{imgUrl}}还未被替换,就像这样:
为了避免这种情况,我们使用 ng-src 指令,这样在路径被正确得到之前就不会显示找不到图片。同理,<a>标签的 href 属性也需要换成 ng-href,这样页面上就不会先出现一个地址错误的链接。
顺着这个思路再多想一点,我们在模板中使用{{}}显示数据时,在 ng 编译完成之前页面上岂不是会显示出大括号及里面的表达式?确实是这样。为了避免这个,ng 中有一个与{{}}等同的指令:ng-bind,同样用于单向绑定,在页面刚加载的时候就不会显示出对用户无用的数据了。尽管这样你可能不但没舒心反而更纠结了,{{}}那么好用易理解,还不能用了不成?好消息是我们依然可以使用。因为我编写的是单页面应用,页面只会在加载 index.html 的时候出这个问题,只需在 index.html 中的模板中换成 ng-bind 就行。其他的模板是我们动态加载的,就可以放心使用{{}}了。
项目(移动端采用 Ionic 框架)开发完毕,测试阶段发现移动 APP 首页的广告图片(图片由服务器端返回相应 url 地址)很难加载,主要原因还是网速。如下图左所示,图片加载完毕如下图右所示。
问题分析
尝试进行图片加载的优化工作。
经过与 Ionic 群内卖火柴朋友的聊天,获取到如下内容:手机端访问速度受服务端带宽的限制。一个接收一个传输,和两方都有关系。服务器对 app 影响是很大的。2M 一般是网站使用还可以 app 会不乐观。增加服务器带宽比在客户端做工作要好很多,还有就是服务图片优化。缓存机制只是下载后的事情,再说 ionic 的拉数据加上缓存有 bug。只能是轮番 和一些固定图片可以使用。因此考虑使用缓存机制的策略暂时告吹。
问题解决
提升服务端带宽。2M-->?M
在这里只是提供一个解决问题的思路,若大家有什么好的建议或想法可以给我留下你宝贵的评论。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/6698157671ee900e8716d7eaf】。文章转载请联系作者。
评论