Hot For Coding
Nginx搭建FLV视频服务器

FLV视频已经是绝大多数视频网站首选的视频类型,国内外著名的视频分享站YouTube、优酷、土豆、新浪博客、IQIYI等等都是Flash播放器播放FLV/MP4视频。

FLV有两种发布方式

  • 普通的HTTP方式 这种方式通常需要预先下载到本地才能播放,有缓冲,但下载后就不会占用服务器资源。
  • 流媒体方式 无需下载,可以实时播放任意拖拽进度,用户体验好但很耗服务器资源。

安装模块

在编译安装Nginx的时候把Flv Stream模块加上

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_flv_module
make && make install

...

READ ALL

小内存VPS服务器Nginx优化

VPS服务器最重要的性能指标就是内存大小,多个VPS服务器可以共享一颗CPU,但不能共享同一块内存。所以VPS的内存越大价格就越贵,但目前市面上也有不少小内存VPS服务器,对于PV不多的站点来说正好适合又不浪费。所以在小内存VPS服务器上适当优化Nginx是最好的优化方案。

只开启一个进程

Nginx每个进程都要耗费内存,可能有10M至15M左右,小内存就只开一个节省内存

worker_processes 1;

开启gzip压缩

对网页文件、CSS、JavaScript等开启gzip压缩,减少数据传输量、减少磁盘I/O、减少内存交换,节省内存提高访问速度。

...

READ ALL

开启Nginx的gzip压缩功能

Nginx的gzip(GNU-ZIP)是一种压缩技术,经过gzip压缩后页面大小可以比原来的35%甚至更小。

full

压缩以后,不仅节省流量,更重要的是提升访问速度。gzip压缩需要浏览器和服务器双方都支持,也就是服务器压缩,浏览器解压。但目前绝大多数的浏览器都已支持gzip类型压缩的解压解析技术,就连被唾弃的IE也都能支持

开启Nginx的gzip功能需要在nginx.conf配置文件的http{...}加入以下代码:

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

...

READ ALL

JavaScript Object.freeze冻结对象

Object.freeze是干嘛用的呢?看看API解释的

Prevents the modification of existing property attributes and values, and prevents the addition of new properties.

就是说把一个对象freeze之后就不能修改存在的属性和值了,就是key value都不能修改,而且也不能添加新的属性

// Create an object that has two properties.  
var obj = { name: "Nicholas", length: 10 }

// Freeze the object.  
Object.freeze(obj)

// Try to add a new property, and then verify that it is not added.   
obj.newProp = 50

console.log(obj.newProp) // Ouput: undefined

...

READ ALL

Linux中ls命令的一个细节

前两天做公司一个项目,需要在一个目录里ls获取所有txt文件列表,这原本是很简单的事情。不久之后,目录里多了一些其它文件,需要使用*号匹配符,结果发现ls获取文件列表使用通配符与不适用通配符是有点小区别的。

不使用通配符

[root@lee ~]# ls -1 /data0/demo/
a.txt
b.txt
c.txt
d.log
e.log
f.php
g.txt
h.log
i.txt

使用通配符

[root@lee ~]# ls -1 /data0/demo/*.txt
/data0/demo/a.txt
/data0/demo/b.txt
/data0/demo/c.txt
/data0/demo/g.txt
/data0/demo/i.txt

...

READ ALL

JavaScript简单模拟HTTP请求比Ajax方便

在JavaScript中,我们发起请求一个URL地址,就算不需要获得请求结果,但是用Ajax请求是最普遍的了。然而,Ajax在跨域上不太方便,但本文不讨论JavaScript跨域问题,只是结合经验给一个技能模拟HTTP请求又不会导致跨域问题的技巧。

原型需求

  • 假设我们访问a.com/index.html
  • 点击页面中的触发按钮会异步请求b.com一个index.php文件并且GET一个值
  • 然后index.php获取这个值并写到t.txt文件中

步骤:

a.com/index.html -> 点击按钮 -> 请求 b.com/index.php?do=hello -> b.com/index.php文件把do的值hello获取写入t.txt文件

...

READ ALL

JavaScript作用域安全构造函数

通常我们定义的构造函数需要new操作符实例调用构造函数,因为只有使用new的时候构造函数内用到的this对象会指向新创建的对象实例,如代码:

/**
 * 作用域安全构造函数
 * Nicholas Lee www.qttc.net
 */
 
// 定义构造函数
function cus (name,age) {
  this.name = name;
  this.age = age;
}
 
var obj = new cus('Nicholas Lee', 2);
 
console.log(obj.name); // Output: Nicholas Lee
console.log(obj.age);  // Output: 2

...

READ ALL

MySQL开启慢查询日志log-slow-queries

一个普通Web站点的页面常常需要查询N条SQL语句后才能得出页面结果,当网站访问速度慢而前端做了大量优化工作以后,数据库瓶颈的查找也是Web优化的一个重要部分。

MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在。

开启慢查询功能

  • log-slow-queries 慢查询日志文件路径
  • long_query_time 超过多少秒的查询就写入日志

打开my.cnf配置文件,加入以下代码:

log-slow-queries = /tmp/mysql-slow.log
long_query_time = 2

...

READ ALL

Nginx负载均衡设置实例

Nginx最大的亮点就是反向代理、负载均衡这一块了,本文将详细讲解Nginx负载均衡的配置。

负载均衡

先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。

测试环境

由于没有服务器,所以本次测试直接host指定域名,然后在VMware里安装了三台CentOS。

A服务器IP: 192.168.5.149 (主)
B服务器IP: 192.168.5.27
C服务器IP: 192.168.5.126

...

READ ALL

JavaScript中stopPropagation函数停止事件传播

JavaScript中的事件默认是冒泡方式,逐层往上传播,可以通过stopPropagation()函数停止事件在DOM层次中的传播

HTML代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>stopPropagation()使用 - Nicholas Lee</title>
  </head>
  <body>
    <button>button</button>
  </body>
</html>

没有加stopPropagation()

var button = document.getElementsByTagName('button')[0];
button.onclick=function(event){
  console.log('button clicked');
};
 
document.body.onclick=function(event){
  console.log('body clicked');
}

// Output:
//  button clicked
//  body clicked

...

READ ALL