NodeJS

nodejs的内存管理,垃圾回收机制

╄→尐↘猪︶ㄣ 提交于 2020-03-25 15:11:40
3 月,跳不动了?>>> 要点记录: 1、网页js、命令行工具, 快进快出的,即时内存泄露,无内存管理必要! 2、服务器端nodejs和其他正规语言一样存在内存泄露。 3、nodejs基于谷歌v8js引擎,速度很快,垃圾回收也是由v8维护的 4、通过查看源码可发现v8中用js使用内存的限制约为:64位-1.4G 32位 -0.7G。这是源于v8的垃圾回收机制的限制,可在node 后加 --max-old|new-space-size=xxx来改变内存限制 5、nodejs进程的内存占用:堆内内存+堆外内存=rss+swap+fs, 其中 v8申请和分配的为堆内内存,所有js实体都是通过堆来分配的。 process.memoryUsage() 可查看常驻内存rss,heapTotal总堆 内存,和已分配的堆内存heapUsed 非V8分配的内存为堆外内存,如 Buffer对象占据的内存,用在网络流和文件流中 os.totalmem os.freemem 可查看系统的总内存和可用 内存 6、v8的垃圾回收算法 统计学知识的应用,按对象存活时间将内存的垃圾回收进行不同的分代,对这些不同的分代分别实施不同的回收算法 v8中将内存主分为新生代 和 老生代 空间,前者存活时间短,后者较长或常驻 7、新生代中活对象较少,采用scavenge-cheney算法:将新生代一分为二,From ->To

NodeJS的Express框架学习笔记(1)

冷暖自知 提交于 2020-03-12 16:46:37
Express介绍: Express 是NodeJS里最好的网站开发框架,性能很不错,并且可以与其它一些框架集成。 下载安装Express npm install -g express 初始化Express项目 mkdir mysite && cd mysite express . 这时候就会发现mysite目录中出现了项目的目录结构,但还需要安装相关依赖包: npm install -d 这时候会下载安装相关的依赖包到当前node_modules目录下,然后可以试下启动这个项目: node app.js 打开浏览器,访问http://localhost:3000,或者直接下面命令: curl http://localhost:3000 结果会出现"Welcome to Express"的信息。 一些细节解释 安装的时候,使用-g 是说安装到全局环境中,而不是当前目录(项目)中。 express命令,-h 参数可以查看帮助,初始化项目时,可以指定是否需要session、所使用的模板框架和CSS框架。 项目初始化完成后,一定要记得安装相关依赖,否则无法运行,报找不到某模块。 修改app.js 配置项目 默认的模板框架是jade, CSS框架是plain css。 Express手册: http://expressjs.com/guide.html 来源: oschina 链接:

Nodejs下的ES6兼容性与性能分析

余生颓废 提交于 2020-03-02 05:00:53
ES6标准发布后,前端人员也开发渐渐了解到了es6,但是由于兼容性的问题,仍然没有得到广泛的推广,不过业界也用了一些折中性的方案来解决兼容性和开发体系问题,但大家仍很疑惑,使用ES6会有哪些兼容性问题。 一、Nodejs下ES6兼容性现状   之前写了es6通过Babel编译后的在浏览器端的兼容性问题 《Babel下的ES6兼容性和规范》 ,随着范围的扩展,ES6在Nodejs上兼容性也有必要重新梳理下。   随着iojs的引入,新版的Nodejs开始原生支持部分ES6的特性,既然ES6在浏览器端使用需要使用babel等编译,在Nodejs总可以放心使用了吧。然而事实并非如此,为此在nodejs端,我也做了特性兼容性研究: ES6新特性在Nodejs下的兼容性列表 这里罗列下nodejs支持的新特性,没列出的新特性均为不支持。 https://iojs.org/en/es6.html https://kangax.github.io/compat-table/es6/ ES6特性 Nodejs兼容性 let,const,块 strict模式支持 class类 strict模式支持 Map,Set 和 WeakMap,WeakSet 支持 generators 支持 进制转换 支持 对象字面量扩展 支持 promise 支持 String对象新API 支持 symbols 支持

12、开源游戏-“胡子”地图绘制和游戏主循环设计

﹥>﹥吖頭↗ 提交于 2020-03-01 14:05:17
在前面中我们初始化了游戏的资源,这次我们来说下地图的绘制和游戏主循环设计。 地图 绘制 以前说过地图是用tiled画好,导出为图片形式的,所以地图的绘制,就是把这个图片绘制到canvas的过程。这样绘制地图就简单了,使用drawImage方法绘制即可。 这里有个2问题,1是地图的大小一般肯定是大于canvas的,所以我们只是把地图的一部分绘制到了canvas上,2是地图的移动。1中的地图的复制位置是根据2中地图的移动距离来确定的。我们的思路如下:记录鼠标移动的xy坐标值,然后根据xy值和 canvas边缘做比较,当靠近边缘时,我们就移动地图一段距离,重复这个过程,直到地图绘制完。 其实我们上面的思路中,就是在改变 drawImage方法的参数过程,那么来看下 drawImage方法: 定义和用法 drawImage() 方法绘制一幅图像。 语法 drawImage( image , x , y ) drawImage( image , x , y , width , height ) drawImage( image , sourceX , sourceY , sourceWidth , sourceHeight , destX , destY , destWidth , destHeight ) image 所要绘制的图像。 这必须是表示 <img> 标记或者屏幕外图像的

06、开源游戏-“胡子”开始界面设计-代码

痞子三分冷 提交于 2020-03-01 13:09:12
项目地址 code.google地址: https://outlaw.googlecode.com/svn/trunk git.oschina地址: https://git.oschina.net/eternal_rider/outlaw 在开始界面中,玩家要选择大当家、游戏类型(单人、多人),还可设置游戏(音乐等)和查看作者信息。 如下图所示: 开始界面设计代码 我们首先引入了jquery库、common.js,styles.css, common.js为处理用户选择的事件; styles.css定义了所有样式。 我们通过样式class来控制div是显示隐藏。 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>胡子-即时战略游戏</title> <script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script> <script src="js/common.js" type="text/javascript" charset="utf-8"></script> <link rel="stylesheet" href="styles.css" type="text/css" media="screen" charset=

09、开源游戏-“胡子”开始游戏前03-总结

穿精又带淫゛_ 提交于 2020-03-01 10:05:51
这几天我们干了很多事,我们总结一下。 首先,设计了游戏的选择界面、操作主界面,虽然很粗糙,但是只要你看了就知道他代表的意思,以后在具体实现时我们会在雕琢一下。 接着,我们做了主页index.html,罗列了很多的div,来实现界面的效果。 最后,我们写了很多的js,来实现不同的功能。 在前面我们细说了每个js的功能,但是如果你注意的话,我们唯独没说其中的game.js,是这个js不重要吗?我们看下他的代码 var game = { init:function(){ }, start:function(){ } } 几乎什么也没有,但它确实最重要的一个js,如果要比的话,我想他应该是大当家(在没有nodejs时),呵呵。其他的js都被它使用,它控制着游戏的逻辑。 开发游戏虽然复杂,但它的原理却出奇的简单,就是循环或者绘制擦除重复这2步,为什么说这个呢?因为胡子的game.js也是这样绘制擦除循环这步,来完成建筑物、车辆、人员、子弹的绘制,这个会在以后具体说明,胡子是一个即时战略游戏,我可以保证胡子不是那种简单的 即时战略,起码也有红色警戒最核心的功能(呵呵,我的目标),就是说他绘制的单位会很多,我们粗略分几类起码有建筑物类、车辆类、兵(人)、资源类、其他类(树木、石头等)等,所以如果用game.js来绘制所有这些,肯定不是一个好的做法。 我本身是是搞java的,java的面向对象

07、开源游戏-“胡子”开始游戏前01

雨燕双飞 提交于 2020-03-01 10:05:33
游戏开始前的各种资源初始化,玩家事件的绑定,信息的本地存储 (这是用了库store虽然自己写也很简单,但这个做了合成,更小)。 开始界面修改 增加了loading场景和游戏主场景(目前为空) <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>胡子-即时战略游戏</title> <link rel="stylesheet" href="styles.css" type="text/css" media="screen" charset="utf-8"> <script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script> <script src="js/store.js" type="text/javascript" charset="utf-8"></script> <script src="js/resourceloader.js" type="text/javascript" charset="utf-8"></script> <script src="js/singlegame.js" type="text/javascript" charset="utf-8"></script> <script src="js

01、开源游戏-“胡子”项目启动

不羁的心 提交于 2020-03-01 10:05:00
如果你看过之前的文章,你就会明白我们什么这么写,如果你没看,也没必要解释了。 开源游戏“胡子”,今天正式开始设计。 “胡子”是一款以html5开发的一款即时战略游戏,即大家说的RTS,可以单人游戏和多人对战。 单人游戏时,故事情节为东北土匪的事。具体故事还在构思中。为什么叫“胡子”那,很简单,东北人把土匪叫“胡子”。我就是东北人 。 下一次我们写写怎么设计这个游戏。 来源: oschina 链接: https://my.oschina.net/u/933274/blog/208569

08、开源游戏-“胡子”开始游戏前02

早过忘川 提交于 2020-03-01 09:43:39
资源加载器 resourceloader.js 初始化 资源加载器用于读取图片和音乐, 在前面的代码( main.js )中,我们初始化了它,下面我们详细说下,因为它在以后中会经常用到,游戏中所有的资源都由它来读取。 $(window).load(function() { resourceloader.init(); sounds.init(); if (resourceloader.loaded){ sounds.bgMusic(); } else { resourceloader.onload = sounds.bgMusic; } if(store.get('data')){ $("#checkbullet").css({"top":store.get('data').checkbullety}); }else{ store.set('data',{hero:"hero1",checkbullety:"160px",task:0}); } }); 资源加载器都干什么事情呢?读取资源,这个是最终我们想要干的事,我们还得考虑下,读取完了之后怎么办?图片也分很多类型,音乐同样如此,常用的.mp3也不是所有的浏览器都能直接播放的,下面是几种流行的音频格式被浏览器支持的情况(来源于网络,未全部测试,也许最新版本中已经有所变化,也说不定)。 虽然可以在<audio