独书先生 Menu

All items for 4月, 2019

js比较Map集合取值和Array循环取值的速度差异

问题

js新的数据类型Map集合,具有数组和对象的优点,不清楚Map的同学,先移步 ES6之Map的用法
但是在使用set方法取值的时候,是否比使用数组的循环取值要快呢?理论上来说,直接取key/value是高性能的,如果在不探究深层次js解析机制的情况下,我们可以通过简单的测试函数来打印出Map取值和for循环的性能比较。

代码

let arr=[];
let arrLength = arr.length = 10000;
for(let i=0;i<arrLength;i++){
    arr[i] = i //arr为一个长度为10000的数组,0-10000
}

let m = new Map()
for(let j=0;j<arrLength;j++){
    m.set(arr[j],arr[j])//m为一个长度为10000的Map集合,key:0-10000,value:0-10000
}



//以下开始比较运行时间/
let rs = arrLength-1;
//取10000次的Map,统计时间
console.time();
for(let c=0;c<arrLength;c++){
    m.get(rs)
}

console.timeEnd();

//取10000次的arr,统计时间
console.time();
for(let c=0;c<arrLength;c++){
    arr.some((c,i,a)=>{ //数组只能用
        return  i == rs
    })
}
console.timeEnd();

结果

default: 1.3701171875ms
default: 3215.39013671875ms

分析

可以看到,Array.some在最大的循环次数下,比Map取值满了2000多倍;
实际工作场景中,取随机key的情况下,也有大概100倍至200倍的速度差异;
即使每次数组取得第一个元素不用“循环”,也有10倍的性能差异,将上述代码中let rs = arrLength-1;改成 let rs = 0;即可体验到。

而且在现在流行各大前端框架中,Map集合是可以被循环渲染到HTML模板中的,类似于 let item of items 此种用法一样对Map集合有效,所以可以放心使用。

原文:https://appsoftea.com/zh/javascript-map-set-vs-array-loop/

微信自动定时发送消息python

Step1: 使用pip安装依赖包:

pip install wxpy
pip install requests

Step2: 编写sentWechatMessage.py文件

from __future__ import unicode_literals
from threading import Timer
from wxpy import *
import requests
import random
bot = Bot()
# linux执行登陆请调用下面的这句
#bot = Bot(console_qr=2,cache_path="botoo.pkl")
def get_news():

    """获取金山词霸每日一句,英文和翻译"""
    url = "http://open.iciba.com/dsapi/"
    r = requests.get(url)
    content = r.json()['content']
    note = r.json()['note']
    return content, note

def send_news():
    try:
        contents = get_news()
        # 你朋友的微信名称,不是备注,也不是微信帐号。
        my_friend = bot.friends().search('A LUCKY MOMENT')[0]
        my_friend.send(contents[0])
        my_friend.send(contents[1])
        my_friend.send(u"哈哈哈哈哈")
        # 每86400秒(1天),发送1次
        t = Timer(10, send_news)
        # 为了防止时间太固定,于是决定对其加上随机数
        # ran_int = random.randint(0,100)
        # t = Timer(86400+ran_int,send_news)

        t.start()
    except:

        # 你的微信名称,不是微信帐号。
        my_friend = bot.friends().search('@润泽@')[0]
        my_friend.send(u"今天消息发送失败了")

if __name__ == "__main__":
    send_news()

Step3: 执行py文件

python sentWechatMessage.py

参考自https://blog.csdn.net/qq_29027865/article/details/81488654,感谢!