Articles
Articles copied to clipboard
经验文章
MongoDB 是高性能数据,使用的过程中,偶尔还会碰到一些性能问题。MongoDB和其它关系型数据库相比,例如 SQL Server 、MySQL 、Oracle 相比来说,相对较新,很多人对其不是很熟悉,所以很多开发、DBA往往是注重功能的实现,而忽视了性能的要求。其实,MongoDB和 SQL Server 、MySQL 、Oracle 一样,一个数据库对象的设计调整、索引的创建、语句的优化,都会对性能产生巨大的影响。 为了充分挖掘MongoDB性能,现简单总计了以下18条,欢迎大家一起来持续总结完善。 - 文档中的`_id`键推荐使用默认值,禁止向`_id`中保存自定义的值。 > MongoDB文档中都会有一个`_id`键,默认是个ObjectID对象(标识符中包含时间戳、机器ID、进程ID和计数器)。MongoDB在指定`_id`与不指定`_id`插入时 速度相差很大,指定`_id`会减慢插入的速率。 - 推荐使用短字段名。 > 与关系型数据库不同,MongoDB 集合中的每一个文档都需要存储字段名,长字段名会需要更多的存储空间。 - MongoDB 索引可以提高文档的查询、更新、删除、排序操作,所以结合业务需求,适当创建索引。 - 每个索引都会占用一些空间,并且导致插入操作的资源消耗,因此,建议每个集合的索引数尽量控制在5个以内。 - 对于包含多个键的查询,创建包含这些键的复合索引是个不错的解决方案。复合索引的键值顺序很重要,理解索引最左前缀原则。...
## 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 ```js export const bubbleSort = (arr = []) => { let len = arr.length for(let i = 0; i < len - 1; i++){ for(let j...
## Error 实例对象 JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供`Error`构造函数,所有抛出的错误都是这个构造函数的实例。 ``` var err = new Error('出错了'); err.message // "出错了" ``` 上面代码中,我们调用`Error`构造函数,生成一个实例对象`err`。`Error`构造函数接受一个参数,表示错误提示,可以从实例的`message`属性读到这个参数。抛出`Error`实例对象以后,整个程序就中断在发生错误的地方,不再往下执行。 JavaScript 语言标准只提到,`Error`实例对象必须有`message`属性,表示出错时的提示信息,没有提到其他属性。大多数 JavaScript 引擎,对`Error`实例还提供`name`和`stack`属性,分别表示错误的名称和错误的堆栈,但它们是非标准的,不是每种实现都有。 - **message**:错误提示信息 - **name**:错误名称(非标准属性) - **stack**:错误的堆栈(非标准属性) 使用`name`和`message`这两个属性,可以对发生什么错误有一个大概的了解。 ``` if...
对很多人来说,组件已经成为他们开发工作中的核心概念。组件提供了一种健壮的模型,允许我们用一个个更小的更简单的封装好的部件来搭建出复杂的应用程序。组件的概念在 Web 上已经存在一段时间了,比如在 JavaScript 生态的早期,Dojo Toolkit 已经在它的 Dijit 插件系统里面应用了组件这个概念。 现代框架比如说 React、Angular、Vue 和 Dojo 进一步把组件放在开发的前列,并作为核心要素用在它们自己的框架结构上。然而,虽说组件结构变得越来越普遍,但是各种各样的框架和库也衍生出一个纷繁复杂、四分五裂的组件生态。这种分裂常常将一些团队钉死在某个特定的框架上,哪怕时间、技术的更迭也不会轻易地改变。 解决这种割裂的形势,让 Web 组件模型统一化,这项工作已经在努力推进中。最早的努力当数 “Web Component” 规范说明 [circa 2011](https://link.juejin.im?target=https%3A%2F%2Fgithub.com%2Fw3c%2Fwebcomponents%2Fcommits%2Fgh-pages%3Fafter%3D0625cf4c42785aa1202a9d0daed182e12466aa29%2B1889) 的出现,并在同年的 [Fronteers Conference](https://link.juejin.im?target=https%3A%2F%2Ffronteers.nl%2Fcongres%2F2011) 大会上由 Alex Russell 将之宣之于众。该 Web...
npm v5.2.0引入的一条命令(npx),引入这个命令的目的是为了提升开发者使用包内提供的命令行工具的体验。 举例:使用`create-react-app`创建一个react项目。 老方法: ``` npm install -g create-react-app create-react-app my-app ``` npx方式: ``` npx create-react-app my-app ``` 这条命令会临时安装 `create-react-app` 包,命令完成后`create-react-app` 会删掉,不会出现在 global 中。下次再执行,还是会重新临时安装。 npx 会帮你执行依赖包里的二进制文件。 举例来说,之前我们可能会写这样的命令: ``` npm i...
# JavaScript 浮点数运算的精度问题 在使用JS发现某些浮点数运算的时候,得到的结果存在**精度问题**:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.6000000000000005等等。 什么原因造成了这个问题?实际上是因为计算机内部的信息都是由**二进制方式**表示的,即0和1组成的各种编码,但由于**某些浮点数没办法用二进制准确的表示出来**,也就带来了一系列精度问题。当然这也**不是JS独有的问题**。 **以0.1+0.2为例**,理解**浮点数的运算方法**,如何**规避**这个问题。 ## 计算机的运算方式 ### 如何将小数转成二进制 **① 整数部分:**除2取余数,若商不为0则继续对它除2,当商为0时则将所有余数逆序排列; **② 小数部分:**乘2取整数部分,若小数不为0则继续乘2,直至小数部分为0将取出的整数位正序排列。(若小数部分无法为零,根据有效位数要求取得相应数值,位数后一位0舍1入进行取舍) **利用上述方法,我们尝试一下将0.1转成二进制:** 0.1 * 2 = 0.2 - -...
## stopImmediatePropagation、Event.initEvent()、element.dispatchEvent(event)简单记录 #### 创建和触发 events Events 可以使用 Event构造函数 创建如下: ``` var event = new Event('build'); // Listen for the event. elem.addEventListener('build', function (e) { ... }, false); // Dispatch the...
缓存一直以来作为性能优化的一环被广泛使用, - 数据库缓存 - 代理服务器缓存 - CDN 缓存 - 浏览器缓存 等等,几乎在每一层,都有缓存存在。本篇博客讨论的不是上面这些缓存,而是由我们自己控制的缓存,具体来说是「请求」的缓存,如何优化请求的缓存让我们的应用更好。 ## 一、需要缓存吗? ### 1、减少不必要的请求 在我们的应用中,会存在一些很少改动的数据,但这些数据又要从后端获取。 典型的如下拉框的内容,可以是行业、职业、角色等等,这类数据在很长一段时间内都是不会改变的,至少在应用的使用过程中是不会改变的,而我们却在每次打开页面或者是切换页面时,就重新向后端请求了一次,这类请求完全是没有必要的,通过对类请求的数据进行缓存,可以大大减小对服务器的压力。 ### 2、更快的访问速度 在访问一些数据时,不再重新向后端请求,而是直接使用缓存中的数据,访问速度毫无疑问会更加快,用户体验也必然会更好。 ## 二、哪些数据可以缓存? 在单页面应用中,所有数据来源都是接口请求,但并不是所有数据都需要,或者说能被缓存。 > 讨论的都是`GET`请求,`PUT`、`POST`等绝对是不能被缓存的。 判断标准是根据请求的频次,这里给出不同请求频次的定义,「高频」、「中频」、「低频」。 - 高频:通过交互就可以请求的数据,如查询接口 - 中频:页面切换时才会请求的数据,如页面数据...
- 作者: [JSON-RPC工作组](https://groups.google.com/forum/#!forum/json-rpc)< [email protected] > - 原文链接: - 翻译: [leozvc](http://geekdream.com/) < [email protected] > ## 1.概述 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用[JSON](http://www.json.org/)([RFC 4627](http://www.ietf.org/rfc/rfc4627.txt))作为数据格式。 它为简单而生! ## 2.约定 文档中关键字"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"和 "OPTIONAL" 将在[RFC 2119](http://www.ietf.org/rfc/rfc2119.txt) 中得到详细的解释及描述。 由于JSON-RPC使用JSON,它具有与其相同的类型系统(见[http://www.json.org](http://www.json.org/)或[RFC...
# HTTP请求中的Form Data与Request Payload的区别 前端开发中经常会用到AJAX发送异步请求,对于POST类型的请求会附带请求数据。而常用的两种传参方式为:Form Data 和 Request Payload。 [](http://img.pfan123.com/29163614.jpg) [](http://img.pfan123.com/291.jpg) ## GET请求 使用get请求时,参数会以key=value的形式拼接在请求的url后面。例如: ``` http://m.baidu.com/address/getlist.html?limit=50&offset=0&t=1502345139870 ``` 但是受限于请求URL的长度限制,一般参数较少时会使用get请求。 ## POST请求 当参数数量较多,且对数据有一定安全性要求时,会考虑用post请求传递参数数据。POST请求的参数数据是在请求体中。 #### 方式一: Form Data形式 当POST请求的请求头里设置Content-Type: application/x-www-form-urlencoded(默认), 参数在请求体以标准的Form Data的形式提交,以&符号拼接,参数格式为key=value&key=value&key=value… [](http://img.pfan123.com/ca3fc.jpg)...