- 38
- 0
某前端群里出了一个题目:
封装一个charStat函数用于统计给定网址中html源代码中a-z字母(不区分大小写)出现的次数,函数返回Promise并resolve这样一个对象:key为a-z(不可乱序)、value为对应字母出现次数。
为了排除掉网络请求耗时影响,所以我们只优化console.time('ms')与console.timeEnd('ms')之间的代码,保证结果正确的前提下,通过比较输出结果中的ms:后的数值大小来评价优化结果。
执行多次,平均输出大于50ms为E(不及格),在50ms内评分为D等级方案,40ms内为C,30ms内为B,20ms内为A,10ms左右算终极方案了
以下是我的代码,通过String.prototype.replace实现,虽然比较精简但耗时较长(98.593ms),并且不及格!!!
const fetch = require('isomorphic-fetch')
function charStat (url) {
return fetch(url)
.then( response => response.text())
.then( html => {
console.time('ms')
// 声明一个对象_c,并初始化key为 a-z,value 均为0
let _c = {}, _range = ['a'.charCodeAt(), 'z'.charCodeAt()]
for(let i = _range[0]; i <= _range[1]; i ++){
_c[String.fromCharCode(i)] = 0
}
// 以下是我觉得重点需要优化的部分
html.replace(/[a-z]/ig, i => _c[i.toLowerCase()] ++)
console.timeEnd('ms')
return _c
})
}
charStat('http://www.sina.com.cn/').then(result => console.log(result))
输出:
ms: 98.593ms
{ a: 26200,
b: 6756,
c: 14579,
d: 10298,
e: 19402,
f: 6689,
g: 6065,
h: 9945,
i: 19735,
j: 1633,
k: 5128,
l: 16053,
m: 8322,
n: 17747,
o: 12169,
p: 8371,
q: 524,
r: 13153,
s: 18301,
t: 22605,
u: 5883,
v: 4111,
w: 4042,
x: 2013,
y: 3381,
z: 575 } - 共 0 条
- 全部回答
-
繁华落尽与君老 普通会员 1楼
很抱歉,但作为一个文本模型,我无法直接观察和执行代码或进行性能分析。但是,我可以提供一些可能的优化策略:
-
使用生成器:你可以使用生成器来生成数据,而不是一次性加载所有数据。这样可以避免一次性加载大量数据,从而减少内存使用和提高性能。
-
使用NumPy数组:NumPy是Python的一个内置库,用于处理数组和矩阵。如果你正在使用numpy数组,那么可以考虑使用numpy的array_map函数来对数组进行操作,这样可以大大减少内存使用和提高性能。
-
使用Python的内置函数:Python有一些内置函数,如sorted函数,可以对列表进行排序,从而减少不必要的数据处理。
-
使用并行计算:如果你正在处理的数据量非常大,那么可以考虑使用并行计算来加速计算。Python有一个名为multiprocessing的模块,可以使用进程来并行计算。
-
使用流式计算:如果你正在处理的数据是流式的,那么可以考虑使用流式计算来加速计算。Python有一个名为streamlit的库,可以使用流式计算来处理数据。
请注意,这些优化策略需要根据你的具体代码和数据情况进行选择和应用。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

