soffes / MarkdownKit

Fancy Markdown input with TextKit powered by CommonMark
MIT License
45 stars 6 forks source link

Greatly increase performance #4

Closed soffes closed 4 years ago

soffes commented 4 years ago

Using the following test string:

العربية (اَلْعَرَبِيَّةُ أو العربية أو [العاربيّة] (حول قائمة الصوت هذه) أو عَرَبِيّ أو عرباي أو [عرابي] (حول هذه القائمة الصوتية) أو [عرابيج]) هي لغة سامية ظهرت لأول مرة في القرن الأول إلى القرن الرابع الميلادي. . [5] وهي الآن لغة مشتركة في العالم العربي. [6] سميت على اسم العرب ، وهو مصطلح استخدم في البداية لوصف الشعوب التي تعيش في المنطقة التي تحدها بلاد ما بين النهرين في الشرق والجبال المناهضة للبنان في الغرب وشمال غرب شبه الجزيرة العربية وشبه جزيرة سيناء. [7] تخصص الأيزو رموز اللغة لثلاثين نوعًا من اللغة العربية ، بما في ذلك شكلها القياسي ، اللغة العربية الفصحى الحديثة ، [8] والتي يشار إليها أيضًا بالعربية الأدبية ، وهي اللغة العربية الفصحى الحديثة. هذا التمييز موجود بشكل أساسي بين اللغويين الغربيين. لا يميز المتحدثون العرب أنفسهم عمومًا بين اللغة العربية الفصحى الحديثة والعربية الفصحى ، بل يشيرون إلى كلاهما باسم `` العربية '' (أَلعَرَبِيَّةُ ٱلْفُصْحَىٰ ، [9] "أنقى اللغة العربية") أو ببساطة الفُوْه (اَلْفُصْحَىٰ).

يتم تدريس اللغة العربية على نطاق واسع في المدارس والجامعات ويتم استخدامها بدرجات متفاوتة في أماكن العمل والحكومة ووسائل الإعلام. اللغة العربية في شكلها القياسي ، هي اللغة الرسمية لـ 26 دولة ، وكذلك اللغة الليتورجية لدين الإسلام ، حيث تم كتابة القرآن والحديث باللغة العربية.

The performance was very bad. Typing a new character could take over a second. This was due to TextKit copying the string to and from Swift.String and Foundation.NSString. I asked about this in the labs the year Swift 3 was introduced and they said this was a known issue. I thought this had been fixed and created BaseTextStorage in Swift. It turns out, replacing this with an Objective-C implementation greatly speeds things up.

This also changes looking for thematic breaks (aka horizontal rules) to use the cmark AST instead of searching for the special attribute. For long strings, this make things much faster.

After this change, it goes from taking over a second to insert a new character to no noticeable delay like in any other text input.