• JavaScript判断一个值是否在数组中

    在JavaScript中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数。但我们可以写一个类似in_array()函数来判断是一个值否在函数中。

    /**
     * JavaScript判断一个值是否在数组中
     * 琼台博客 www.qttc.net
     */
     
    // 定义一个判断函数
    var in_array = function(arr){
      // 判断参数是不是数组
      var isArr =  arr && console.log(
        typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.join(','):'an empty array': arr.constructor: typeof arr 
      );
    
      // 不是数组则抛出异常
      if(!isArr){
        throw "arguments is not Array"; 
      }
    
      // 遍历是否在数组中
      for(var i=0,k=arr.length;i<k;i++){
        if(this==arr[i]){
          return true;    
        }
      }
    
      // 如果不在数组中就会返回false
      return false;
    }
     
    // 给字符串添加原型
    String.prototype.in_array = in_array;
    // 给数字类型添加原型
    Number.prototype.in_array = in_array;
     
    // 声明一个数组
    var arr = Array('blue','red','110','120');
     
    // 字符串测试
    var str = 'red';
    var isInArray = str.in_array(arr);
    console.log(isInArray);  // Output: true
     
    // 数字测试
    var num = 119;
    var isInArray = num.in_array(arr);
    console.log(isInArray);  // Output: false
    

    ...

    READ ALL

  • 360搜索与百度搜索竞争

    前些日子姚晨主演的《搜索》刚火热上映不久,360就正式推出360搜索,虽然刚推出一周的时间,但从数据量来看貌似已对百度构成未知竞争。

    昨天百度知道开始对360网址导航导入的搜索流量做提示,试图引导用户把百度设为首页。360网址导航已经连夜将原本的百度问答搜索替换为360自己的奇虎搜索。

    上周四360推出的综合搜索引发各方关注。昨天起,360自主搜索引擎替换谷歌,成为360网址导航(hao.360.cn)的默认搜索引擎。在一些版本的360浏览器搜索框中,360搜索也已经被设置为默认搜索引擎。

    来自多家网站的数据显示,虽然360搜索刚刚上线几天,但已经显露出强劲的流量增势。科技资讯网站“站长之家”和手机交流社区“安卓论坛”公布的数据显示,360搜索已经成为超过搜狗,成为仅次于百度的第二大流量来源。

    ...

    READ ALL

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

    /**
     * 作用域安全构造函数
     * 琼台博客 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