僕はWordPressでこのサイトを運営していますが、その大きな理由としてorg-modeで原稿を書けるということがあります。
org-modeでWordPressの原稿を書くにはorg2blogパッケージを使うのですが、最近ログインにめちゃくちゃ時間がかかります。
今までずっと我慢してきましたが、たまらなくなったので原因を究明しました。
org2blogのログインは M-x org2blog/wp-login コマンドで、以下のようになっています。
(defun org2blog/wp-login (&optional blog-name) "Logs into the blog. Initializes the internal data structures." (interactive) (if (not org2blog/wp-blog-alist) (error "Set `org2blog/wp-blog-alist' to be able to use org2blog.")) (let () (setq org2blog/wp-blog-name (or ;; Use the provided name blog-name ;; OR Use the only entry in alist (and (equal (length org2blog/wp-blog-alist) 1) (car (car org2blog/wp-blog-alist))) ;; OR Prompt user (completing-read "Blog to login into? ([Tab] to see list): " (mapcar 'car org2blog/wp-blog-alist) nil t))) (unless (> (length org2blog/wp-blog-name) 1) (error "Invalid blog name")) (setq org2blog/wp-blog (assoc org2blog/wp-blog-name org2blog/wp-blog-alist) org2blog/wp-server-xmlrpc-url (plist-get (cdr org2blog/wp-blog) :url) org2blog/wp-server-userid (plist-get (cdr org2blog/wp-blog) :username) org2blog/wp-server-blogid (or (plist-get (cdr org2blog/wp-blog) :id) "1") org2blog/wp-server-pass (or (plist-get (cdr org2blog/wp-blog) :password) (read-passwd (format "%s Weblog password? " org2blog/wp-blog-name))) ;; Fetch and save category list org2blog/wp-categories-list (mapcar (lambda (category) (cdr (assoc "categoryName" category))) (metaweblog-get-categories org2blog/wp-server-xmlrpc-url org2blog/wp-server-userid org2blog/wp-server-pass org2blog/wp-server-blogid)) ;; Fetch and save tag list (!!!!こいつが諸悪の根源!!!!) org2blog/wp-tags-list (mapcar (lambda (tag) (cdr (assoc "slug" tag))) (wp-get-tags org2blog/wp-server-xmlrpc-url org2blog/wp-server-userid org2blog/wp-server-pass org2blog/wp-server-blogid)) ;; Fetch and save page list (これも不要) org2blog/wp-pages-list (mapcar (lambda (pg) (cons (cdr (assoc "page_title" pg)) (cdr (assoc "page_id" pg)))) (wp-get-pagelist org2blog/wp-server-xmlrpc-url org2blog/wp-server-userid org2blog/wp-server-pass org2blog/wp-server-blogid))) (setq org2blog/wp-logged-in t) (message "Logged in")))
ソースを読んでいると、実際はログインもへったくれもなく、設定に必要な変数を設定したり、カテゴリやタグやページのリストを得ているだけです。
しかし、僕のように無数(数えてみると7000超えてた)のタグを設定していると、 org2blog/wp-tags-list を得るのに1分とかかかってしまいます。
なぜこれだけのタグを設定しているのかというと、SEO上の理由です。
WordPressのタグは検索にひっかかりやすいので、検索から訪問してくれる読者がどのようなキーワードで検索してくれるかを考えてタグを設定すればページを見つけてくれる可能性が増えます。
で、 org2blog/wp-tags-list が何に使われているかというと、ただ単にタグ補完に使われているだけでした。
ぶっちゃけそんなものは使わないのでそこの部分を削除してしまえば問題解決です。
ついでに org2blog/wp-pages-list もいらないので削除。
というわけで、override advice をかけて再定義してしゅーりょー♪
(defun org2blog/wp-login--no-fetch-list (&optional blog-name) "補完のためだけにタグリストを取得してるため、ログインがものすごく遅くなってしまう!!" (interactive) (if (not org2blog/wp-blog-alist) (error "Set `org2blog/wp-blog-alist' to be able to use org2blog.")) (let () (setq org2blog/wp-blog-name (or ;; Use the provided name blog-name ;; OR Use the only entry in alist (and (equal (length org2blog/wp-blog-alist) 1) (car (car org2blog/wp-blog-alist))) ;; OR Prompt user (completing-read "Blog to login into? ([Tab] to see list): " (mapcar 'car org2blog/wp-blog-alist) nil t))) (unless (> (length org2blog/wp-blog-name) 1) (error "Invalid blog name")) (setq org2blog/wp-blog (assoc org2blog/wp-blog-name org2blog/wp-blog-alist) org2blog/wp-server-xmlrpc-url (plist-get (cdr org2blog/wp-blog) :url) org2blog/wp-server-userid (plist-get (cdr org2blog/wp-blog) :username) org2blog/wp-server-blogid (or (plist-get (cdr org2blog/wp-blog) :id) "1") org2blog/wp-server-pass (or (plist-get (cdr org2blog/wp-blog) :password) (read-passwd (format "%s Weblog password? " org2blog/wp-blog-name))) ;; Fetch and save category list org2blog/wp-categories-list (mapcar (lambda (category) (cdr (assoc "categoryName" category))) (metaweblog-get-categories org2blog/wp-server-xmlrpc-url org2blog/wp-server-userid org2blog/wp-server-pass org2blog/wp-server-blogid)) ;; ;; Fetch and save tag list ;; org2blog/wp-tags-list ;; (mapcar (lambda (tag) (cdr (assoc "slug" tag))) ;; (wp-get-tags org2blog/wp-server-xmlrpc-url ;; org2blog/wp-server-userid ;; org2blog/wp-server-pass ;; org2blog/wp-server-blogid)) ;; ;; Fetch and save page list ;; org2blog/wp-pages-list ;; (mapcar (lambda (pg) ;; (cons (cdr (assoc "page_title" pg)) ;; (cdr (assoc "page_id" pg)))) ;; (wp-get-pagelist org2blog/wp-server-xmlrpc-url ;; org2blog/wp-server-userid ;; org2blog/wp-server-pass ;; org2blog/wp-server-blogid)) ) (setq org2blog/wp-logged-in t) (message "Logged in"))) (advice-add 'org2blog/wp-login :override 'org2blog/wp-login--no-fetch-list)
それではよいorg2blogライフを!
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。