windows平台下的PHP的线程安全版本与非线程安全版本的区别

Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分(Linux/Unit平台没有这个概念的东西的),这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。

PHP有2中运行方式:ISAPIFastCGI

ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;

而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。

Continue reading

PHP底层工作原理

51de416caaddc

从图上可以看出,php从下到上是一个4层体系

①Zend引擎

Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、 实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend 实现。 Continue reading

NPM 命令介绍(转)

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

$ npm -v
2.3.0

如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下: Continue reading

nodejs学习资料

修改npm包管理器的registry(registry.npmjs.org)为淘宝镜像(npm.taobao.org),参考nam config -h 相关命令

npm config set registry “https://registry.npm.taobao.org“

http://npm.taobao.org

七天学会NodeJS http://nqdeng.github.io/7-days-nodejs/

Node.js Style Guide  https://github.com/dead-horse/node-style-guide

深入Node.js的模块机制  http://www.infoq.com/cn/articles/nodejs-module-mechanism/

学习ES6生成器(Generator) http://www.toobug.net/article/learning_es6_generator.html

require() 源码解读 http://www.ruanyifeng.com/blog/2015/05/require.html

npm 模块安装机制简介 http://www.ruanyifeng.com/blog/2016/01/npm-install.html

NodeJs 测试框mocha https://cnodejs.org/topic/516526766d38277306c7d277

exports 和 module.exports 的区别

http://cnodejs.org/topic/5231a630101e574521e45ef8

http://cnodejs.org/topic/52308842101e574521c16e06

NodeJS 开发者的 10 个常见错误 http://web.jobbole.com/82504/

koa资料

《koa实战》 http://book.apebook.org/minghe/koa-action/index.html

yield 和 yield*   http://taobaofed.org/blog/2015/11/19/yield-and-delegating-yield/

【koa经典入门教程】https://github.com/koajs/kick-off-koa

https://github.com/koajs/koa/wiki

koa源码分析系列 http://purplebamboo.github.io/2014/05/24/koa-source-analytics-1/

http://cnodejs.org/topic/56936889c2289f51658f0926
如何优雅的在 koa 中处理错误 http://taobaofed.org/blog/2016/03/18/error-handling-in-koa/

 

项目结构图
https://github.com/focusaurus/express_code_structure

http://blog.csdn.net/tinico/article/details/18033433

https://cnodejs.org/topic/538edddda087f456207d1a81

 

10个最好的 Node.js MVC 框架

http://www.cnblogs.com/lhb25/p/10-best-node-js-mvc-frameworks.html

 

 

nodejs中exports与module.exports的区别

对于两者的理解只要记住一句话:“exports就是module.exports的引用”即可。

推荐易理解的文档:http://cnodejs.org/topic/5231a630101e574521e45ef8

原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html

你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)

exports.name = function() {
    console.log('My name is Lemmy Kilmister');
};

在另一个文件中你这样引用

var rocker = require('./rocker.js');
rocker.name(); // 'My name is Lemmy Kilmister'

那到底Module.exports是什么呢?它是否合法呢?

其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。 Continue reading