Monthly Archives: May 2016

Rework—A good book for small business

This weekend I read the book Rework which was written by Jason Fried and David Heinemeier Hansson who created famous web development framework Ruby on Rails. There are no bullshit and old saying as tons of blogs and books, they are … Continue reading

Posted in Book/Movie/Music | Tagged , | Leave a comment

How to improve website performance?

1 Measure the page performance 2 Compress and minify the JavaScript and css file 3 Consider leveraging a content delivery network (CDN) 4 Place your javascript at the end of your HTML file if possible. Seven mistakes that make website slow … Continue reading

Posted in CS Research&Application, Uncategorized | Tagged , , , | Leave a comment

《深入浅出Node.js》摘录

1. 这就是异步I/O在Node中如此盛行,甚至将其作为主要理念进行设计的原因。I/O是昂贵的,分布式I/O是更昂贵的。 2. Node在两者(单线程串行依次执行,多线程并行完成)之间给出了它的方案:利用单线程,远离多线程死锁,状态同步等问题:利用异步I/O,让单线程远离阻塞,以更好地使用CPU。 3. 事件循环,观察者,请求对象,I/O线程池这四者共同构成了Node异步I/O模型的基本要素。 4.下面为几种经典的服务器模型,这里对比下它们的优缺点。 同步式:对于同步式的服务,一次只能处理一个请求,并且其余请求都处于等待状态。 每进程/每请求:为每个请求启动一个进程,这样可以处理多个请求,但是它不具备扩展性,因为系统资源只有那么多。 每线程/每请求:为每个请求启动一个线程来处理。尽管线程比进程要轻量,但是由于每个线程都占用一定内存,当大并发请求到来时,内存将会很快用光,导致服务器缓慢。每线程/每请求的扩展性比每进程/每请求的方式要好,但对于大型站点而言依然不够。 5. Promise/Deferred: 先执行异步调用,延迟传递处理。 6. 异步的串行执行:async提供了series()方法来实现一组任务的串行执行。 异步的并行执行:async提供了parallel()方法,用以并行执行一些异步操作来提升性能。 7. 事件发布/订阅模式相对算是一种较为原始的方式,Promise/Deferred模式贡献了一个非常不错的异步任务模型的抽象,重头在于封装异步的调用部分,流程控制库则显得没有模式,将处理重点放置在回调函数的注入上。从自由度上来讲,async,Step这类流程库要相对灵活得多。EventProxy库则主要借鉴事件发布/订阅模式和流程控制库通过高阶函数生成回调函数的方式实现。 除了async,Step,EventProxy,wind等方案外,还有一类通过源代码编译的方案来实现流程控制的简化,streamline是典型的例子。 8. 在JavaScript中,实现外部作用域访问内部作用域中变量的方法叫做闭包。(在正常的JavaScript执行中,无法立即回收的内存有闭包和全局变量引用这两种情况) 9. 采用高速缓存的理由有: Node与缓存服务保持长连接,而非频繁的短连接,握手导致的延迟只影响初始化。 高速缓存直接在内存中进行数据存储和访问。 缓存服务通常与Node进程运行在相同的机器上或者相同的机房里,网络速度受到的影响较小。 10.编写高效的中间件,合理利用路由。 使用高效的方法。必要时通过jsperf.com测试基准性能。 缓存需要重复计算的结果。(需要控制缓存用量) 避免不必要的计算。(比如http报文体的解析,对于get方法完全不需要) 11. Bigpipe将网页布局和数据渲染分离,使得用户在视觉上觉得网页提前渲染好了,其随着数据输出的过程逐步渲染页面,使得用户能够感知页面是活的。这远比一开始给出空白页面,然后在某个时候突然渲染好给用户的体验更好。Node在这个过程中,其异步特性使得数据的输出能够并行,数据的输出与数据调用的顺序无关,越早调用完的数据可以越早渲染到页面中,这个特性使得Bigpipe更趋完美。 12. 持续集成:将项目工程化可以帮助我们把项目组织成比较固定的结构,以供扩展。但是对于实际的项目而言,频繁地迭代是常见的状态,如何记录版本的迭代信息,还需要一个持续集成的环境。travis-ci与GitHub的配合可谓相得益彰。 13. Web应用性能提升最直接有效的莫过于动静分离,多进程架构,分布式,缓存,其中涉及的几个拆分原则如下: 做专一的事。 让擅长的工具做擅长的事。 将模型简化。 将风险分离。 14. … Continue reading

Posted in CS Research&Application, Uncategorized | Tagged , | Leave a comment

听过的书

《影响力》 互惠(亏欠偿还,圈子社区-政坛) 承诺和一致(书面公开-减肥戒烟,不相关小恩小惠诱惑-捐款或销售,言行一致的压力-销售淡季买玩具,形成自我压力而非外部压力如奖励或惩罚-禁止孩子玩机器人,低球高球策略 -卖车,揭穿谎言直接拒绝-借调查问卷卖产品服务) 社会认同(罐头笑声,同辈压力,宗教预言失效仍尽力推广,目击者一人比多人更倾向帮助,不确定性,相似性,普通人做广告的优势,自杀新闻和校园慈善的模仿行为,独立思考,独立行动) 喜好(政治倾向,宗教信仰,文化品位,审美情趣,饮食娱乐,体育军事,非理性迁移,车模,通信兵和气象预报员) 权威(职位,衣着,考察其是否真是这个领域的专家) 稀缺性(数量,时间,过期不候,考虑是否因稀缺压力而产生不合理的价格和代价,反思是因稀缺而想占用,还是一直就像使用) 《人性的弱点》 价值观(家庭,工作,正直,结果,做选择时依赖的标准),名字(亲切),关心(重视),微笑(友好),赞美(肯定)   待续。。。

Posted in 阅读观影赏乐, Uncategorized | Tagged , | Leave a comment

Algorithm and Data Structure – Counting Anagrams

Recently I played an algorithm and data structure question which is called Counting Anagrams, its requirement is like: Input 2 abdcghbaabcdij     bcda bbbababaaabbbb     ab Output 2 0 8 6 2 3 4 5 6 9 As first … Continue reading

Posted in CS Research&Application, Uncategorized | Tagged , , | Leave a comment