计算机在执行指令时,为了性能,一般是有一个预先取指析指的过程,而这个是依赖于指令预测的,即预测要执行哪条指令,如果预测命中,则执行该指令的时间可以大大缩短,从而提示性能。
在基于SOA架构的系统开发中,经常感觉客户端比较慢,很大一个原因是因为很多操作要跨网络取数据,还要对数据进行转换处理,如果系统在数据传输上加入一些其他功能,如安全,加密,特殊的编解码等等,则速度就更低了。
如果我们在客户端加入了预取功能,则可以改善性能,得到更好的用户体验。预取和缓存是不一样的。预取是基于预测用户行为,而提前异步执行某些操作。
举个例子,例如,有一个用户浏览窗口,其中有一个用户列表,用户可以查看其中用户的详细信息。
方法1:得到用户列表用一个service call,当用户选择查看一个选定用户的详细信息时,再发一个service call。
这个方法的缺点是service call的粒度太细,每次都要调用service call得到用户详细信息,性能太低。
方法2:一个service call得到所有数据。
这个方法的缺点是UI响应慢,Ux不好。
方法3:得到用户列表用一个service call,show出界面,同时预测用户有可能查看详细信息,然后有另一个service call在悄悄的拿所有用户的详细信息数据。
在某些情况下,针对细粒度的操作的预测也是非常有用的。如当用户选择一个条目时,则开始取该条目相关的数据,当用户真正操作该条目时,可以直接使用刚才得到的数据,性能提升,用户体验更好。