無標題文檔

不知不觉已经创造奇迹了

香烟一直都不是一个好东西,本人对此已经 下定了决心 戒烟了的。但是本人的部门里面却偏偏有人(就不点名了)专门收集香烟壳,然后将其搞成一个「堆栈」,每日观赏之。

不好意思,我们都是双精度浮点 Happiness 变量系列的忠实拥护者。相比我 上次的 ,真是惭愧万分(希望本人的软壳没有破坏这完美的风景)。一边废话一边看图,下面是美图几张,绝对的清晰、无码、激情:

https://friable.rocks/_/2007_12_22/1198307851.jpg

https://friable.rocks/_/2007_12_22/1198307825.jpg

https://friable.rocks/_/2007_12_22/1198307837.jpg

翻阅鲜果的排行榜,无知本人已经「忽悠」了广大的网友和鲜果的网站编辑,得到了这个星期的本周的 重点推荐 。本人没有见过「世面」,遂贴图纪念之。

https://friable.rocks/_/2007_12_22/64169589.jpg

小弟无德无能,除了上次说了 鲜果订阅器的优势 以及 RSS 的重要价值 ,然后某人 某人 疯狂的 刷鲜果排名 外,几乎没有什么建树。对于鲜果的如此抬举,本人会继续优秀地「忽悠」下去,再次感谢大家一贯的支持。

圣诞节就要到了,虽然这个节日对于我们国人来说并没有什么特别的地方,不过以这个为借口去「腐败」下也是可以的。按照时间来计算, 连续加班 差不多也已经两个月了,我想那天我们伟大的领导应该能够放行吧。

另,今天是四六级考试,向那些站在前线的同学们表示最崇高的祝愿。

各浏览器的 Javascript 效率对比

从「译言」上的 一篇文章 据悉各浏览器 Javascript 的对比。我个人作为一名「准」的 Javascript 开发者,对此事自然比较的关注。 SunSpider 的测试面我还是保持对其信任的态度的,正如原文所说的「它是一组被精心设计的测试,易于运行也非常全面」。

下面是测试的内容:

  • 3d - 纯粹 JavaScript 的 3D 渲染运算,但并不包含渲染部分。它包含大量的浮点运算和数组操作。
  • access - 数组,对象属性和变量的访问读取。
  • bitops - 位操作,这在游戏、数学运算和多种编码解码中有重要应用。它也是JavaScript中唯一的整数运算。
  • controlflow - 控制流结构 (重复,递归,条件)。目前它主要是递归结构,但其它结构也均被包含。
  • crypto - 真实的加密代码,主要为位操作和字符串操作。
  • date - \"date\"对象性能。
  • math - 多种数学运算类型。
  • regexp - 正则表达式。
  • string - 字符串处理,包括生成一个巨型\"tagcloud\"的代码,解压压缩过的 Javascript 代码等等。

https://friable.rocks/_/2007_12_22/1586815073.jpg

除了上述的对比之外,下面的统计图更能直观的对比各浏览器的性能。

https://friable.rocks/_/2007_12_22/1144012531.jpg

虽然测试所生成的字符串在大部分的生产情况下几乎不可能发生,但我对于 IE 如此低下的运行效率还是颇有微词。排除 IE 最薄弱的字符串操作,本人和原文作者同样的感到惊讶的就是排除字符串的测试, Firefox 的速度并不比 IE 快多少。正如我上次 对 Firefox 3beta 评测中 期待的,我希望它能运行得更快些。

Safari 也是我 一直关注 的浏览器,它在此项的测试中的效率还是感到非常满意的。至于 Opera,看得出原文的作者也给予其非常高的评价,「世界上最快的浏览器」这个称号看来的确名至所归。

总结一下,由于现在国内大部分浏览器市场还是 IE 为主,所以根据上述的测试,特别是对于 Javascript 方面,字符串的操作是尤其要考虑下它的性能的。发现 IE 中 Javascript 的正则的运行效率还是比较的满意的,可能以后如果碰到字符串方方面的操作比较,我会优先考虑使用正则。

最后,推荐继续阅读下 原文链接

深思 PHP 数组遍历的差异(array_diff 的实现)

还是 部门无聊的考题,不过这次考的是 PHP 的能力。题目如下:

给你两个分别有 5000 个元素的数组,计算他们的差集
  -- 说白了也就是用 PHP 和你认为最好的算法实现 array_diff 的算法。

初次接到这个题目,我发现这非常的简单,于是按照以往的经验「随便」写了一个:

function array_diff($array_1, $array_2) {
    $diff = array();

    foreach ($array_1 as $k => $v1) {
        $flag = false;
        foreach ($array_2 as $v2) {
            if ($flag = ($v1 == $v2)) {
                break;
            }
        }

        if (!$flag) {
            $diff[$k] = $v1;
        }
    }

    return $diff;
}

虽然实现是可以的,但是发现这个函数的效率是惨不忍睹。于是我又重新考虑了下,并优化了算法,第二个函数看起来是这个样子的:

function array_diff($array_1, $array_2) {
    foreach ($array_1 as $key => $item) {
        if (in_array($item, $array_2, true)) {
            unset($array_1[$key]);
        }
    }

    return $array_1;
}

嗯,这次几乎可以和原 array_diff 函数的速度媲美了。但是还有没有更优化的办法呢?由 ChinaUnix 上的 一篇文章 (不好意思,作弊了),我发现 PHP 竟然可以这样写:

function array_diff($array_1, $array_2) {
    $array_2 = array_flip($array_2);
    foreach ($array_1 as $key => $item) {
        if (isset($array_2[$item])) {
            unset($array_1[$key]);
        }
     }

    return $array_1;
}

这个函数的效率非常的惊人,甚至比原 array_diff 函数的速度都要快。究其原因,我找到了解释:

因为键是进行 HASH 组织的,查找很快;
而 Value 只是由 Key 组织存放,本身没有索引,每次查找都是遍历。

总结

这虽然是 PHP 语言的一个小窍门,但在遍历和对比数组的值上,如果需要对比值将其与键反转的确比通常的值对值的比较效率要高得多。

比如,上面的函数二需要调用 in_array 函数需要循环判断是否在函数内;而函数三则仅仅判断这个数组是否存在该键就可以了。加上数组键和值不同的组织索引方式,效率比想象的还高那就非常可以理解了。

附,测试连接在 这里打包下载 )。如对 Javascript 数组方面的讨论感兴趣,可以 点击这里

我的照片

您好!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,欢迎您通过 GitHubTwitterInstagram 了解我的更多动态。

本博客原名 Gracecode.com 、现更名 「無標題文檔」「精于心、简于形」以此践行极简、务实的理念。 在工作之外的个人生活方面,我崇尚简单、追求平淡,偶尔也带着一些可能不被所有人理解的幽默感。

同时为避免争议和麻烦,在此郑重声明:本站所有内容为非 AI 生成,所有观点及立场均仅代表我个人,不代表任何我所就职或关联的公司与组织。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章