March 12, 2016
windows平台下的PHP的线程安全版本与非线程安全版本的区别
"Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分(Linux/Unit平台没有这个概念的东西的),这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。\nPHP有2中运行方式:ISAPI和FastCGI。\nISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;\n而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。\n对于apache服务器来说一般选择isapi方式,而对于nginx服务器则选择FastCGI方式。\n1.Non Thread Safe版本php适用在使用CGI以及fastCGI的web服务器上,如nginx,lighttpd以及IIS的CGI …"
March 12, 2016
PHP底层工作原理
"从图上可以看出,php从下到上是一个4层体系\n①Zend引擎\nZend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、 实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend 实现。\n②Extensions\n围绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过 extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析 就是extension的典型应用)。\n③Sapi\nSapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过 sapi成功的将php本身和上层应用解耦隔离,php可以不再 …"
March 10, 2016
NPM 命令介绍(转)
"NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:\n允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 **“npm -v” **来测试是否成功安装。命令如下,出现版本提示表示安装成功:\n$ npm -v 2.3. 如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:\n$ sudo npm install npm -g /usr/local/bin/npm -\u0026gt; /usr/local/lib/node_modules/npm/bin/npm-cli.js [email protected] /usr/local/lib/node_modules/npm 如果是 Window 系统使用以下命令即可:\nnpm install npm -g 使用 npm 命令安装模块 npm …"
March 10, 2016
nodejs学习资料
"修改npm包管理器的registry( registry.npmjs.org)为淘宝镜像( npm.taobao.org),参考nam config -h 相关命令\nnpm config set registry “https://registry.npm.taobao.org“ http://npm.taobao.org\n七天学会NodeJS http://nqdeng.github.io/7-days-nodejs/\nNode.js Style Guide https://github.com/dead-horse/node-style-guide\n深入Node.js的模块机制 http://www.infoq.com/cn/articles/nodejs-module-mechanism/\n学习ES6生成器(Generator) http://www.toobug.net/article/learning_es6_generator.html\nrequire() 源码解读 http://www.ruanyifeng.com/blog/2015/05/require.html …"
March 10, 2016
nodejs中exports与module.exports的区别
"对于两者的理解只要记住一句话:“exports就是module.exports****的引用”即可。\n推荐易理解的文档: http://cnodejs.org/topic/5231a630101e574521e45ef8\n原文:\n你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块。例如:(假设这是rocker.js文件)\nexports.name = function() { console.log(\u0026#39;My name is Lemmy Kilmister\u0026#39;); }; 在另一个文件中你这样引用\nvar rocker = require(\u0026#39;./rocker.js\u0026#39;); rocker.name(); // \u0026#39;My name is Lemmy Kilmister\u0026#39; 那到底Module.exports是什么呢?它是否合法呢?\n其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。\n所有的exports收集到的属性和方 …"
March 7, 2016
Node.js框架比较: Express vs. Koa vs. Hapi
"http://www.nodejs.net/a/20141223/191626.html http://www.zhihu.com/question/25388201 https://cnodejs.org/topic/56936889c2289f51658f0926"
February 23, 2016
jQuery.extend和jQuery.fn.extend的区别-转
"jQuery.extend和jQuery.fn.extend的区别,其实从这两个办法本身也就可以看出来。很多地方说的也不详细。这里详细说说之间的区别.\n我们先把jQuery看成了一个类,这样好理解一些。 jQuery.extend(),是扩展的jQuery这个类。\n假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能。这样的话,不论是男人,女人,xx人…..等能继承这个技能(方法)了。\n可以如下图这样写着:\n然后:$.liu();这样就能打印出来”liu“这个字符串 代码在下面:\n3. 这说明啥啊,这说明.liu()变成了jQuery这个类本身的方法(object)嘛。他现在能”唱歌“了。但是吧,这个能力啊,只有代表全人类的 jQuery 这个类本身,才能用啊。你个人想用,你张三李四王五麻六,你个小草民能代表全人类嘛?\n所以啊,这个扩展也就是所谓的静态方法。只跟这个 类 本身有关。跟你具体的实例化对象是没关系滴。\n我们再看看jQuery.fn.extend()这个方法。\n从字面理解嘛,这个拓展的 …"
February 23, 2016
Git-svn命令对比表,svn用户必看
"提供给从svn转git的开发人员参考\nGit与Subversion的命令对比表\n操作 GIT SUBVERSION 复制数据仓库 git clone svn checkout 提交 git commit svn commit 查看提交的详细记录 git show svn cat 确认状态 git status svn status 确认差异 git diff svn diff 确认记录 git log svn log 添加 git add svn add 移动 git mv svn mv 删除 git rm svn rm 取消修改 git checkout / git reset svn revert (※1) 创建分支 git branch svn copy (※2) 切换分支 git checkout svn switch 合并 git merge svn merge 创建标签 git tag svn copy (※2) 从服务端更新本地 git pull / git fetch svn update 推送到远端 git push svn commit (※3) 忽略档案目录 ."
February 15, 2016
深入解析php中的foreach问题
"篇文章是对php中的foreach问题进行了详细的分析介绍,需要的朋友参考下\n前言: php4中引入了foreach结构,这是一种遍历数组的简单方式。相比传统的for循环,foreach能够更加便捷的获取键值对。在php5之前,foreach仅能用于数组;php5之后,利用foreach还能遍历对象(详见:遍历对象)。本文中仅讨论遍历数组的情况。foreach虽然简单,不过它可能会出现一些意外的行为,特别是代码涉及引用的情况下。\n下面列举了几种case,有助于我们进一步认清foreach的本质。\n问题1:\n$arr = array(1,2,3); foreach($arr as $k =\u0026gt; \u0026amp;$v) { $v = $v * 2; } // now $arr is array(2, 4, 6) foreach($arr as $k =\u0026gt; $v) { echo \u0026#34;$k\u0026#34;, \u0026#34; =\u0026gt; \u0026#34;, \u0026#34;$v\u0026#34;; } 先从简单的开始,如果我们尝试运行上述代码,就会发现最后输出为0=\u0026gt;2 1=\u0026gt;4 2=\u0026gt;4 。\n为 …"
February 15, 2016
JavaScript垃圾回收机制
"一、垃圾回收的必要性\n下面这段话引自《JavaScript权威指南(第四版)》\n_ 由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。_\n这段话解释了为什么需要系统需要垃圾回收,JS不像C/C++,他有自己的一套垃圾回收机制(Garbage Collection)。JavaScript的解释器可以检测到何时程序不再使用一个对象了,当他确定了一个对象是无用的时候,他就知道不再需要这个对象,可以把它所占用的内存释放掉了。例如:\nvar a = \u0026#34;before\u0026#34;; var b = \u0026#34;override a\u0026#34;; var a = b; //重写a 这段代码运行之后,“before”这个字符串失去了引用(之前是被a引用),系统检测到这个事实之后,就会释放该字符串的存储空间以便这些空间可以被再利 …"