我们一起来做一道 JS 题目:在控制台打印 React 仓库的 Fork 列表

2017-07-11 13:34:36 +08:00
 bw2

要求


获取当前页面已 Fork 的成员列表,存储在数组。代码短,耗时少者更佳。返回数组长度应该是 1000。

地址

https://github.com/facebook/react/network/members

示例代码


// 时间和函数长度统计

function timeAndLengthCount(callback){
  const timeStart = new Date().getTime()
  callback()
  const timeEnd = new Date().getTime()
  console.log('Time: ' + (timeEnd-timeStart) + 'ms')
  console.log('Len: '+ callback.toString().length)
}

// 执行输出 Fork 成员列表的函数
// Time: 7ms
// Len: 223

timeAndLengthCount(()=>{
  const forkedMenber = document.querySelectorAll('.repo > a:nth-child(odd)');
  const forkedMenberList = [];
  [].forEach.call(forkedMenber, z => forkedMenberList.push(z.innerHTML));
  console.log(forkedMenberList);
})

接下来就是开始你的表演了

4581 次点击
所在节点    程序员
47 条回复
colorwin
2017-07-11 15:19:51 +08:00
你们的电脑的真好....我的古董机跑你们的代码要慢 5s 以上...
iiji86
2017-07-11 15:22:56 +08:00
[...document.querySelectorAll('img+a')].map(_=>_.text)
colorwin
2017-07-11 15:23:44 +08:00
同时也很不稳定啊, 同一段代码最慢有 24, 快的有 11
ctsed
2017-07-11 15:57:39 +08:00
network.innerHTML.match(/@[^"]*/g).join().split('@').slice(2) 5ms 61

[...network.querySelectorAll('img+a')].map(_=>_.text) 1ms 53
bw2
2017-07-11 15:58:24 +08:00
厉害了,最新记录是 @crs0910
Time: 1ms
Len: 87

document.querySelector('#network').textContent.split(/\s*\/\s*react\s*/g).splice(1)
bw2
2017-07-11 15:59:57 +08:00
@Wangxf 我这边测试是 2ms,我的电脑还是要差一点
bw2
2017-07-11 16:01:39 +08:00
@colorwin 该升级配置了
bw2
2017-07-11 16:04:34 +08:00
@iiji86 我怎么就没有想出这么好的操作
Time: 2ms
Len: 58
bw2
2017-07-11 16:06:51 +08:00
@ctsed network.querySelectorAll ?
jun0205
2017-07-11 16:13:56 +08:00
[...document.querySelectorAll('.network-tree ~ a:not(:last-child)')].map(el=>el.text)
ctsed
2017-07-11 16:18:29 +08:00
network.innerText.split(/\s*\/\s*react\s*/g).splice(1)
2ms 50
ctsed
2017-07-11 16:20:47 +08:00
network.innerText.split(/ \/ react\s*/g).splice(1)

48
ctsed
2017-07-11 16:23:01 +08:00
其实控制台用$$也可以
[...$$('img+a')].map(_=>_.text)
cain
2017-07-11 16:28:42 +08:00
时间统计可以用 window.performance.now() 代替获取时间的方法
bw2
2017-07-11 16:57:11 +08:00
@ctsed 还有这种操作

Time: 2ms
Len: 35
bw2
2017-07-11 16:58:48 +08:00
@ctsed 请问为什么输入 network 可以直接访问到对应的节点,输入 start-of-content 却访问不到 id 为 start-of-content 的节点
bw2
2017-07-11 17:00:20 +08:00
@cain 这个方法很赞
bw2
2017-07-11 17:03:13 +08:00
@jun0205 花式选择器 get

Time: 1.8699999991804361ms
Len: 89
simo
2017-07-11 17:06:48 +08:00
看完回复,再也不想干前端了
ctsed
2017-07-11 17:14:44 +08:00
@bw2 - 被解析后当作减法执行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX