zoukankan      html  css  js  c++  java
  • openresty性能优化 -- table相关优化

    最近一直在做openresty相关开发,使用lua优化,优化了几次,发现最大的优化是table的优化。
    table优化的大原则是尽量少创建表,表创建多了毕竟耗性能。这里的创建,指新创建和扩表引起的创建。在往table插入数据的过程中,如果table不够用,会扩大两倍,所以,一个1030项数据,会经过十次扩表,非常消耗性能。

    方法一,代码层面重用表

    原始代码:

    for i, 100 do
          local a = {}
          a.num = i
          a.result = "test"
          ngx.say(table.concat(a))
    end
    

    里面有多次创建表,但其实可以补创建那么多次,改为

    local a = {}
    for i, 100 do
          a.num = i
          a.result = "test"
          ngx.say(table.concat(a))
    end
    

    方法二,使用table.new

    table.new()是luajit新加的功能,可以在创建table的时候,指定table的大小,避免扩表操作

    local new_tab = require "table.new"
    local t = new_tab(100, 0)
    for i = 1, 100 do
          t[i] = i
    end
    

    方法三,使用table 池

    table.new对应的有一个table.clear函数,用于清空表,所以可以封装一个table池,循环使用这些table,减少table创建

    local tablepool = require "tablepool"
    local tablepool_fetch = tablepool.fetch
    local tablepool_release = tablepool.release
    
    
    local pool_name = "some_tag" 
    local function do_sth()
         local t = tablepool_fetch(pool_name, 10, 0)
         -- -- using t for some purposes
        tablepool_release(pool_name, t) 
    end
    
  • 相关阅读:
    几种常见的软件架构
    路由事件
    PathAnimation
    String、Brush、Color 相互转换
    Sql 使用备份还是使用脚本
    WPF 路由事件
    WPF之复杂形状控件
    WPF之鼠标滑动切换图片
    WPF之基于路径的动画
    WPF之自定义控件
  • 原文地址:https://www.cnblogs.com/shenlinken/p/14259624.html
Copyright © 2011-2022 走看看