本地测试 ELPA 镜像的速度

效果(纵轴为 ELPA。横轴为用时,单位毫秒。Echo Area 显示具体秒数):

可见我这边 Melpa、Melpa 官方镜像、TUNA 都超时(10 秒为 timeout),前两个不意外,TUNA 不知为何,我手动简单试了几次,有时候会卡死,有时又不会(此时也非常快),其它的三个都非常非常快。

代码如下:

  • 用了 Melpa 来测试,大部分 Elpa 包都在这
  • 用了 HTTP,但 HTTPS 应该也都支持
  • 用了 Melpa 的 archive-contents 来测试,大小 1438834 bytes,也就是大概 1.4 M
  • Timeout 为 10 秒

(defun the-fastest-elpa-mirror ()
  (interactive)
  (let* ((urls
          (mapcar
           (lambda (part)
             (concat "http://" part "archive-contents"))
           '("melpa.org/packages/"
             "www.mirrorservice.org/sites/melpa.org/packages/"
             "emacs-china.org/melpa/"
             "mirrors.tuna.tsinghua.edu.cn/elpa/melpa/"
             "mirrors.163.com/elpa/melpa/"
             "mirrors.cloud.tencent.com/elpa/melpa/")))
         (durations
          (mapcar
           (lambda (url)
             (let ((start (current-time)))
               (message "Fetching %s" url)
               (call-process "curl" nil nil nil "--max-time" "10" url)
               (float-time (time-subtract (current-time) start))))
           urls)))
    (chart-bar-quickie
     'horizontal
     "The fastest elpa mirror"
     (mapcar (lambda (url) (url-host (url-generic-parse-url url))) urls) "Elpa"
     (mapcar (lambda (d) (* 1e3 d)) durations) "ms")
    (message "%s" durations)))
7 个赞

这个测速不错,可以放到工具箱里,不知楼主同意不?:smile::smile::smile:

没问题。不过不确定实际有多少参考价值。

嗯,我会多测试下。测试中 https 似乎要慢很多啊

请问 chart-bar-quickie 是什么函数?

我忘记指出要 (require 'chart) 了,Emacs 自带的画直方图的包。

这有个介绍:

3 个赞

竟然还有腾讯源,试试这个.

我这里 163 竟然最快,https 源

新增了一个 sjtu 的镜像,写了更简单的代码测试下:

;; `seq-sort-by', added at Emacs 26.1
(require 'seq)

(defun find-fastest-mirror-for-me ()
  (interactive)
  (pp
   (seq-sort-by
    #'cdr
    #'<
    (mapcar
     (lambda (pair)
       (let ((name (car pair))
             (url  (cdr pair)))
         (cons
          name
          (benchmark-elapse
            (url-copy-file
             (concat url "archive-contents")
             null-device
             'OK-IF-ALREADY-EXISTS)))))
     '((163         . "https://mirrors.163.com/elpa/melpa/")
       (emacs-china . "https://elpa.emacs-china.org/melpa/")
       (sjtu        . "https://mirrors.sjtug.sjtu.edu.cn/emacs-elpa/melpa/")
       (tencent     . "https://mirrors.cloud.tencent.com/elpa/melpa/")
       (tuna        . "https://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/"))))))

我这的结果,单位是秒,除了 Emacs China 其它都很快,请求的是 MELPA 的 archive-contents,大小 1575961 bytes(1.5 MB)

((sjtu . 0.394764)
 (163 . 0.458133)
 (tuna . 0.610646)
 (tencent . 0.906701)
 (emacs-china . 11.395072))

标题我看成了「测试本地 ELPA 镜像」。

> ((sjtu . 0.330665259)
>  (tencent . 1.573982339)
>  (tuna . 3.641799896)
>  (163 . 4.077289204)
>  (emacs-china . 11.039607588))

(require 'benchmark)

1 个赞

在不同的网络环境中,自动选择最快的镜像,不过前提是packages版本做好判断。

现在 emacs-china 确实太慢了。还有一个快的,ustc也不错

因为tuna在教育网,可以用bfsu,公网速度非常快