#author("2016-11-26T22:35:40+09:00","","") * なぜページ数が増えると AutoLink は動作しないのか [#pa3df9af] - ページ: [[BugTrack2]] - 投稿者: [[bee]] - 優先順位: 低 - 状態: 提案 - カテゴリー: 本体バグ - 投稿日: 2016-11-26 (土) 08:50:05 - バージョン: ** メッセージ [#m7dc0e21] ページ数が増えたとき、AutoLink が原因で正常に動作しなくなると言われている(関連: [[BugTrack2/81]])。 しかし、AutoLink の何が原因なのかコメントを追っていってもよく分からなかった。 - PCRE の問題? -- サブパターン数の限界? - メモリ使用量の問題? - CPU 時間の問題? 原因はさておき、効率の良い正規表現を生成するライブラリとして Regexp-Assemble が知られている。~ PukiWiki でも henoheno さんが generate_trie_regex() という関数を作成している(1.5 には未マージ)。 - [[開発日記/2009-04-19]] -- [[BugTrack/502]] -- [[BugTrack2/311]] しかし、何が原因なのか分からなければベンチマークも取れないし、改善したか(もしくは悪化したか)確認するのも難しい。~ そこで AutoLink が動作しない条件を調べたい。~ もとい「詳しい人がいたら教えてほしい」という Bug です。 -------- - ニコニコ大百科のタイトルを食わせてみたところ~ "preg_match(): Compilation failed: regular expression is too large at offset 3339719" という WARNING を吐いてくれました。 -- [[bee]] &new{2016-11-26 (土) 10:54:37}; - www.pcre.org/pcre.txt によると 64K data units を越えてはいけないらしい。 -- [[bee]] &new{2016-11-26 (土) 11:09:41}; - blog-tmtsts.rhcloud.com/135 の方法を試したところ、32765 Byte で私の環境も WARNING が出ました。 -- [[bee]] &new{2016-11-26 (土) 11:11:33}; -- pcre.backtrack_limit/pcre.recursion_limit の設定を一桁ずつ増やしてみたが当然ながら効果なし。 -- [[bee]] &new{2016-11-26 (土) 11:19:18}; - bit.ly/2fitPfD で~ pukiwikiベースのwikiだと日本語名のページは900ページ前後(略)でホワイトアウトして文字が見えなくなる表示上のバグがある と言われていたのが不思議だったのですが、日本語が 3 バイトでページ名が平均 12 文字程度とすると 900 ページで 32KB を使い切りますね。なるほど。 -- [[bee]] &new{2016-11-26 (土) 11:38:20}; - まあとりあえず preg_replace_callback の戻り値をチェックするようにしたほうがいいですね。ページが真っ白になるのは NULL を素通りさせているせいだと思われるので…。 -- [[bee]] &new{2016-11-26 (土) 11:43:38}; - 意欲的なIssueですね。個人的にAutoLinkは利用していないのですが、よく使われているのでしょうかね。確かにGoogle検索するとこの制限にかかっている人がちらほら見られます -- [[umorigu]] &new{2016-11-26 (土) 22:35:40}; #comment