Как эффективно хранить огромное количество URL-адресов - PullRequest
0 голосов
/ 13 июля 2020

Я работаю над расширением Google chrome, которое добавляет простой значок рядом с указанными c URL-адресами,

  • К каким URL-адресам добавляется значок?

Ну, в основном это расширение Anti-Rickroll, которое блокирует URL-адреса rickroll

  • В чем проблема?

По сути, на YouTube есть абсурдно огромное количество URL-адресов rickroll, некоторые из которых похожи на этот «Rickroll, но это другое ссылка, чтобы люди не могли ее запомнить "Когда я сделал первый прототип своего проекта, я добавил только оригинальные ссылки Rickroll и" Rickroll'D ", а URL-адрес авторского права musi c в моем коде выглядит следующим образом:

var stringsToBlock = ["/watch?v=dQw4w9WgXcQ", "youtu.be/dQw4w9WgXcQ",
 "/watch?v=okqEVeNqBhc", "youtu.be/okqEVeNqBhc", "/watch?v=BROWqjuTM0g",
  "youtu.be/BROWqjuTM0g", "/watch?v=IAISUDbjXj0", "youtu.be/IAISUDbjXj0",
   "/watch?v=4zKshWnI3ok", "youtu.be/4zKshWnI3ok", "/watch?v=oHg5SJYRHA0",
    "youtu.be/oHg5SJYRHA0", "/watch?v=6_b7RDuLwcI", "youtu.be/6_b7RDuLwcI",
     "/watch?v=DD70oKDlemE", "youtu.be/DD70oKDlemE", "/video/x1v6sh_rick-astley-never-gonna-give-you-up_music",
      "/video/x4g0cb_rick-astley-never-gonna-give-you-up_music", "/video/x1jl5p_rick-astley-never-gonna-give-you-up_creation",
       "/video/x46d2_rick-asley-never-gonna-give-you-up_music", "/video/x5ykzv_rick-roll_music",
        "/video/x58u4t_rick-roll-never-gonna-give-you-up-r_music", "/video/x58una_rick-roll-never-gonna-give-you-up-r_music",
         "/video/x22k2fw_rick-rolled_music", "/video/xsdji_rick-astley-never-gonna-give-you-up_music", 
          "/video/x1i1js_rick-astley-never-gonna-give-you-up_music", "/video/xeztvl_rick-astley-never-gonna-give-you-up_music",
           "/video/x6b3kz_rickroll_news", "/video/x5l8e6_rickroll_fun", "/2619976",

и да, это всего лишь 3 ссылки, о которых я упоминал выше, не включая css, который добавляет значок

a[href*="/watch?v=dQw4w9WgXcQ"]:not(.rickroll):not(.rickwimg):before,
 a[href*="youtu.be/dQw4w9WgXcQ"]:not(.rickroll):not(.rickwimg):before,
  a[href*="/watch?v=okqEVeNqBhc"]:not(.rickroll):not(.rickwimg):before,
   a[href*="youtu.be/okqEVeNqBhc"]:not(.rickroll):not(.rickwimg):before,
    a[href*="/watch?v=BROWqjuTM0g"]:not(.rickroll):not(.rickwimg):before,
     a[href*="youtu.be/BROWqjuTM0g"]:not(.rickroll):not(.rickwimg):before,
      a[href*="/watch?v=IAISUDbjXj0"]:not(.rickroll):not(.rickwimg):before,
       a[href*="youtu.be/IAISUDbjXj0"]:not(.rickroll):not(.rickwimg):before,
        a[href*="/watch?v=4zKshWnI3ok"]:not(.rickroll):not(.rickwimg):before,
         a[href*="youtu.be/4zKshWnI3ok"]:not(.rickroll):not(.rickwimg):before,
          a[href*="/watch?v=oHg5SJYRHA0"]:not(.rickroll):not(.rickwimg):before,
           a[href*="youtu.be/oHg5SJYRHA0"]:not(.rickroll):not(.rickwimg):before,
            a[href*="/watch?v=6_b7RDuLwcI"]:not(.rickroll):not(.rickwimg):before,
             a[href*="youtu.be/6_b7RDuLwcI"]:not(.rickroll):not(.rickwimg):before,
              a[href*="/watch?v=DD70oKDlemE"]:not(.rickroll):not(.rickwimg):before,
               a[href*="youtu.be/DD70oKDlemE"]:not(.rickroll):not(.rickwimg):before,
                a[href*="/video/x1v6sh_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
                 a[href*="/video/x4g0cb_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
                  a[href*="/video/x1jl5p_rick-astley-never-gonna-give-you-up_creation"]:not(.rickroll):not(.rickwimg):before,
                   a[href*="/video/x46d2_rick-asley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
                    a[href*="/video/x5ykzv_rick-roll_music"]:not(.rickroll):not(.rickwimg):before,
                     a[href*="/video/x58u4t_rick-roll-never-gonna-give-you-up-r_music"]:not(.rickroll):not(.rickwimg):before,
                      a[href*="/video/x58una_rick-roll-never-gonna-give-you-up-r_music"]:not(.rickroll):not(.rickwimg):before,
                       a[href*="/video/x22k2fw_rick-rolled_music"]:not(.rickroll):not(.rickwimg):before,
                        a[href*="/video/xsdji_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
                         a[href*="/video/x1i1js_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
                          a[href*="/video/xeztvl_rick-astley-never-gonna-give-you-up_music"]:not(.rickroll):not(.rickwimg):before,
                           a[href*="/video/x6b3kz_rickroll_news"]:not(.rickroll):not(.rickwimg):before,
                            a[href*="/video/x5l8e6_rickroll_fun"]:not(.rickroll):not(.rickwimg):before,
                             a[href*="/2619976"]:not(.rickroll):not(.rickwimg):before,

, очевидно, что это еще не все. Итак, в основном я искал rickroll на YouTube и скопировал примерно 10 URL-адресов, и это суммирует размер расширения до 1,5 МБ, что действительно велико по сравнению с ДРУГИМ полезным расширением, поэтому, если бы я добавил хоть одну ссылку на rickroll, возможно, это было бы от 100 МБ до 200 МБ, Итак, какой полезный способ автоматически добавлять URL-адреса?

У меня в голове несколько идей, но я не уверен, работают ли они

  1. Получите фоновый скрипт для сканирования URL-адресов, если заголовок или описание содержит «Rickroll»
  2. Работайте с API YouTube, чтобы получить огромный список всех возможных ссылок rickroll и сохранить его на сервере [Вероятно, не разрешено chrome, сильно лагает, медленная загрузка страницы, много разрешений, что делает пользователя подозрительным, ежемесячная подписка на сервер, что неудобно, как первый проект]
  3. Переделайте весь код, чтобы сделать его эффективным при поиске URL

Кроме того, я полный новичок, поэтому не говорите со мной профессионально, попробуйте упростить ответ ээ

1 Ответ

0 голосов
/ 13 июля 2020

Я настоятельно рекомендую использовать для этого сопоставление регулярных выражений. Поскольку у вас есть /watch?v=dQw4w9WgXcQ и youtu.be/dQw4w9WgXcQ, вы можете вырезать часть идентификатора и проверить, присутствуют ли они в вашем списке. Таким образом, вы просто сохраняете идентификаторы!

var something = "/watch?v=dQw4w9WgXcQ"
var test = something.match(/\/watch?v=(.*)/);
console.log(test[1]);

Это даст вам dQw4w9WgXcQ

Вы также можете использовать регулярное выражение, чтобы увидеть, содержит ли он определенный символ, например 'rick-roll'

(new RegExp('rickroll')).test(url)
// or
/rickroll/.test(url)

Вы также можете сохранить идентификаторы / шаблоны в API локального хранилища, чтобы получить к ним быстрый доступ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...