Node之内存控制
Allocation failed — process out of memory
如果您看到上面的错误,这意味着您的 NodeJS 应用程序内存不足,它消耗的内存超过了分配的内存,最终导致它自行终止。
当应用程序批处理大量数据时,数据处理算法的编写方式使其需要保留堆空间中的对象,直到处理完成。随着处理的进行,应用程序逐渐使用了更多内存,V8也将 将花费更多时间进行垃圾收集以释放未使用的内存,直到最终达到分配给进程的限制并导致了OOM。
Node.js 运行时在内存使的用方面非常高效,因此程序通常使用默认限制运行良好。并且,如果没有主动设置最大堆大小,程序则会使用默认内存限制,并且此默认值也是会根据 Node.js 版本和程序运行的系统架构而有所不同。
下面我们具体了解一下:
1.1 V8的垃圾回收机制与内存限制JavaScript与Java一样,由垃圾回收机制来进行自动的内存管理。对于性能敏感的服务器端程序,内存管理的好坏、垃圾回收状况是否优良,都会对服务构成影响。而在Node中,这一切与V8引擎息息相关。
1.2 V8的内存限制网上大都说,Node中通过JavaScript只能 ...
Svelte之Sapper集成sass语法
基于Svelte的Web框架Sapper为我们提供了很多现成的功能。路由,SSR渲染等等。但是,现在前端项目中不能使用使用Sass或Stylus等预处理器,是一个很不爽的事情,而svelte目前官方暂时真的没将这一块纳入初始模板,那么我们就只能自己动手了。
正文直接使用我集成好的模板12345678# for Rollupnpx degit "KeiferJu/sapper-template-saas#rollup" my-app# for webpacknpx degit "KeiferJu/sapper-template-saas#webpack" my-appcd my-appnpm installnpm run dev & open http://localhost:3000
手动操作以下文章以集成saas(scss)为例,其他的可以自己研究svelte-preprocess这个开源项目。
一. 集成saas预处理器1. 安装依赖模块1npm i -D svelte-preprocess autoprefixer node-sa ...
linux安装回收站
trash-clitrash-cli是一个使用 python 开发的软件包,包含 trash-put、restore-trash、trash-list、trash- empty、trash-rm等命令,我们可以通过这写命令,将文件移动到回收站,或者还原删除了的 文件。
trash-cli的项目地址:https://github.com/andreafrancia/trash-cli
安装trash-cli的安装很简单
对于 Debian/Ubuntu 用户,使用 apt-get 或 apt 命令来安装 Trash-Cli:
1$ sudo apt install trash-cli
对于 RHEL/CentOS 用户,使用 yum 命令来安装 Trash-Cli:
1$ sudo yum install trash-cli
对于 Fedora 用户,使用 dnf 命令来安装 Trash-Cli:
1$ sudo dnf install trash-cli
对于 Arch Linux 用户,使用 pacman 命令来安装 Trash-Cli:
...
Rollup之入门笔记
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验。
为什么使用rollup如果你将项目拆分成小的单独文件中,这样开发软件通常会很简单,因为这通常会消除无法预知的相互影响(remove unexpected interaction),以及显著降低了所要解决的问题的复杂度(complexity of the problem),并且可以在项目最初时,就简洁地编写小的项目。不幸的是,JavaScript 以往并没有将此功能作为语言的核心功能。
而rollup基于ES2015模块的,相比于webpack或Browserify所使用的CommonJS模块更加有效率 ...
Node之版本切换
版本管理目前我们常见的NODE版本管理工具主要有三种,nvm,nvs以及n;
nvm和nvs目前都能做到跨平台,而n作为一个node模块,好像在windos下会有一些问题。
nvm也会在某些版本操作时出现node下载成功,但是npm对应版本下载失败,不知道是否是特例,我自己没有遇到过。
nvs目前来看是在nvm相关经验的基础上开发的,命令相对简单明了,但是项目自动切换命令不能持久化,关闭后在打开得重新输入。
NVMNode版本管理器nvm,可以运行在多种操作系统上。很方便的对Node版本进行切换与管理。
安装Windos最新下载地址:https://github.com/coreybutler/nvm-windows/releases
而这里又有四个可下载的文件。
nvm-noinstall.zip: 这个是绿色免安装版本,但是使用之前需要配置
nvm-setup.zip:这是一个安装包,下载之后点击安装,无需配置就可以使用,方便。
Source code(zip):zip压缩的源码
Sourc code(tar.gz):tar.gz的源码,一般用于*nix系统
MAC OS和LI ...
包管理工具之仓库源管理工具nrm
仓库源管理nrm我们解决了多个版本切换的问题,但是因为一些原因,我们还经常需要切换仓库源地址,比如npm官方源地址和私有npm仓库地址,淘宝源等等。每次使用:
1npm config set registry URL
好像有点麻烦。nrm模块帮你解决问题:
安装
1npm install -g nrm
使用
1nrm ls # 查看可用地址
1nrm use xxx # 切换到某源,例如nrm use cnpm切换到cnpm源地址
1nrm add <name> <url> # 添加某源地址
之后我们使用npm install等命令安装包时其实访问的是我们设定的源地址。
vue之多页面自动化编译
基于vue-cli3的自动化多页面模板,可以各页面独立资源分文件夹编译和原生所有资源统一编译.
大家可以直接使用我改好的初始模板.
自己搭建
创建自动化脚本 在项目根目录创建script文件夹,里面创建两个文件splitBuild.js和getPages.js.
getPages.js12345678910111213141516171819// getPages.js 自动获取目录结构const glob = require('glob')let pages = {}module.exports.pages = function () { glob.sync('./src/pages/*/*.js').forEach(filepath => { let fileList = filepath.split('/') let fileName = fileList[fileList.length - 2] pages[fileName] = { ...
Svelte之跨组件状态管理
svelte中对于组件内的状态管理比较简单,但是如何像其它框架一样进行跨组件间交互呢?
利用props进行状态传递我们首先通过官网APi可以了解到和其它框架一样的传递策略,它们使用props传递状态,从而进行交互。
当一个组件需要与另一个组件共享数据时,可以在组件树中将状态上移,直到这些组件有了一个公共父级。
需要向下传递状态,直到到达需要此状态信息的所有组件为止。
这是使用props完成的,并且我认为这是一种最好的技术,因为它很简单。
Context API在某些情况下props不实用。 例如在组件树中,两个组件之间的距离相当远遥,以至于我们不得不将状态提升到顶级组件。
这种情况下可以使用另一种技,它称为Context,当您希望让多个组件与后代进行通信,但又不希望到处传递props时,这是一种很好的方法。
在Context中设置对象,并将其与键关联:
1234567<script>import { setContext } from 'svelte'const someObject = {}setContext( ...
原生Android的时间TimePicker控件与日期DatePicker控件联动
Android原生控件中时间日期是分开的,但是有时我们的实际工作中可能是需要两个联动选择的,这时就需要我们自己将两个控件组合起来封装了一个工具类.
一. 创建工具类关于控件主题以原生为主,大家可以修改themeId进行对应修改,上图就分别是主题2和主题4.绑定控件直接将TextView类型修改为对应控件对象就行.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172package com.myllcn.specialdeal;import android.annotation.SuppressLint;import android.app.DatePickerDialog;import android.app.TimePickerDialog;import android.content.Context;import android.os.Build;import a ...
ifram下的父子交互事件封装
创建引入全局js1.父页面引入parent.js1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/** * @author DLLCN * @time 2020/8/28 4:57 下午 * @title 应用间事件交互 * @desc * */ window.gos = {event: {}}; gos.event.eventMap = new Map() gos.event.emit = function (eventType, data) { const time = new Date().getTime(); const event = {key: eventType, data: data, timestamp: time} const detail = JSON.stringify(event); localStora ...