Более интенсивный ресурс: скрипт Tampermonkey (для управления видео), работающий на ВСЕХ доменах - или только по 1 КБ доменам, каждый со своей записью @include?

CREATE TABLE `dvouchers` (
  `2147483647` int(3) NOT NULL auto_increment,
  `code` varchar(12) NOT NULL default '1',
  `type` char(1) NOT NULL default '$',
  `count` int(3) unsigned NOT NULL default '0',
  `amount` int(3) unsigned default '0',
  `notes` text,
  `expiryDate` date default NULL,
  `fkUserAdminId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`2147483647`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
3
задан Brock Adams 17 March 2019 в 23:48
поделиться

1 ответ

Частичный ответ, потому что он слишком велик для комментария, а также потому, что у меня нет желания настраивать и запускать новые эксперименты прямо сейчас. (Если кто-то отправляет ответ с обновленными, проверяемыми номерами, он получает мое одобрение.)

Вот примерный набросок того, что происходит, когда у вас есть Tampermonkey, Violentmonkey и т. Д. И установлены пользовательские скрипты:

  1. Каждая страница, которую вы посещаете , проверяется на соответствие директивам @include, @match и @exclude каждого активного пользовательского скрипта . Более умные движки сначала проверят @exclude и остановятся, если совпадение найдено.

    Некоторые движки лучше справляются с этой проверкой, чем другие, и в идеале информация о совпадении сайтов должна храниться в памяти для максимальной скорости.

  2. Каждый <frame> или iframe на всех посещаемых вами страницах сверяются с директивами @include, @match и @exclude каждого активного пользовательского скрипта, если только этот скрипт не имеет @noframes установлено.

  3. Если скрипт соответствует странице (или фрейму), то Tampermonkey (и т. Д.) Должен:
    (A) Извлечь код скрипта и любые данные - часто с диска (медленно).
    (B) Затем создайте некоторый уровень песочницы - в зависимости от движка, браузера и режима @grant.
    (C) Вставьте скрипт в вышеупомянутую песочницу - почти всегда обернутую анонимной функцией - и запустите его.

  4. Затем пользовательский скрипт будет использовать ресурсы в зависимости от своего кода.

В общем:

  1. @match работает лучше (проверено годами ранее), чем @include. Если вы собираетесь использовать 1000 строк, используйте @match вместо include.

  2. Используйте @noframes, если у вас нет причин не делать этого.

  3. В идеале шаги 1 и 2 могут быть выполнены из памяти (нужно посмотреть, что в данный момент делают различные движки), а партия из @include может быть обработана за то же время, что и для введите один пользовательский скрипт. (Кто-нибудь хочет попробовать собрать какие-нибудь числа?)
  4. Если пользовательский скрипт или его данные (@require файлы, @resource файлы, GM_setValue данные) должны быть извлечены с диска, то это сравнительно огромная задержка во времени. (Но все же это быстрее, чем извлекать информацию из Интернета.)

Наконец, время и возможное напряжение из-за необходимости поддерживать большой список сайтов, редактируя файл usercript каждый время должно быть по сравнению с тем, насколько инвазивен ваш сценарий .

Если бы это был я, а скрипт только задерживал страницы менее чем на 300 миллисекунд, я бы просто держал свой нос и использовал:

// @match    *://*/*
// @noframes

Однако, если скрипт более инвазивен, он медленнее или более ресурсоемкий, вы можете использовать гибридный подход ...
Сохраните список сайтов, на которых будет полностью работать, в данных GM_setValue и / или в файле @resource d.

Таким образом, вы можете редактировать список на лету, используя, например, команды меню; или через редактор данных скрипта Tampermonkey; или даже с помощью кнопок, которые вы создаете для этой цели. Однако все это выходит за рамки этого вопроса.

0
ответ дан Brock Adams 17 March 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: