DOM реализована как независимая от языка библиотека практически во всех основных реализациях браузера, а это означает, что она находится в другой библиотеке от механизма Javascript. Например, в IE механизм JS реализован в jscript.dll
, а DOM реализован в mshtml.dll
. Safari имеет Nitro (JS) и WebCore (DOM). У Chrome есть V8 (JS) и WebCore (DOM), а у Firefox есть SpiderMonkey / TraceMonkey (JS) и Gecko (DOM).
Это означает, что в любое время, когда ваш JS должен получить доступ к DOM, он должен дойти до библиотеки DOM, которая по своей сути медленна из-за всего маршалинга, который должен произойти. Аналогия, которая была использована, - это 2 участка земли, соединенных платной дорожкой, каждый раз, когда вы касаетесь DOM, вы должны пересечь мост и переходить назад - платить за производительность.
ОТВЕТ
Моим решением этой проблемы было создание моего собственного подкласса PDFAnnotation.
var isChecked = false
init(forBounds bounds: CGRect, withProperties properties: [AnyHashable : Any]?)
override func draw(with box: PDFDisplayBox, in context: CGContext)
Я использовал свойство isChecked внутри функции рисования. Если свойство было включено, тогда я отображал изображение галочки, которое нашел на Icons8. Мне также пришлось добавить PDFAnnotationHitObserver в мой ViewController и обработать обновление свойства isChecked.