[.NET领域驱动设计实战系列]专题 结合领域驱动设计的面向服务架构来搭建网上书店

一、前言

  在前面专题一中,我已经介绍了我写这系列文章的初衷了。由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广。然而本系列可以说是刚接触领域驱动设计朋友的福音,本系列将结合领域驱动设计的思想来一步步构建一个网上书店,从而让大家学习DDD不再枯燥和可以看到一个DDD案例的形成历程。最后,再DDD案例完成之后[……]

查看更多……

js性能优化 文章合集收藏

我所经历的JS性能优化
   折腾了好几天,纠结了好几天,郁闷了好几天,终于在今天可以释怀了,留下其中的苦乐辛酸来和大家分享。

   事情是这样子的,上周接到一个需求,其中涉及到一个好友选择的组件,就是单机左侧某个群组下的好友后该好友移动到右侧,视为选择了它,另外每个群组还有全选,折叠和展开等功能。组件在开发过程中,遇到了在2000条数据的时候,搜索会变的很卡,IE8下为2s左右,IE6更长,我在最初的优化过程中我使用事件代理,文档片段,字符串数组,少创建对象,缓存一切可以缓存的,用hash超找代替数组查找等方式,但是一直没有找到性能的瓶颈所在,所以效果不大,后来采用了setTimeout的方式,就是限制js的执行时间,当它超过规定的时间后记录当前的执行状态,然后setTimeout延迟一段时间再执行,而把延时的这段时间交给UI线程,这样做后确实不卡了,但是因为出现延时调用,搜索的总体时间变长了,试想让用户等十多秒来看搜索的结果这样做也太不合理,问题一直没有得到根本的解决。

后来,在johnnie和youkun的帮助和提示下,我找到了优化的入口就是找性能瓶颈,就是如果一个段代码很耗时的话你可以注释掉一部分你认为是很耗时的,或者干脆全部注释掉,然后再一点一点的解开,按照这个思路,我发现在我的循环搜索中频繁进行了dom操作,就比如搜索用户提交的一个queryString,我的方法是在数据中遍历所有的item,如果匹配,就通过这条数据找到这个item对应的dom,然后显示它,不匹配就隐藏它,然后每个组搜索完还要更新该组搜索的结果数,这里面涉及到选择dom,然后显示或者隐藏它等,正是这些dom操作在大数据量的时候使得搜索操作变得很慢,当时我试验了下,就算在循环中只执行一个document.getElementById也很耗时,找到了问题的根源所在,接下来的优化就有了方向,于是在v3版本中我改变了搜索的策略,循环遍历的时候只拼接dom,在循环结束后一次性的放到文档中,经过测速,循环遍历拼接dom只用了不超过60ms,而把这一大段html放到文档中这一个操作在IE下耗时250ms左右,虽然离大师们推荐的100ms还有差距,但是相对v2的2s提升了很多,我也终于松了一口气了。
小结:其实js优化一定要掌握方法,没有正确的方法可能做了很多工作都是偏离主题的,按照正确的优化方法来优化就会定位性能瓶颈,然后对其采取进行有效的 优化措施,而js优化中最主要的还是对dom操作的优化,单纯的js执行时间是很短的,而js和dom之间的交互是通过接口来完成,通过接口来完成的都会 有延时,所以要尽量减少dom操作,尤其是在大循环中。
最后,总结下常见的dom操作的优化方法(节选自高性能JavaScript)

1 最小化dom访问次数,尽可能在js端执行;
2 如果需要多次访问某个dom节点,请使用局部变量存储对它的引用;
3 小心处理html集合,因为它实时连系着底层的文档,把集合的长度缓存到一个变量中,并在迭代中使用它,如果需要经常操作集合,建议把它拷贝到一个数组中;
4 如果可能的话,使用速度更快的API,比如querySelectorAll和firstElementChild;
5 要留意重绘和重排;批量修改样式时,“离线”操作dom树;使用缓存,并减少访问布局的次数;
6 动画中使用绝对定位,使用拖放代理
7 使用事件委托来减少事件处理器的数量

总结下js中对数据访问的优化(节选自高性能JavaScript)

1 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的;
2 尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价;
3 闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存;
4 嵌套的对象成员会明显影响性能,尽量少用;
5 避免多次访问对象成员或函数中的全局变量,尽量将它们赋值给局部变量以缓存。[……]

查看更多……

SQL对Xml字段的操作

T-Sql操作Xml数据

一、前言

SQL Server 2005 引入了一种称为 XML 的本机数据类型。用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列;此外,还允许带有变量和参数。为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB)。

用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中。

随着SQL Server 对XML字段的支持,相应的,T-SQL语句也提供了大量对XML操作的功能来配合SQL Server中XML字段的使[……]

查看更多……

代码的印象派:写点好代码吧

此文来源于代码的印象派:写点好代码吧

最近有一位猎头顾问打电话询问是否有换工作的意向,对推荐的公司和职位的描述为:"我们这里有一家非常关注软件质量的公司,在寻找一位不仅能完成有挑战的软件开发任务,并且还对代码质量有非常高追求的软件工程师。"。

很难得猎头顾问会以这样的切入点来推荐职位,而不是诸如 "我们是互联网公司","我们是著名互联网公司","我们可以提供业内领先的薪资","我们创业的方向是行业的趋势","我们提供创业公司期权","我们提供人体工程座椅",&[……]

查看更多……

微软HoloLens证明:增强现实不是忽悠人

 

微软 HoloLens 证明:增强现实不是忽悠人

  近日,微软展示了现实增强设备 HoloLens 能实现哪些令人惊叹的用途。与此同时,微软将 HoloLens 称作当前最令人兴奋的新技术之一。

  在 1 月份发布 HoloLens 时,微软主要介绍了 HoloLens 配合微软当前的产品能实现哪些用途。例如,你可以通过 HoloLens 在客厅中玩《MineCraft》游戏,或是通过 Skype 与远方的好友通信。尽管现实增强技术在多个行业都具备潜在应用,但微软却重点介绍了 HoloLens 在消费类市场的潜力。

  微软的做法可能并没有错。将墙壁变为虚拟显示屏,在家中养育虚拟的宠物,或是将整个家居环境变为全息舞台,这样的前景极[……]

查看更多……

WebP 探寻之路

Hahn

2014.12.15

未标题-1

前端技术

前言

不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得探索的事情。

但如今对于 JPEG、PNG 和 GIF 这些图片格式的优化几乎已经达到了极致, 若想改变现状开辟新局面,便要有釜底抽薪的胆量和气魄,而 Google 给了我们一个新选择:WebP

对 WebP 的研究缘起于手机 QQ 原创表情商城,由于表情包体积较大,在 2G/3G 的网络环境下加载较慢。同事小贝恰好因为 2013 Google I/O Event 了[……]

查看更多……

高性能Javascript–脚本的无阻塞加载策略

  Javascript在浏览器中的性能,可以说是前端开发者所要面对的最重要的可用性问题。

  在Yahoo的Yslow23条规则当中,其中一条是将JS放在底部 。原因是,事实上,大多数浏览器使用单进程处理UI和更新Javascript运行等多个任务,而同一时间只能有一个任务被执行。Javascript运行了多长时间,那么在浏览器空闲下来响应用户交互之前的等待时间就有多长。 

  从基本层面说,这意味着<script>标签的出现使整个页面因脚本解析、运行而出现等待。不论实际的 JavaScript 代码是内联的还是包含在一个不相干的外部文件中,页面下载和解析过程必须停下,等待[……]

查看更多……

React快速入门

目录:

  1.  简介

  2.  Hello React!

  3.  虚拟DOM

  4.  React组件

  5.  轮子来了:JSX

  6.  使用JSX

简介

React是Facebook开源的一个用于构建用户界面的Javascript库,已经 应用于Facebook及旗下Instagram。

和庞大的AngularJS不同,React专注于MVC架构中的V,即视图。 这使得React很容易和开发者已有的开发栈进行融合。

React顺应了Web开发组件化的趋势。应用React时,你总是应该从UI出发抽象出不同 的组件,然后像搭积木一样把它们拼装起来:

lego

不过,React定义组件的方式和AngularJ[……]

查看更多……

谈谈React Native

摘要:一个新框架的出现总是为了解决现有的一些问题,那么对于现在的移动开发者来说,到底有哪些问题React Native能涉及呢?本文作者唐巧从人才稀缺、代码复用等角度详谈了自己对于React Native的理解。

几天前,Facebook在React.js Conf 2015大会上推出了React Native。我发了一条微博(地址),结果引来了 100 多次转发。为什么React Native会引来如此多的关注呢?我在这里谈谈我对React Native的理解。


一个新框架的出现总是为了解决现有的一些问题,那么对于现在的移动开发者来说,到底有哪些问题React Native能涉及呢?

人才稀缺的问[……]

查看更多……