《深入浅出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. 无论多么周密的代码编写,一些未知问题总是可能在某个不确定的时候出现。在这种情况下,与其遇见bug修复它,不如建立健全的排查和跟踪机制,而日志就是实现这种机制的关键。在健全的系统中,完善的日志记录最能够还原问题现场。通过记录日志来定位问题是一种成本较小的方式。这种非结构化,轻量的记录方式容易实现,也容易扩展。

访问日志,异常日志

Advertisements

About liyao13

Yao Li is a web and iOS developer, blogger and he has a passion for technology and business. In his blogs, he shares code snippets, tutorials, resources and notes to help people develop their skills. Donate $5 to him for a coffee with PayPal at About Me page and read more professional and interesting technical blog articles. Follow him @Yaoli0615 at Twitter to get latest tech updates.
This entry was posted in CS Research&Application, Uncategorized and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s