Firefox 29 - как удалить записи истории, посещенные менее x раз

1583
lousyuser

Контекст:

Я использую свой профиль Firefox уже пару лет. Естественно, мой файл истории стал огромным. У меня установлен Firefox Sync между моим основным настольным ПК и ноутбуком.

HW конфиги:

  • ПК: i5-3450, 8 ГБ оперативной памяти DDR3, Crucial M4 128 ГБ SSD
  • ноутбук: Pentium SU4100, 4 ГБ оперативной памяти DDR3, жесткий диск WD 5400 об / мин

Доступ к записям истории при наборе в Awesome Bar на моем рабочем столе занимает довольно много времени, несмотря на приличную конфигурацию, но ноутбук работает даже медленнее. Опыт совершенно не отвечает.

Я подумал, что если я немного проясню историю, я мог бы избежать создания нового профиля, чтобы ускорить процесс.

Сам вопрос:

Проиллюстрировать:

история

Есть ли способ удалить все записи истории, которые были посещены меньше, чем x (скажем, 5) раз, и в то же время недавнее посещение меньше, чем y (скажем, 120) дней?

afaik файл истории - это какая-то база данных SQL, но я не совсем уверен, как данные сохраняются, если есть «безопасный способ» их редактировать и как будет выглядеть запрос на выполнение того, что мне нужно.


Я продолжал просматривать предыдущие вопросы SuperUser, чтобы посмотреть, смогу ли я найти соответствующую информацию.

В моей директории профиля Firefox есть файл с именем places.sqlite. Открывая его с помощью sqlite, можно увидеть (среди прочего) таблицы moz_placesи moz_historyvisits. Похоже, что moz_historyvisitsиспользует основной moz_placesдля ссылки на URL-адреса.

Поскольку я не знаком с базами данных, я не совсем понимаю, как связаны две таблицы, упомянутые в цитате.

скриншот части таблицы places_sqlite

Я заметил, что visit_countэто в стандартном формате, что облегчает работу с ним. В last_visit_dateвыглядит зашифрованы моему невооруженным глазом, но я не могу видеть, каким образом.

Надеюсь, что это помогает, я в своем уме.

10
Что ты пробовал до сих пор? Прежде чем продолжить, можете ли вы подтвердить, что новый профиль Firefox обеспечивает более быстрое взаимодействие, особенно на ноутбуке? and31415 9 лет назад 0
Я только что опубликовал ответ, который содержит некоторую новую информацию. Что касается привязанности, то нет, я не пробовал, но я отчетливо помню, что Awesome Bar был намного быстрее, когда профиль был довольно новым (а история не загромождена несколькими записями), как на ноутбуке, так и на рабочем столе. lousyuser 9 лет назад 1
Итак, вы видели улучшение производительности после очистки вашей истории? - edit: oops: теперь я вижу, что вы прокомментировали выбранный ответ и заметили значительное улучшение. ndemou 8 лет назад 0
Чтобы ответить на один из ваших вопросов, согласно [этому ответу] (http://superuser.com/questions/64477/how-to-remove-large-number-of-entries-from-url-history-in-firefox?rq = 1), Firefox фактически использует SQL. Я рекомендую запустить SQLLite и идти оттуда. cybermonkey 9 лет назад 0

1 ответ на вопрос

8
ᔕᖺᘎᕊ

With some research (see at end for 'references'), I've come up with this (kind of) simple solution:


BACKUP FIRST. CLOSE FIREFOX FIRST


This requires you to edit the SQLite Database (a self-contained SQL database; see Wikipedia article) of Mozilla Firefox by making a query to find all records that satisfy the condition (in your case - viewed less than 5 times and not visited in the last 120 days).


BACKUP FIRST. CLOSE FIREFOX FIRST

Instructions start:


This works (tested and working with my Firefox v. 29.0.1). In 12 easy(ish) steps:

  1. Install SQLite Database Browser

  2. Open it

  3. Click Open Database

  4. Navigate to C:\Users\[USER]\AppData\Roaming\Mozilla\Firefox\Profiles\[PROFILE] editing as required

    BACKUP THE FOLLOWING FILE FIRST!!

  5. Open places.sqlite from the directory you opened in step 4.

    SERIOUSLY, BACKUP FIRST!!

  6. Click the Execute SQL tab.

  7. Enter this:

    SELECT * FROM moz_places WHERE last_visit_date BETWEEN strftime('%s','2014-04-01')*1000000 AND strftime('%s','2014-05-30')*1000000 AND visit_count < x(2) 
  8. Replace x(2) to 5 (in your example)

  9. Replace 2014-04-01 and 2014-05-30 with the range of dates you want

  10. Press the blue play button.

  11. Check if the sites displayed are correct (they should be, but double check!)

  12. If they are, then replace the first two lines of the above code with:

    DELETE FROM moz_places 

    so your code looks something like:

    DELETE FROM moz_places WHERE last_visit_date BETWEEN strftime('%s','2014-04-01')*1000000 AND strftime('%s','2014-05-30')*1000000 AND visit_count < x(2) 

DONE! Close the program and click save when closing.

Instructions end


What about the last_visit_date?

The last_visit_date looks encrypted to my naked eye, but I can't see in which way.

I wouldn't call it 'encrypted' (although I don't disagree that it looks encrypted). It's just in another 'system'. The date is in the Unix time system (or Epoch / POSIX). It's the number of seconds that have passed since 00:00:00 (UTC) 1st January 1970. 1 hour is 3600 seconds. 1 year is 31556926 days.

For more info. check this Wikipedia article out, or this website that converts time to and from epoch time.


Screenshots (ignore the SQL queries on these images, they are wrong. These are to tell you mostly where to be looking)

SQLite Database Browser SQLite Database Browser SQLite Database Browser

Thanks to ;):

Для дополнительной безопасности вы можете сделать копию (резервную копию) базы данных перед этим. Bob 9 лет назад 0
Кроме того, если вы хотите сделать это правильно, вы также должны удалить из `moz_places` любые записи, у которых больше нет соответствующего` place_id`. Bob 9 лет назад 0
Извините, я имел в виду удалить из `moz_historyvisits` Bob 9 лет назад 0
@Bob А `place_id` в` moz_historyvisits` = `id` в` moz_places`? ᔕᖺᘎᕊ 9 лет назад 0
Должно быть. Есть два способа справиться с этим: 1. сначала удалить из `moz_historyvists` (` удалить из moz_historyvisits как hv left, присоединиться к moz_places как p на hv.place_id = p.id где p.visit_count ... `) или 2. после очистки `moz_places`, вы можете [удалить из` moz_historyvisits` любые записи, у которых нет соответствующей записи] (http://stackoverflow.com/a/3384143). Я предпочитаю вариант 1 лично. Не используйте его без тестирования; мой SQL довольно ржавый, и я учился с pgsql, а не sqlite. На самом деле вы можете удалить из обоих сразу, тест лемм. Bob 9 лет назад 0
На самом деле, глядя на [диаграмму отношений сущностей] (http://people.mozilla.org/~dietrich/places-erd.png), есть еще несколько мест, которые ссылаются на `moz_places`. Проще предположить, что Firefox заметит, что их больше не существует, и очистит их соответствующим образом. Bob 9 лет назад 0
@Bob Вот о чем я думал. Firefox должен, по крайней мере, сделать это, я просто не знаю, как это проверить ... Я вижу в средстве просмотра истории, что истории больше не осталось (что я вижу) ᔕᖺᘎᕊ 9 лет назад 0
Благодаря тонну! Что касается удаления всех недействительных записей, зависящих от теперь удаленных записей истории, вероятно, потребовались бы обширные знания о том, как работает Firefox. Однако это подойдет. Бар Awesome теперь намного быстрее. lousyuser 9 лет назад 0
Я добавлю, что вы должны делать эти шаги только после закрытия браузера. and31415 9 лет назад 0