У Питона, как я разделяю последовательность и держу сепараторы?

JavaScript - это однопоточная среда программирования. При загрузке нескольких сценариев в верхней части тега заголовка остальные теги скрипта под ним блокируются до тех пор, пока не загрузится этот тег скрипта. Если один тег сценария не может быть загружен, то все остальные из них застряли ... пока браузер не истечет для этого тега скрипта. Чтобы обойти эту проблему блокировки, разработчики перемещали теги скриптов в нижней части веб-страницы за последние несколько лет.

Проблема действительно заметна, когда на сайте много JS-файлов, которые находятся в верхней части страницы & amp; загружаются с 3-го, 4-го, 5-го, до N-го партийных серверов поставщиков рекламы. Когда сервер поставщика рекламы отправляется в автономный режим, где их объявления больше не могут обслуживаться, что случается довольно часто - тогда JS на странице сидит & amp; ожидает от браузера тайм-аута. Это заставляет страницу застревать во время загрузки. Это создает плохой опыт работы с пользователем.

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

Поэтому важно по возможности перемещать теги скриптов в нижней части страницы.

195
задан Ken Kinder 25 January 2010 в 13:41
поделиться

2 ответа

>>> re.split('(\W)', 'foo/bar spam\neggs')
['foo', '/', 'bar', ' ', 'spam', '\n', 'eggs']
253
ответ дан 23 November 2019 в 05:22
поделиться

Я нашел этот основанный на генераторе подход более удовлетворяющим:

def split_keep(string, sep):
    """Usage:
    >>> list(split_keep("a.b.c.d", "."))
    ['a.', 'b.', 'c.', 'd']
    """
    start = 0
    while True:
        end = string.find(sep, start) + 1
        if end == 0:
            break
        yield string[start:end]
        start = end
    yield string[start:]

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

... и в Python 3.8 это может быть столь же коротко как:

def split_keep(string, sep):
    start = 0
    while (end := string.find(sep, start) + 1) > 0:
        yield string[start:end]
        start = end
    yield string[start:]
0
ответ дан 23 November 2019 в 05:22
поделиться
Другие вопросы по тегам:

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