下雪天开车油耗高js为什么耗CPU

- Powered by
- Theme by CreeKoo - Modified by
站点托管于马云他家的ECS - 七牛云储存提供非结构化数据存储服务 - 百度存云加速提供坑爹CDN - 赣ICP备号-4 -
加载中……记一次 Node.js 应用内存暴涨分析
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
| 时间 2016 |
作者 红领巾 ]
之前 TMS 在运行时 CPU 中占用率和内存占用一直很高,导致应用运行状态不是很良好,需要频繁重启。经过排查,找出了部分原因:
使用的 html-minifier 模块有问题,如果输入的内容是一个有错误的 HTML 结构,会使解析进入死循环,导致 CPU 占用率 100%。
在使用 vm 模块时,使用姿势错误,导致内存占用无法释放,使内存占用暴涨。
第一个问题我们今天不予讨论,主要来说一下第二个问题。
VM(Virtual Machine) 模块
我们就先了解下 VM 这个模块。
从它的名字和暴露的 API 可以看出,它能创建一个拥有指定上下文的运行环境,可以在里面直接运行
代码,类似 eval 。这样运行代码时,不会污染当前作用域,一旦出问题,也不会对当前环境造成很大影响。
虽然这个模块我们平时用的比较少,但它算是 Node.js 的核心模块,在 require 的实现中,你会发现它的身影。我们在使用 Node.js 时,会使用 require 引入很多外部模块,对于 Node.js 来说,我们引入的代码如果直接和运行环境交互,是十分危险的。所以在 Node.js 模块加载的过程中,会先将 .js 文件的内容进行包裹,变成类似 function(...) {}(...) 的形式,然后使用 vm.runInThisContext 去运行,同时将 module、require 等方法传入返回的函数中。具体的模块加载机制,可以在 lib/module.js 中看到实现,不是本文重点,就不细说了。
当然,我们也可以用它来执行我们的代码:
const vm = require('vm');const code = 'result = 2 *';const script = new vm.Script(code); // 预编译后供之后使用const sandbox = { n: 5 };const _sandbox = { n: 10 };const ctx = vm.createContext(_sandbox); // contextify// 供 runInThisContext 使用global.result = 0;global.n = 16;// 在当前上下文运行,32vm.runInThisContext(code);script.runInThisContext();// 在新的上下文中运行,10vm.runInNewContext(code, sandbox);script.runInNewContext(sandbox);// 在执行上下文中运行,20vm.runInContext(code, _sandbox);script.runInContext(_sandbox);
在 TMS 中,需要压缩用户上传的代码,出于安全和稳定的考虑,需要和当前运行环境进行隔离,这里就可以使用 VM 模块。为了便于理解,简化了一个类似的 Demo,如下:
// fibonacci,计算斐波纳挈数列http.createServer(function(req, res) { let sandbox = { fibonacci: fibonacci, number: 10 }; vm.runInNewContext('a = fibonacci(number)', sandbox); res.end();}).listen(8999, '127.0.0.1');
运行 Demo。为了模拟实际环境中的并发,这里我们使用 ab 来发起请求。
ab -n 1000 -c 100 http://127.0.0.1:8999/
Apache HTTP server benchmarking tool,简称 ab,是一个常用的开源网站压力测试工具, 官网 。
在运行期间,我们使用 top 来观察内存的占用情况。
可以发现一些问题,
内存占用暴涨,大约 800M
占用的内存在运行结束(没有请求)后,释放很慢
Demo 应用比较简单,引发的问题不大。但如果在实际的应用场景中,一旦发生内存占用过高,无法分配内存空间的情况,会对应用稳定性照成很大影响,甚至导致应用崩溃。
接下来,我们再看一个例子,将上面的代码稍作修改,如下:
let sandbox = { fibonacci: fibonacci, number: 10};
本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
排队的时候你会发现一个规律:另一排总是动的比较快,当你换到另一排,你会发现,你原来站的那一排就开始动的比较快了。你站的越久,越可能感觉自己是站错了排。这就是神奇的墨菲定理。所以,不让自己后悔的最好办法,就是坚持。坚持你的人生梦想,而不去张望别人并受之影响。坚信自己当下的选择,不犹疑,不浮躁,心怀梦想,务实前行!相信成功就是将别人坚持不下来的事情坚持做下去。
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.net这是一篇几个月前转发量特别大的博文:Node.js闪耀点是:它是一个基于WebSocket推送技术的实时web应用程序。为什么说这和革命性有关?在过去的20多年内无状态Web都是基于无状态的请求 - 响应范式,今天我们终于有了实时且双向的连接的Web应用。在NodeJS中,客户端和服务器互相发起通信,使他们能够自由地交换数据。与此形成鲜明对比的是典型传统的web响应模式,客户端总是要先启动通信,此外,NodeJS是基于标准端口80以及开放的网络协议栈(HTML,CSS和JS)上运行。可能有人会说,我们已经有Flash和Java等多种形式的小程序,但在现实中,那些将Web作为传输协议传递到客户端的技术只是一种沙盒环境。此外,他们在运行隔离和操是经过非标准端口,这可能需要额外的权限和处理。NodeJS它的真正意义是,它不是银弹,不一定是那种将主导Web开发的世界的平台。相反,它是符合特别需要的一个平台。当然你不要希望使用Node.js作为CPU密集型操作,事实上,使用它进行繁重的计算将撤销其几乎所有的优点。NodeJS的真正的亮点是build一个可扩展的网络应用程序速度很快,因为它能够处理庞大的高吞吐量,这意味着高可扩展性的同时在线连接数。Nodejs引擎的工作原理是相当有趣的。相对于传统的网络服务技术,每个连接(请求)生成一个新的线程,占用了大量系统内存,最终可能耗尽所有可用的RAM内存。Node.js运行是一个单线程,使用非阻塞I/ O调用,能支持数以万计的连接(在事件循环持有)。快速计算:假设每个线程可能需要2 MB内存,如果运行8 GB的RAM上,最大理论值4便是000个连接,加上线程之间的上下文切换成本。这就是使用传统的网络服务技术的情况。而 Node.js可扩展性水平是能够达到1M以上连接(作为一个证明了概念) 。有一个问题,所有客户端共享的请求之间使用的是单个线程,它是Node.js应用程序的一个潜在的缺陷。大量的计算可能暂停这个单线程,造成的问题可能影响所有客户端(后面将详细讨论)的请求,直到这个繁重计算完成或被阻止。其次,开发人员需要非常小心,不要让一个Exception例外跑出Node.js的事件循环核心(最顶层) ,这将导致Node.js的实例终止(有效的程序崩溃) 。用来避免异常向上冒泡到表面的技术是将错误作为回调函数传递给调用者,而不是像在其他环境中抛出他们。即使一些未处理的异常冒泡了,也有多个模式可用于监视节点,并执行一个崩溃的实例所需的恢复工作(虽然你将无法恢复用户的会话) ,最常见的是Forever模块,或者采用不同的方法与外部系统工具upstart和monit。
NPM是一组公开的,可重用的组件,可通过在线存储库方便安装,具有版本和依赖管理。封装模块的完整列表可以在网站https://npmjs.org/查询,或使用NPM CLI 工具自动获取,任何人都可以发布自己的模块。一些最流行的NPM 模块: Express.js ,Node.js的一个Sinatra风格的Web开发框架,成为事实上的标准。connect连接 - 是Node.js的一个可扩展的HTTP服务器框架,提供了被称为中间件高性能的“插件”的集合,可作为Express的基础。 socket.io和sockjs - 是两种最常见的WebSockets组件。Jade翡翠 - 一个广受欢迎的模板引擎,灵感来自HAML,成为Express.js默认配置。MongoDB和mongojs - MongoDB提供的API。Redis客户端库。CoffeeScript - CoffeeScript编译器允许开发人员使用Coffee来写自己的Node.js程序。underscore (lodash, lazy) - 在JavaScript中最流行的实用程序库,与Node.js打包使用,承诺通过采取略有不同的实现方法更好的性能。forever - 让您的Node.js在生产中避免任何意外故障。
Chat聊天:虽然实时应用程序是Node.js真正的亮点,也自然地适合于DB对象(如MongoDB)暴露数据。 JSON格式的数据允许Node.js无需任何引发阻抗不匹配的数据转换(JSON是天然Javascript)。例如,如果你正在使用Rails,你需要实现JSON与二进制模型转换,使用Node.js可以非常简单直接地暴露你的JSON对象,提供消费客户一个REST API。此外,如果从数据库中读取或写入时(MongoDB)您不必担心JSON和其他任何转换之间。总之,你可以通过使用一个统一的数据序列化格式,实现跨客户端以及服务器和数据库,从而避免多次转换。如果您需要一个高访问量,你的数据库可能成为瓶颈。诚如上文所述, Node.js可以轻松地处理连接。但由于数据库访问是一个阻塞操作(在这种情况下) ,因为麻烦在于在数据被真正写入到数据库中之前要得到客户端确认,这时我们力求避免客户端并不需要对数据写入成功进行确认,那么NodeJS将十分有用。比如最终一致性(经常在世界中使用)如果是可以接受的。数据写入是通过某种或消息队列基础设施的排队(如RabbitMQ的, ZeroMQ ),然后再通过一个单独过程批量写入数据库。这些方式下都能够获得更高的吞吐量。
最佳分辨率
OpenSource
Code & 2002-20js+canvas实现网页下雪效果代码 - 素材家园
当前位置: >
> js+canvas实现网页下雪效果代码
js+canvas实现网页下雪效果代码,当雪花碰到网页中的元素时会出现雪花堆积效果~
大家都在下载
这些是最新的
素材家园免费素材网插件描述:jquery雪花飘落
==========以下内容由会员&&提供================1.引入样式表:&link&href=&css/jq22.css&&rel=&stylesheet&&type=&text/css&&/&2.引入js:&script&src=&js/snow.js&&&/script&3.调用函数产生雪花&script&createSnow('',&6);&/script&背景颜色设置为深色即可看到效果
相关插件-动画效果
讨论这个项目(20)回答他人问题或分享插件使用方法奖励jQ币
我也碰到,求怎么解决
请问雪下到一半要怎麽让它下到浏览器最底.....
我觉得可以给雪花加一个点击事件,然后直接跳到最底
手机浏览器卡是因为这里让雪花移动是设置top和left值,大部分浏览器修改这个都会卡的,所以改成css3动画就行了,这个插件计算移动值和真正 移动雪花是分成两个函数的,所以很好改,赞一个
不,不要修改top和left了,修改tramsform会好很多
单修改tramsform 好吗??
能不能停止效果 , 清除雪花
removeSnow()
good time。0
下10秒后怎么让雪花消失
removeSnow()
其他啊问题都能修改代码解决,唯一没办法的是在手机上大多浏览器会很卡!
雪花的图片路径在什么地方,如何在框架中引用
压缩包根目录下面就是,snow0.gif,总共有4个
2014_暮城0
微信上无法显示
背景图片通过修改css样式,请确定你修改的css属性和对应的样式是正确的。
插件为啥不能改背景图片
祢、别骗莪?0
在css里面看看
PROMULGATOR
关注作者 (112)
收藏此插件 (45)
我当前jQ币余额:正在获取..
已下载次数:2831
所需jQ币:0

我要回帖

更多关于 js下雪效果 的文章

 

随机推荐