-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Avoid replace text node with same value #39
Comments
这里面还有一个原因,是同文堂从繁转简时,会自动把“著名”转换成“着名”,把“着名”转换成“著名”(“乾隆/干隆”一例也是如此)。 我觉得,目前暂时,可以在 PIE 运行时,将同文堂的 Dynamic Convert 禁用,避免两个 extensions 打架。 |
我推算了一下,两个 extensions 的动态转换可以共存,只要同文堂纠正以下两个问题: |
总的来说,两个或多个 extensions 同时动态转换都没问题,只要所有的转换最终停止在一个固定的 string。比如,如果 Extension A 是把网页上所有的大写英文字母转换成小写,而 Extension B 是把网页上所有的繁体中文转换成简体,那么两个 extensions 一开始时会互相触发对方的转换,但最终会休止在一个固定的网页状态(即网页上所有英文字母都是小写、所有汉字都是简体,在这种状态时任何一个 extension 都不会产生真正意义上的更新(也就是 new string != old string),于是动态更新就会终止)。 |
还有一个更难的情况,比如 Facebook 上一个状态更新的时间先显示为 4 min ago 然后马上变成 5 min ago,那么就可能造成两个 extensions 不断把网页上的文字在 4 min ago 和 5 min ago 之间切换(类似于所谓 racing condition)。不过解决方法我也想到了,就是一个 extension 得到某个 text node 有更新的通知时,先把那个 text node 当时的文本记录下来(比如叫 originalText),而 extension 算出 originalText 应该转换成什么文本(比如叫 newText)时,应该先查一下那个 text node 的文本是否还等于 originalText,只有是的时候才把那个 text node 的文本更新为 newText,这样可以避免很多打架问题。还有就是前面说的,如果 newText==originalText,那就不要更新了,以避免引起另一个 extension 不必要的转换。 |
請去看辭庫專案。
可以當作最佳化的建議加以改善。
這東西我沒在用也不知道,不夠目前套件不會去轉換沒有中文的字串,所以你的有些假設是錯誤的。 |
有一些东西是各个 extension 独有的优化,比如你说的同文堂不会去转换没有中文的字串,而 PIE 也不会去转换已经含有 diacritics 的字串,理论上 PIE 还可以不去转换没有英文字母的字串。这些优化大家各自去做就好。 也有一些东西我发现是所有动态转换 extensions 都应该执行的规则,这样可以完美地避免撞车(比如反复转换个不停): |
… original close Avoid replace text node with same value #39
的简体是“著名, 乾隆”,不是“着名, 干隆”,目前问题还在。
而且,与 PIE(Phonetically Intuitive English)联用时,这两个例子会反复切换于“著名/着名”和“乾隆/干隆”之间。提示:解决办法是,如果同文堂要对一个 text node 赋予的 new string 跟 old string 相同,则不应该赋予 new string,以免触发新一轮的 WebObserver 事件。
The text was updated successfully, but these errors were encountered: