利用者:Ochaochaocha3/Hiki2MediaWiki for SRW Wiki

「Hiki2MediaWiki for SRW Wiki」は、記事移植の際に必要な Hiki 書式からMediaWiki書式への変換を行うコンバータです。JavaScriptを用いて、旧wikiの記事「Hiki書式からMediawiki書式への変換」に従った変換を自動で行います。記事移植の効率化に役立てていただければ幸いです。

使い方などについての質問はトークページにてお願いいたします。

URI編集

コンバータ
http://www.li-sa.jp/ocha3/hiki2mw/srw/
GitHubレポジトリ
https://github.com/ochaochaocha3/hiki2mw-srw

動作環境編集

Firefox、Google Chrome、Safariの最新版、Internet Explorer 9 以上を推奨します。また、JavaScriptを有効にしてください。

Internet Explorer 7 以下ではレイアウトが乱れるようです。

制作時は基本的にFirefoxの最新版を確認に用いています。最終的な動作確認は、上記ブラウザの最新版で行っています。

機能・特徴編集

GitHubレポジトリのREADMEをご参照ください。

更新履歴編集

最新版は ver. 2.2.3 (2013年3月10日更新)です。

詳細は、コンバータ付属の更新履歴ページをご参照ください。

技術的メモ編集

見出しレベル調整の速度編集

ランダムなレベルの見出し100,000個の変換に要した時間を、Firebug 1.10.0のプロファイル機能を用いて測定した。表記がない場合、単位はms。

環境はCore2 Quad Q9550、メモリ4 GB、Ubuntu 12.04 x64、Firefox 14.0.1。

investigateHeadings()(ver. 2.0.1以前)編集

関数 / # 1 2 3
全体時間 1495 1495 1485
l153: hasDescendants() 59 59 59
hasDescendants() の回数/回 244471 244567 244606
l156: hasChildren() 26 26 26
l160: newHeading() 167 169 177
l169: investigateHeadings() 198 198 198
l233: adjustHeadingLevel() 79 80 78
l281: convertHeadings() 276 276 274
l494: convertLineByLine() 1231 1226 1236

処理速度は実用的だが、hasDescendants() の呼び出し回数が無駄に多い。

幅優先探索(リスト構造)(ver. 2.0.2試作)編集

関数 / # 1 2 3
全体時間 7022 7026 7166
l155: appendTo() 5422 5360 5518
l173: newHeading() 445 458 461
l190: appendHeading() 5491 5432 5586
l229: headingsBFS() 436 434 436
l469: convertLineByLine() 6764 6718 6878

アルゴリズムに無駄がなくなったが、非常に遅くなった。JavaScriptではオブジェクトメンバへのアクセスが遅いことが原因?

幅優先探索(配列)(ver. 2.0.2)編集

関数 / # 1 2 3
全体時間 1479 1379 1442
l154: appendTo() 59 56 57
l164: newHeading() 398 411 427
l183: appendHeading() 130 125 124
l222: headingsBFS() 278 258 258
l467: convertLineByLine() 1178 1149 1182

同じアルゴリズムだが、従来の investigateHeadings() より若干速いくらいまで速度が上がった。特に appendTo() に要する時間が劇的に短くなった。配列への追加は非常に高速。

幅優先探索(配列、関数呼び出しなし)(ver. 2.0.3)編集

変更点は、headingsBFS() 中にコールバック関数の処理を直接記述し、関数呼び出しをなくしたことのみ。

関数 / # 1 2 3
全体時間 1282 1377 1342
l149: appendTo() 59 58 55
l156: newHeading() 431 465 476
l174: appendHeading() 124 123 120
l195: headingsBFS() 120 125 123
l459: convertLineByLine() 1047 1078 1086

関数呼び出しのオーバーヘッドがなくなり、処理が速くなった。