• 开启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对象会指向新创建的对象实例,如代码:

    /**
     * 作用域安全构造函数
     * 琼台博客 www.qttc.net
     */
     
    // 定义构造函数
    function cus (name,age) {
      this.name = name;
      this.age = age;
    }
     
    var obj = new cus('琼台博客', 2);
     
    console.log(obj.name); // Output: 琼台博客
    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()使用 - 琼台博客</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

  • 如何找出PHP配置文件php.ini的路径?

    近来,有不博友问php.ini存在哪个目录下?或者修改php.ini以后为何没有生效?基于以上两个问题,我觉得有必要教一下刚接触PHP的博友们如何找到PHP调用php.ini的路径目录。

    一般安装PHP环境无非有两种平台,Linux环境下与Win平台下。而WIN平台居多,因为现在套装安装包非常方便,如appserv、wamp一件安装包等等。而Linux下也有LNMP一键安装包,非常方便。由于这些安装做了简化,所以自然的许多博友就不太清楚环境安装好了以后php.ini放在哪个目录下,或者在某个目录下找到了php.ini文件但不知是否是PHP程序调用的那个。

    ...

    READ ALL

  • MySQL存储引擎MyISAM特性

    MySQL的默认存储引擎MyISAM一直都是MySQL非事务存储引擎的最佳选择。它在性能和可用特征之间,提供一种良好的均衡性,如全文索引、压缩、空间函数。MyISAM仅支持表锁,不支持行级锁。

    加锁与并发

    MyISAM对整张表加锁,而不是行。读取程序在需要读取数据时,在所有表上都可以获得共享锁(读锁),而写入程序可以获得排它锁(写锁)。用户在执行查询select语句时,可以同时在一张表内插入新数据,这也称读写并发,这是一个非常有用的特性。

    数据加密

    这个还是有点用的,特别是敏感数据

    B-tree索引

    由于B-Tree的特性,在B-Tree中按key检索数据的算法非常直观, 首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针,前者查找成功,后者查找失败

    ...

    READ ALL