




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Node.jsstandardjs`(`、`[``八、关键字之后要有一个空格,例如:`if(condition)九、函数名之后要有一个空格,例如:`functionname(arg)`===`node`err``window`:`window.alert('hi')`十三、,console和navigator`例外,可以不加ctrl`(1)console,把下面的代码importimporturllib.request,os;pf='PackageControl.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(.build_opener( Handler()));open(os.path.join(ipp,sublime,按`ctrlshiftp`installInstallPackage,如果可以则说明成功了-->输入要安装的插件名称-->按回车`ConvertToUtf8`sublime`AutoFileName`src,href`DocBlockr``Terminal`sublimeCMD`sidebarenhancements``OmniMarkupPreviewer`markdown`MarkdownEditing`markdownSublimeserverapacheColorpickerctrlshift如果colorpicker安装后用不了,有可能是因为与convertToUtf8的快捷键了,可以convertToUTF8的快捷键。因为文件编码转换用的不是很多,可[{"keys":["ctrl+shift++alt+c"],"command":"convert_to_utf8","args":{"encoding":"GBK","stamp":"0"}}]新建文件:ctrlshiftpnewfile(重命名:ctrlshiftp-->rename多光标编辑:shift分屏:altshiftctrl[参考 五、cl六、wdo七、gi-->.ge八、gc-->.ge九、gt-->.ge十、qs-->timeoutsetTimeout(function 这个词听起来很洋气、很计算机术语,百科里面的定义是:模块化是指解决一个复想造一台电脑,我们第式是直接买一台品牌机,什么都有的,我们买回来就可以用,functionfunctioneach(arr)}functionlog(str)}util.js里。需要用到时,引入该文件就行。这一切工作小杨小杨 定义一个each方法遍历对象,但页头的util.js里已经定义了一个eachObjectJava于是util.js里的代码变成了varvarorg={};org.CoolSite={};org.CoolSite.Utils={};org.CoolSite.Utils.each=function(arr){org.CoolSite.Utils.log=function(str)Yahoo!YUI2Yahoo!if( etd.Utils.isString(response)){if( etd.Utils.isString(response)){ }if( etd.Utils.isArray(response)){returnresponse;}重复造了。其中有一个最被大家喜欢的组件是dialog.js,使用方式很简单。<script<script<scriptsrc="dialog.js"></script><script>org.CoolSite.Dialog.init**/dialog.js<script<scriptsrc="dialog.js"></script><script>org.CoolSite.Dialog.init({/**/dialog.jsutil.jsdialog.js公司整合业务,某两个产品线要合并。结果发现前端代码。以上很多问题都是因为文件依赖没有很好的管理起来端页面里,大部分的依。如果学过Java、php等语言的同学,对这个概念应该很清楚,如果之前没学过的,继题,但是上面这个代码不够优雅,或者说不太利于,因为首先,如果我们不细看注释和我们把这种代码风格就叫做命名空间有的书或者上也把这种写代码的风格叫做单例模commonjs规范node.jsnode.jsCommonJSCommonJSAMDCMD等解决方案。amdAMDRequireJSAMDJSONAMDdefineAMD运行时思想是「EarlyExecuting」,也就是提前执行依cmdCMDSeaJSumdAMDCommonJSAMDCommonJS(unwrappedUMD(UniversalModuleDefinition)。希望解AMD(define),AMDsea.js一、简单友好的模块定义规范:Sea.jsCMDNode.jsnode同样的依赖加载方式是不可行的,因为依赖只有在执行期才能知道但是此时在浏览器端我们无法像node一样直接同步地一个依赖文件并执行!Sea.js的做法是,分成两个时期——加载期和执行期;pixelegos(一个开源项目)的依赖树:seajs.use(‘/js/pixelegos‘)pixelegos这个模块。Sea.jspixelegospixelegos.js,将其Sea.js又去加载其他的模块。随着的模块同步到浏览器端后,一棵依赖树才慢慢地通过递归显现出来。EXECUTEDexports。由于在执行node执行过程有点类似。sea.jssea.js要注意一点:使用了sea.js之后,我们推荐的做法是在html代码里,除了seajs.useseajs.configseajsrequireAPI四、定义第依赖的模cmdcmd规范的模块[exportsvsmodule.exports我们先复下复合数据类型[对象数据类型]的一个特点赋值module.exports是真正的出去的东西,但是为了简便,当我们只需要以对象的形式暴露出去属性或方法的时候,可以用exports,因为exports的地址值和但是,如果直接使用exports={},类似这样的,就,因为这时候,exportsmodule.exportsseajs.configbaseseajs"."(被调用的)(seajs.use()),二、以"/"开头相对于当前页面的根 三、普通命名直接加上base前缀例如例如base的默认值为 alias(别名),baseindex.htmlsea.js三、函数自执行的形四、sea.js的形式五、sea.jsjquery的形式六、sea.jsjqueryseajs.config的形式七、require.js的形式八、require.jsjquery的形式九、node.js的形式AMD(AsynchronousModuleRequire.jsAMD data-main点,require.js在加载的时候会先data-main是为了减少麻烦,大家约定使用main.js,所以也建议包结构遵从definedefine(function()varadd=function(num1,num2)returnparseInt(num1)+returnadd://RegisterasanamedAMDmodule,sincejQuerycanbeconcatenatedwith//RegisterasanamedAMDmodule,sincejQuerycanbeconcatenatedwith//filesthatmayusedefine,butnotviaaproperconcatenationscript//understandsanonymousAMDmodules.AnamedAMDissafestandmost//waytoregister.LowercasejqueryisusedbecauseAMDmodulenames//derivedfromfilenames,andjQueryisnormallydeliveredina//filename.DothisaftercreatingtheglobalsothatifanAMDmodule//tocalltohidethisversionofjQuery,itwillbaseUrlbaseUrl属性指定所有模块的查找根baseUrl这样的模块在用require()加载之前,要先用require.config()方//Notethat//Notethatumportability,librariesthatarenotjQuery//declarethemselvesasanonymousmodules,andavoidsettingaglobalif//AMDloaderispresent.jQueryisaspecialcase.Formoreinformation,/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-if(typeofdefine==="function"&&define.amd)define("jquery",[],function(){returnjQuery;}}shim:exports:'_''backbone':deps:['underscore','jquery'],exports:'Backbone'}}requireconfig()接受一个配置对象,这个对象除了有前面的paths属性之外,还有一个shim属性,专exports(输出的变量名表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性。require.jssea.js的异同【可以结合给出的代码示例进行js继续执行当前模块,require.js则是先把依赖的执行完,再执行当前的代码require.js是预加载,预执行,sea.jsnode.jsNode.js,或者Node,是一个可以让JavaScriptJavaScript的事情Node.js几乎都能做,而且可以做得更好。Node.jsweb发的实现思路,而采用了单线程、异步IO、驱动式的程序设计模型。这些特性不仅带1、浏览器和JavaScript行为层,分别对应的语言是标记语言HTML、配置语言CSS和语言JavaScript,浏览器就是JavaScript的执行环境,JavaScript只有依赖于浏览器才能解析和运行。它们的关系2JavaScriptDOMBOM、利用正则表达式进行表单验证、通过ajax或JSONP或iframe与服务器进行数据的交互,canvas卡、flappybird等小游戏。3Java、python、rubyonrails、jsjava如果之前学过任意一种语言尤其是基于c的语言那么学起node.js起来应JavaScript如何才能被作为语Node.js行为层,分别对应的语言是标记语言HTML、配置语言CSS和语言JavaScript,浏览器就是JavaScript的执行环境,JavaScript只有依赖于浏览器才能解析和运行。它们的关系CSShtmljsjs(比如chrome中就是V8引擎)当成是器,把js当成是文件。”我们的Node.js也是一种集成了V8引擎的软件所以我们也可以用Node.js来 ”Node.jsjsNodeDOMparentNode、childNode、cloneNodeNode有关系,DOM里面的指的仅仅是元素节点、文本节点、注释节点之类的东西。Node.js有很多用途,像做前端自动化工具、实时聊天系统、、给ajaxjson或jsonpapi等,这些我们课程都会涉及,我们的侧重点在于讲解Node.js开发一个及理解网络编程的底层原理Node.jsNode.js展的同学打好基础。一句话,我们的重点在于络编程。jsECMAScriptBOMNode.jsjsECMAScript+API+node.js(JavaNode.js下面安装6432打开命令行工具-->输入systeminfoX646432第二步、安装对应的node.js的msi包(老师提供有相应的安装包,或者你想安装的包可以到官网),下一步下一步就行了(next-->next-->next 第一步、打开命令行,输入node 因为在angular课程部分有用到,所以大家应该都安装过,尽量不要卸载,如果卸载了, 候会出问题,因为双方都影响了环境变量macwin10node的时候不能正常的使用,node.js,最好不要尝试这个软件。在安装nvmnode.jsC:\Users<user>\AppData\Roaming\npmnode6.4.0REPLJavaScriptREPLreadevalprintchromejsNode.jsnodeREPLCTRLREPLnode.jsjsnodeREPLjsnodeejsevaljssublimenodejs1、要执行的js文2js3CMDnode,node.js,就不会去找环境变node.exe了。设置-->语言和框架-->node.js路径-->webstorm “ DOSDOS。windows系统,mac或ubuntu、arcLinux中令行界面原理和操作类似,个别命令有最简单的方式:WINR-->DOS-->点进去之后,可以设置DOS的背景颜色、文字颜色、A:dA:d:C:cd(changedirectory))D:cd..:E:cd\:F:cls(clearscreen)G:exit:dos命令行(分割线上的需要掌握,下的了解md(makedirectory):rd(removedirectory):del(delete):删除文件,删除一堆后缀名一样的文件*.txtnotepad创建文件rds文件夹名称(询问是否删除)rd+/q+/s文件夹名称(F7ALTenterchrome如果在DOS命令行里面打开,很简单:chromeDOSDDOSchrome的完整地址:【注意:programfiles中间有空格,pathchrome.exeDOSglobalglobalnodeNode.jsglobal(不包含用户自定义的变量和setTimeout、setInterval、clearTimeout、clearInterval、consoleproto、constructor、Object、String、Array、Function、Date、JSON、NaNnode.jsjsJavaScriptNode.jsNode.jsjsab2.jsjs1234 下咱们《模块化》学习过的sea.js,咱们虽然学的东西不少,但是API就三个definerequiremodule.exports或exports-->当前模块出去的变量和方Node.js和sea.js是很类似的本质上是因为玉伯设计的cmd规范(这个规范也人提出的,国外应该是没有人提这个规范)是在模仿commonJs规范。Node.jsAPIrequiremodule.exports或exports-->当前模块出去的变量和方前面我们介绍过了,在Node.js中一个js文件就是一个模块,就是一个独立的作用域,也就就可以通过module.exports或exports来。console对象[了解CprintfconsoleconsoletimetimeEndconsole.error('\x1b[31m\x1b[1mError:\x1b[22mconsole.error('\x1b[31m\x1b[1mError:\x1b[22m\x1b[93m'+''+('\x1b[31m\x1b[36mInfo:\x1b[22m\x1b[93m\x1b[0m'我是提示信息//"收到响应"的打印是在"发送ajax请求"之后的,在调用$.post//"收到响应"的打印是在"发送ajax请求"之后的,在调用$.postsetImmediate想理解这个,我们需要先理解setTimeout(function(){},0);这个作用比较广,比如在varoTxtvaroContkeyupkeypresssetTimeout//oCont.innerHTML=var_this=oCont.innerHTML=_this.value;说白了,把时间定为0的目的是,为了在当前的主线程的代码执行完之后,让这个定时器尽可能快的得到调用,由于这个实在是比较好用,所以后来H5出来了一个API叫node.jsAPI dirname 值得注意的是,网上一堆人会把filenamedirname在文档中有这么一句话filenameisn'tactuallyaglobalbutratherlocaltoeachdirnameisn'tactuallyaglobalbutratherlocaltoeachNode.js的包是一个 commonJS规范的包应该具备以下特性: 二进制文件应该在 JavaScript代码应该在 文档应该在 单元测试应该在 Node.js对包的要求并没有这么严格,只要顶层 下有package.json,并符合一些规范js56、标准78复下咱们《模块化》学习过的sea.js,咱们虽然学的东西不少,但是API就三个definerequiremodule.exports或exports-->当前模块出去的变量和方Node.js和sea.js是很类似的本质上是因为玉伯设计的cmd规范(这个规范也人提出的,国外应该是没有人提这个规范)是在模仿commonJs规范。Node.jsAPIrequiremodule.exports或exports-->当前模块出去的变量和方前面我们介绍过了,在Node.js中一个js文件就是一个模块,就是一个独立的作用域,也就就可以通过module.exports或exports来。module.exportsexportssea.jsNode.js不会出现循环[了解所谓的循环就是a.js里require了b.js,但是有时候我们莫名的会在b.js里引入a.js,正常我们会想,这会不会导致循环不断的最后死循环?Node.jsNode.js经有了,就不会再考虑去重新加载第二遍了。(解释:1、如果当前要加载的模块存在cache缓存当中,则直接返回它exports出来的对象2、如果要加载的模块是native原生的,则调用NativeModule.require("传入当前模块名字")并返回结果3、否则,创建一个新的模块并且加入到缓存当中,然后再返回exports的结果)Node.jsfs(不理解原理没问题,这1、如果模块标识符解析出来的是模块或者我们用npm安装的第包,则会优先会判断是不是模块,如果不是,则开始按照node_modules(即module.paths)的路 则会把这 main4、如果还是找不到,则会去找当前路径里有没有一个叫这个名字的json文件,如果有,5node6Node.jsfs-->与文件系统交互(操作处理文件 querystring-->解析urlutil-->提供一系列小工具path-->处理文件路径url-->解析urlhttp-->提供httppathdemochrome-->F12CTRLSHIFTIa,b,c这三个变量每一步执行的变化,我们可以把鼠标放到左侧右键-->addtowatchaddtowatch,然后我们就会发现,a,b,c这三个变量都会出现在右侧的堆栈调第五步:我们如果想每一步都,我们就可以在左侧的行号上面点一下9a,b,c变量的值的变化:下的变化,我们还可以表达式a+b之类的值的每一步的变化。nodedebugceshi.js,Nodejs提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器我们需要在代码中加入stepnode-js第四步、用浏览器visualstudiocodeVisualstudiocode官网:/en-us/products/code-codevisualstudiocodeJavaScript,比如这里的loglog感知位置:使用这个参数后会光标的下一位置将会另起一行,tabdescription代码段描述,多重光标同时编辑多重光标同时编辑:Alt按住不动点击鼠标 (Ctrl+Shift+L选中文中所有出现该词的地方 (Up:上方向键,在ST中为Ctrl+Shift+方向键快速预览变量定义:Alt+F12(这两个功能用过VS的都知道:) 的信息,在editor.referenceInfos可以设置)快 当前行到上一行或下一行:查找/切换匹配括号:快速/取消注释:快速分屏编辑用visualstudiocode进行调试,要注意的两点:只能以app.js为执行的,调试这个app.js,或者修改launch.json中的"program":文件 概念理解及fs模 UNIX文件系统 和文件的一种层次安排 (directory)是一个包含项的文件,在逻辑上,可以认为每个项都包含一个文件中的各个名字称为文件名(filename)。当创建一个新 时,自动创建了两个文件 fsfilesystemnull1、varvarfs=vartext=vararr=text.split(/\r?\n/);//如果是在linux,mac机器上面,换行相当于\r\nwindows,则只是\n,所以\r2、varfs=require('fs');varfs=require('fs');throw}3、用于,返回一个所包含的文件和 的数组varvarfs=throw}4、varfs=require('fs');varfs=require('fs');5、发送,每次发送会触发一个data,发送结束会触发end。(思考一下,如果的文件是一部很大很大的,比2个小时varvarfs=varinputfs.createReadStream('abc.txt');vartxt='';//用于拼接所有的文件里的内容txt+=chunk;6、createWriteStream()writeendvarvarfs=varoutput=fs.createWriteStream(fileName,{encoding:'utf8'});流varvarfs=netnet1socket//剪刀>布//布>石头//石头>布varmyVal=vararr=varrobotVal=arr[parseInt(Math.random()*3)];if(robotVal==="jiandao"){console.log(robotVal,myVal,"平");caseconsole.log(robotVal,myVal,"胜");console.log(robotVal,myVal,}}elseif(robotVal==="shitou"){caseconsole.log(robotVal,myVal,"败");caseconsole.log(robotVal,myVal,"平");console.log(robotVal,myVal,}console.log(robotVal,myVal,"胜");casecaseconsole.log(robotVal,myVal,"负");}}分析:一个歌词的文件,先用\n把整个文件大个的字符串按行拆分成一个数组,然后setTimeout定时器,到点了varvarfs= 文件出错vararr=data.toString().split("\n");varreg=//[00:02.00][、]、.varvarreg1=/^\[(\d+):(\d+)\.(\d+)\]\s(.*)/;for(vari=0;i<arr.length;i++){vararr1=reg1.exec(arr[i]);varmin=parseFloat(arr1[1]);//分varsecondparseFloat(arr1[2]);//秒varmsecparseFloat(arr1[3]);//毫秒varcont=arr1[4];//歌词内容vartotalTime=min*60*1000+second*1000+msec;}}}[以下截屏来自于《JavaScript异步编程:设计快速响应的网络应用》一书chrome,chrome官网 npm=nodepackagejavamavenphpComposernode包管理工具(aNodenpm是一个JavaScript的包管理工具,它是用来查找、、重用无数别的开npm-npminstallnpm-对于不能的同学来说在一些第的npm模块的时候经常半天也不下来,npm镜像:npmnpminstall-gcnpm--npminstallcnpminstall$npminstall-g $$nrm*npmcnpm-- /nj/$nrmusecnpm//switchregistrytoRegistryhasbeenset nrmnrmhelp//shownrmlist//showallnrmusecnpm//switchtonrmhome//gotoaregistryhomenpminitpackage.json文件,package.jsonnodenpminstall-g(全局)npminstall--save-dev(安装的包会出现npminitnpminstallsavepackage.json中的devDependencies配置面,在使用--save之前必须在命令行执行npminit)如何在自己的代码里引入第varvarmodule_name=npmuninstallnpmuninstallsavepackage.jsonnpmnpminity初始化一个package.jsonnpminstall包名安装一个包npminstallgnpm升级npminstall--savepackage.json安装的包才可以使用require加载(使用了--save的参数之后,会自动修改package.jsonnpminstall--saveA包名Bnpminstallg包名全局安装一个命令行工具npmlist查看当前下安装的所有的包npmlist-g查看全局包的安装路径下的所有的包npmuninstall包名卸载当前 npmuninstall-g包名卸载全局路径下的某个包慢很慢,这时候,你可以尝试着用的源( cnpm:npminstallgcnpmregistry=cnpm与npm的同步频率目前是10分钟一次markdownnpm需求:我们现在有一个.md.markdownhtml达式来尝试着做,第一步,我们可以按\nsplitnpmmarkdown的解析器。我们点进我们可以点到对应的的repo库当中,就会看到详细的使用说明md然后我们就会发现,当 文件夹多了一个demo.html文件面的编码设置成GBK,然后看到转换成功:npm思路一先或谷歌一下比如和文件上传相关的我们就可以考虑一下文件传包一般大部分常用的npm包可以直接出来firefox,打开对应的firefox的翻译工具把整个网页翻译成中文的就可以看懂了,准确率package.json{//namenode,jsurl 名。所以不能移点号和下划线开"name":"//name和versionversion"version":"0.1.1",//npmsearch"description":"testcortex"main":"index.js",//binpath"bin":"cortex":"bin/cortex-*repository:"repository": ":[//licesnse"license":"MIT","author":{"name":"": //url"bugs":"url": *dependencies:*devDependencies:*peerDependencies:"tea":2.x"2.x}*bundledDependencies:发布包的同时打的其他依*optionalDependencies:默写依赖没有找到或者安装失败时,npm version>version>=version~version^version1.2.xX1.2.1,1.2.3http://...UnixtarballURL*version1-version2 >=version1version2.range1||range2满足任意一个即可git..Git"dependencies":{"MD5":"ansicolors":"argv-parser":"asks":"async":"columnify":"comfort": mand-errors":"cortex-init-prompts":"cortex-ls":"cortex-package-files":"cortex-profile":"cortex-scaffold-generator":"^4.0.0","cortex-search-utils":"^1.0.0","cortex-shrinkwrap":"editor":"express":"fs-expand":"fs-extra":"fstream":"glob":"ignore":"loggie":"make-array":"mix2":"neuron-builder":"neuron-graph":"neuronjs":"neuropil":"open":"read-cortex-json":"request":"semver-extra":"shrinked":"spawns":"stares":"tar":"devDependencies":{"mocha":"*","chai":"fs-sync":"jsonfile"://engines:nodenpm"engines":"node":/*script由命令组成的hash对象在包不同生命周期运*key时生命周期,value时要运行*"scripts":{"test":"make"homepage": }/*"scripts":{"start":"node 有server.js文件,npm会默认将start命令设置为nodeserver.js。"scripts":{"preinstall":"node-wafclean||true;node-wafconfigurebuild"}如果包的 有wscript文件,npm会默认将preinstall命令用node-waf进行编译如果包的 npm"contributors": 有AUTHORS文件,npm会默认逐行按Name<>(url)格式处理,邮箱和url是可选的。#号和空格开头的行会被忽略。包和模块很类似只不过包是一个更大的单位如果学过其他的语言理解包就很容易,javapackagejarphpperlphar,pythonpipjs 的结构规范bin存放可执行二进制文件的lib存放JavaScript代码的doc存放文档的test存放单元测试的包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件--package.json,位NPM相关。由于commonJS包规范尚处于草案阶段,npm在实践中做了一定的取舍,具体细1、name包名2、description包简介3、version版本号 数组npm中主要用来做分类搜索一个好的有利于快速查找5、maintainers包者列6、contributors贡献者列表7、bugs一个可以反馈bug8、licenses当前包所使用的证列表,表示这个包可以在哪些证下使用9、repositories10、dependenciesnpm11、scripts说明对象,它主要被包管理器用来安装、编译、测试和卸载12、binbinnpm包名-g命令可以将添加到执行路径中,之后可以在命令行直接执13、main模块引入方法require()在引入包时,会优先检查这个字段,并将其作为包中其余模块的,如果不存在这个字段,require方法会查找包目录下的index.js,index.node,index.json作为默认14、devDependencies一些模块只在开发时需要依赖,配置这人行,可以提示包的后续15、directories标识包的结构jQuery,zepto等去找我们需要的版本的库或框架,我们只需要定义好了配置文bowergitbowergit比如我们要bootstrap,如下bower会去上面找到bootstrap的代码由于bootstrap是依赖了jQuery的,所以它顺便还会把对应版本的jQuery下来.然后我们就可以在我们的项目当中bootstrap库了如果一个js库没有在bower的官网,但是有的仓库,我们也可以用短语来,如下:bowerbower.json,这个配置文件给别的同事,他们可以自己去和我们一模一样的相应的js库或框架2、如果相应的js库的版本升级了,我们只需要修改这个配置文件,然后去的就bower.jsonjs--bower.json,jsgruntweb应用程序的工作流,同时grunt前期开发的组件库如何和使第一步、npminit-yjshintgruntfile.js文件jsjsgrunt当然,grunt可以使用的插件有很多,大家可以去 /plugins里面找自己需windowsmacyeoman自动将最佳实践和工具整合进来,大大加速和方便我们后yoversion我们安装的只是yeoman这个工具我们如果想用它来做事情比如我们想处理angulargeneratorceshiNode.js在开发网页交互的时候甚至会忘记他们的存在但是在语言内部支持模型是何等强大的时会触发request。Node采用的方式是,所有的I/O都应该是非阻塞的,这意味着需要让程序暂停操作IO。回调函数往往以级联的方式嵌入到其他回调函数中,这。炉火关小,而是会采用更加安全的方式,通过快速切换工作对象来达到同样的目的驱。在日常生活中,我们习惯于用各种内部回调的方式来处理遇到的。和JavaScript类似,JavaScript很像,进程与线程的理解(了解即可计算机的是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行,假定工CPU一次只能运行一个任务。进程就好比工厂的车间,CPU所能处理的单个任务,任一时刻,CPU总是运行一个进程,其他进程处于非运JavaScript不能有多个线程呢?这样能提高效率啊。JavaScript的单线程,与它的用途有关。作为浏览器语言,JavaScript的主要用途是与为了利用多核CPU的计算能力,HTML5提出WebWorker标准,允许JavaScript创JavaScript单线程的本质。如果排队是因为计算量大,CPUCPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络数据),不得不等着结果出来,JavaScript语言的设计者,这时主线程完全可以不管IO设备,挂起处于等待中的任于是,所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)"所有同步任务都在主线程上执行,形成一个执行栈(executioncontextstack)主线程之外,还存在一个"任务队列"(taskqueue)。只要异步任务有了运行结果,三、和回调函"任务队列"是一个的队列(也可以理解成消息的队列),IO设备完成一项任务,就在"任务队列"中添加一个,表示相关的异步任务可以进入"执行栈"了。主线程"任务队列",就是里面有哪些。"任务队列"中的,除了IO设备的以外,还包括一些用户产生的(比如鼠标点"任务队列"是一个先进先出的数据结构,排面的,优先被主线程。主线程的读但是,由于存在后文提到的"定时器"功能,主线程首先要检查一下执行时间,某些只有四、EventEventLoop(循环)如何理解同步与异步(阻塞与非阻塞 是同步发消息是异varvarfs=readFilejsIOa.txtb.txtIONodevarfs=a.txtb.txtNode.js所有的异步I/O操作在完成时都会发送一个到队列后,就会把这个定时器任务插入到队列当中,下面几个定时器类似。,此时循环开始运行,检查队列发现里面有7个要处理的任务,把任务一个一个的,队列清空,代码执行完,循环停止processsetImmidiate在多个里交叉执行CPU运算密集型的任务compute(),我们希望这个函数尽可能持续的执行,来进行一些运web服务serverprocess.nextTick()来交叉执行compute()和正常的响应。 varhttp=function{// res){ {'Content-Type':'text/ }).listen(5000, 在这种模式下,我们不需要递归的调用compute(),我们只需要在循环中使用http请求进来,循环机制会先处理新的请求,然后再调用compute()。反之,如果你compute()compute()里,无法处理新的http请求了。你可以自己试试。markdownnode.jshtml文件第一步、去找一个用于markdown ceshi,npminity,markdownmarkdown文件放到当前文件夹index.js文件,写代码如下:互联网协议族(英语:InternetProtocolSuiteIPS)[1],是一个网络通信模型,以及TCP/IPProtocolSuite,或TCP/IPProtocols),简称TCP/IP[2]。因为这个协议的两个协议,包括TCP(传输控制协议)和IP(网际协议),为这个中最早通过的标准[3]。由TCP/IP协议栈(英语:TCP/IPProtocolStack)[4][5]。这些协议最早发源于国防部(缩写为DoD)的ARPA网项目,因此也被称作DoD模型(DoDModel)[6]。这个协议套组由互联网工程任务组负责。构之中[7][8]OSI模型。TCP/IPOSITCP/IPOSI模型组不能精确地匹配,还没有一个完全正确的答案。另外,OSI模型下层还不具备能够真同一层会引起,但是OSI模型还没有复杂到能够做更好的工作。下面的图表试图显示TCP/IPOSI模型中的位置:sessionnetworkdatalinkphysicalsessionnetworkdatalinkphysical7 例如ASAP、SSH、ISO8327/ 5BSD 32 OSI模型的最上面三层(应用层、表示层和会话层)TCP/IP组中是一个应TCP/IPTCPRTP下的打开和关闭连接组成,并且在TCP和UDP下的各种应用提供不同的端,这些功能能够被单个的应用程序(或者TCP/IP的时候就可以把它当作一个独立的层。applicationapplication4transporttransport internetTCP/IP来说这是因特网协议internet2例如以太网、Wi-Fi、该层包括所有和应用程序协同工作,利用基础网络交换应用程序的数据的协议。应用登陆)、DNS(名称<->IP地址寻找)以及许多其他协议。一旦从应用程序来的数据被IP相联系。服务器应用程序的端口由互联网号码分配局(IANA)连结外部的客户端程序通常使用系统分配的一个随机端一个端口并且通过服务器每一个应用层(TCP/IP参考模型的最)协议一般都会使用到两个传输层协议之一:面TCP HTTP(HypertextTransferProtocol,超文本传输协议),主要用于普 overSSL,安全超文本传输协议),HTTP FTP(FileTransferProtocol,文件传输协议),由名知义,用于文件POP3(PostOfficeProtocol,version3,邮局协议), SMTP(SimpleMailTransferProtocol,简单邮件传输协议),用来发NET(etypeovertheNetwork,网络电传),通过一个终(terminal) UDPBOOTP(BootProtocol,启动协议),NTP(NetworkTimeProtocol,网络时间协议), DHCP(DynamicHostConfigurationProtocol,动态主机配置协议),IP DNS(NameService,服务),用于完成地址查找,邮件转发等工作(TCPUDP)。 ECHO(EchoProtocol,回绕协议),用于查错及测量应答时间(运行在TCPUDP)。 TCP/IP协议组中,传输协议也包括所给数据应该送给哪TCP/IP协议组中技术上位于这个层的动态路由协议通常被认为是网络层的UDP不同之处,这在实时数据流或者路由高网络层丢失率应用IP地址表示(代表多个实体接口),这样 应用开发的(在IP上传输SS7),力传递”(besteffort)或者说“不可靠”协议——不是因为它特别不可靠,而是因为它查那它必须自行检测和判断,或者使用TCP协议。UDP的典型性应用是如流(音频和视如果创建可靠的连结所作的额外工作将是不成比例地大。D目前正由IEFT开发。它提供TCP流动控制语义,但对于用户来留UDP的数据报服务模型。TCP和UDP都用来支持一些的应用。任何给定网络地址的应用通过它们的TCP或者UDP端区分。根据惯例使一些大众所知的端口与特定的应用相联系RTP是为如音频和流这样的实时数据设计的数据报协议。RTP是使用UDP包格式作为基础的会话层,然而据说它位于因特网协议X.25ARPANETHost/IMPProtocolIP完成数据从源发送到目的的基本任务。IP能够承载多种不同的协议的数据;这些协议使用一个唯一的IP协议号进行标识。ICMP和IGMP12IPICMP(IP发送的诊断信息)和IGMP(用来管理多播数据),IP层之上但是完成网络层的功能,这表明因特网和OSIBGP、OSPFRIP实际上也是网络层的一和隧道通常预先建好,并且它们有一些直接发送到实体接口所没有的特殊特点(例如,tcp传输控制协议(英语:TransmissionControlProtocol,缩写为TCP)是一种面向连接的、可IETFRFC793OSI在因特网协议族(Internetprotocolsuite)中,TCPIP层之上,应用层之下的中间TCP8TCP把数据流分区限制)TCPIPTCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包TCPTCP用三路握手(three-wayhandshake)过程创建接。在连接创建过程中,很多参数TCP连接的正常创 器端被打开以后,用户端就能开始创建主动打开(activeopen)。 SYNA。服务器端应当为一个合法的SYN回送一个SYN/ACKACKA+1SYN/ACK 第一步、chromeDNSDNS缓存(DNS缓存或已失效)第三步、本地的HOST文件DNS的一个系统调用ip地址HTTPGETHTTP1.0协议HTML代码返回浏览器面的js、css、静态资源,他们同样也是一个个HTTP请求httpContent-Type版的最大变化,就是引入了持久连接(persistentconnection),TCP连接默认不关闭,可以被多个请求复用,不用Connection:keep-alive。Connection:closeTCP连接。显然这样的效率不高。更好的处理方法是,产生一块数据,就发送一块,采用"流模式"1.1
chunkedIPIP32(就像每部查看本机IP地址、ipconfig、由于IP地址基于数字,不方便,于是便用来代替IP地址,是一个查看对应的IP地址、DNSDNS记录了IP地址和的映射(对应)关系;hosts文件、DNS服务器netstat-常见端80、8080、3306、21、通俗的讲,能够提供某种服务的机器(计算机)1按服务类型可分为:文件服务器、数据库服务器、邮件服务器、Web按操作系统可分为:Linux服务器、WindowsApacheNginxIISTomcatNode2数据库服务器:Oracle、MySQL、PostgreSQL、MSSQL邮件服务器:Postfix、SendmailHTTP服务器:Apache、Nginx、IIS、Tomcat、NodeJS3、http、、即服务器主要提供文档(文本音频)浏览服务一般安装Apache、、PHP、Jsp、Asp、Python、Ruby、Perl具有向服务器索取服务能力的终端,如比如、电脑等,通过安装不同的客户端软件,可以获取不同的服务,比如通过QQ获得即时通讯服务、通过迅雷获得服务等。常见的客户端软件:浏览器、QQ、迅雷、FoxmailC/SC/S工作流程图在C/S结构的情况下,不同的服务需要安装不同的客户端软件,比如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服务解除协议书
- 2025年中级工程师 试题及答案
- 2025年电工专业考试试题及答案
- 2025年妇产科各章节试题及答案
- 2025年电脑中级操作试题及答案
- 2025年新闻人员笔试题目及答案
- 2025年初级sql面试题及答案
- 机油专销协议书
- 2025年专业资格考试试题及答案
- 村企扶贫协议书
- GB/Z 27001-2025合格评定通用要素原则与要求
- 安全用电知识教学课件
- 一例急性胰腺炎患者的个案护理课件
- 免疫接种冷链管理停电应急预案1
- 2025优化企事业单位突发环境事件应急预案备案的指导意见
- GB/T 45341-2025数字化转型管理参考架构
- 小学英语现在进行时练习题含答案
- 2025中石油校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 物业民法典知识培训课件
- 氢气-安全技术说明书MSDS
- 《纸飞机的秘密》课件
评论
0/150
提交评论