А так ли нужно помещать js в отдельные файлы

Тема в разделе "Общие вопросы оптимизации", создана пользователем Marketologov, 20 май 2013.

Статус темы:
Закрыта.
  1. Marketologov

    Marketologov На форуме с: 6 фев 2011 Сообщения: 2.068

    Сделали сайт а там есть карта на js сделанная с помощью Яндекс Карт
    Скрипт занимает 400 строк и генерится с помощью php и в итоге занимает больше половины кода страницы
    страница не продвигается но часто посещаемая

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

    что думаете по этому поводу?
    есть ли рекомендации ПС?
    сорри сам не нашел
    а вот блоговые посты не всегда верны, и у большинство не вызывают доверия
  2. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Всегда такие большие куски js добавляю файлом.
  3. iMessi89

    iMessi89 На форуме с: 19 июн 2012 Сообщения: 979

    хреновый видимо программист)) что ты вынесешь яваксрипт в отдельный файл и приинклудишь - что так оставишь - разницы по коду не будет)) Тот же инклуд. Только вот вынос js снизит время загрузки самой html страницы)
  4. Marketologov

    Marketologov На форуме с: 6 фев 2011 Сообщения: 2.068

    по его словам)
    1) пс не видят и не индексируют срипты и просто их пропускают мимо
    2) этот здоровый скрипт можно поместить в head.... поскольку из хеда ПС берут только метатеги, а так он может быть хоть километровый, главное что не в теле стрнаицы

    Я считаю, что оценивается код вцелом... он весь сканируется, но что то исключается что то нет...
    кроме физического веса страницы важно исключить ненужное из самого кода... то есть что было было что то типа:
    <script type="text/javascript" src="//site.ru//js/tralala.js"></script>

    а вот в сам файл срипта уже пометить этот js код

    все это я объяснил но на интуитивном уровне и возможно не оч грамотно...

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

    а то пока читаю одни мнения
  5. leshii

    leshii Модератор На форуме с: 4 сен 2011 Сообщения: 2.539 Команда форума

    Сравни скорость загрузка страницы. Если речь о миллисекундах - то не стоит заморачиваться, если о десятых долях - пусть программер делает свою работу - гугл официально (устами Каттса) где-то подтверждал, что скорость загрузки может влиять на ранжирование. Неужто так сложно вынести код в отдельный файл?

    Зашибись. Где ж он таких умных роботов нашел-то... Т.е. по его мнению 3 порнобаннера и полтора десятка реклам и троянов всех видов зашитых в head увидят только несчастные юзвери?
    Marketologov нравится это.
  6. Marketologov

    Marketologov На форуме с: 6 фев 2011 Сообщения: 2.068

    я не прогер.. но как объяснили, что код js генерится с помощью php на страницу... то есть нужно сделать так что бы он генерился в js файл... что видимо сложней сделать
  7. oldzas

    oldzas На форуме с: 18 фев 2013 Сообщения: 214

    Отвечу сразу, прогер прав, а теперь по пунктам:

    1) Да, выносить js во вне - правильно и даже скажу больше, он должен подключаться внизу страницы, дабы не замедлять загрузку страницы. А не как у многих - сразу под мета тегами яметрика или гугланалитики. В отдельном js файле так же происходит правильное кеширование.
    2) Логика программиста: в скрипте карты находится логика написанная на php, которая запрашивает координаты, потом на php организуется цикл для вывода координат, внутри цикла опять же будет js код.

    Пример такого бутерброда:

    php страницы
    js карты
    php цикл вывод координат на js
    js карты
    php страницы

    Если все это добро вынести в отдельный файл, то какое расширение он будет иметь ? Если js - то внутри не отработает php. А если php то внутри будет js и получится что мы ничего не выиграли вынося в отдельный файл .... так там опять же тот же самый php - тафталогия ....

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

    Индексация пройдет успешно, сомневаться не стоит.
    --- добавлено: 21 май 2013 в 15:23 ---
    "страница не продвигается но часто посещаемая" - продвигать на до по точкам на карте, у каждой точки есть как минимум несколько полей для ее описания, что бы продвигать карты, надо знать их апи, что бы описать каждый объект наиболее полно.
    Marketologov нравится это.
  8. Marketologov

    Marketologov На форуме с: 6 фев 2011 Сообщения: 2.068

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

    почитать бы где как робот обрабатывает сраницу

    1) как думает прогер: робот обрабатывает страницу полностью и начинает ее обрабатывать только после полной загрузки! следовательно т.к. js не будет кэшироваться (он только на этой странице), и даже если его вынести в отдельный файл он всеравно будет подгружаться и робот будет ждать пока страница не загрузится полностью. Следовательно ни скорость ни время загрузки страницы при выносе в отдельный файл не изменятся и выносить js в отдельный файл смысла нет!

    2) как думаю я: робот обрабатывает код страницы сверху вниз и внешний js подгружается в последний момент. поэтому робот сначала увидит html страницу обработает ее, а потом уже будет обрабатывать js. что является плюсом и он оценивает в первую очередь время загрузки самого html кода - что важно!!! и в последнюю очередь подгружает внешний js код - что не так важно...

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

    кто прав, кто виноват? куда копать?)
  9. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Сначала робот получает заголовки сайта, при ответе 200, полностью получает страницу, js он обрабатывает(на вирусы и т.д.). Есть мнение, что все js использовать в одном внешнем скрипте, для быстрой работы. Для красоты кода, думаю вынести в отдельный файл. Это делается быстро.
  10. Marketologov

    Marketologov На форуме с: 6 фев 2011 Сообщения: 2.068

    прям сразу полностью?) зачем тогда js вниз кода выносить?


    слушал про такое мнение... это хорошо когда js страницах... что бы попасть в кэш
    а есть ли смысл выносить если он только на одной странице?


    довольно абстрактное понятие)
  11. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Если робот не получил страницу, а сразу принялся ее обследовать...Это какие мощности нужны ПС?

    Вы часто встречали в топе сайты с большим количеством строк js на странице ?
  12. oldzas

    oldzas На форуме с: 18 фев 2013 Сообщения: 214

    Если говорить о конкретно вашем случае, то:
    1. все js файлы выносятся во отдельные файлы и соответственно называются.
    2.если же какие то js файлы используются только на определенных страницах и там только js код - то на странице просто ставится условие, что именно такой файл подключается только на этой странице, а на другой странице его нет.
    3. Все js файлы подключаются в самом низу страниы, а все css файлы подключатся вверху страницы.
    4. если как у вас - карта, где вперемешку php+js код, то считаем что это НЕ скрипт, а такой вот замороченный контент, который надо не выносить, а показывать именно на странице, как есть.
    5. робот обрабатывает страницу - точно так же как отрабатывает фаербабаг, ходит и загружает непосредственно узлы, DOM модель. (именно поэтому если на сайтах есть 2 такие вещи как сайдбар и контентная часть, то сайдбар верстается вторым, а контент первым, именно для того что бы контент всплывал для робота быстрее и у него был приоритет).

    Вопросы задали очень сумбурно, неудобно отвечать, поэтому я то же ответил в кашу-какашу, все скопом.
    --- добавлено: 21 май 2013 в 20:51 ---
    Напишу вдогонку, чисто для того что бы быть в моде.
    У битрикса есть общий шаблон где можно хранить все js файлы и многие по старинке пишут условия, где использовать какие js файлы.
    Но архитектура битрикса УЖЕ сейчас имеет возможность в новом разрабатываемом функционале, компанентах, создавать свой js и css файлы, которые автоматически подключаются и автоматически кешируются.
    Это очередной плюс битрикса, о котором наверное мало кто из нас знал.
  13. Marketologov

    Marketologov На форуме с: 6 фев 2011 Сообщения: 2.068

    ну я про тоже)
    просто вы написали что сразу полностью, вот я и переспросил

    запрос пластиковые окна - регион Москва

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

    да по сути код js получается достаточно простой, но он прописан не вручную а генерится из php

    в самом коде координаты точек и их миниописания

    Код:
     <script type="text/javascript">
            // инициализация
            ymaps.ready(init);
     
            function init () {
                var myMap = new ymaps.Map("map", {
                        center: [координаты карты],
                        zoom: 10
                    }, {
                    }),
                                obj_10 = new ymaps.Placemark([координаты объекта], {
                    iconContent: 'Название объекта',
                    balloonContentHeader: '<a href="ссылка на объект">Название объекта</a>',
                    balloonContentBody: 'Характеристика 1: <b>Примечание</b><br>трала ла... тут какаято инфа по объекту',
                }, {
                    preset: 'twirl#violetStretchyIcon'
                })....
     
    //... далее еще порядка 30 объектов с краткими описаниями
    итого 400 строк...
    перед этим сриптом еще подгружается скрипт с яндекс картой но уже с самого яндекса

    да именно так и есть...

    вообщем выводы такие, выводить в отдельный файл смысла нету, есть смысл поместить вниз страницы


    сайт как раз на битриксе... только скрипт самописный
  14. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Ну тогда прогер прав)
  15. oldzas

    oldzas На форуме с: 18 фев 2013 Сообщения: 214

    Узнав, что там битрикс, попробую сначала предостеречь, ваш пример - это то что действительно есть, многие не знают как обойти, а кто знает - не говорит, потому что решение - костыль. Если оставить весь код как есть в теле страницы, отдать заказчику и уйти это только начало песни, через некоторое время, контент менеджер заказчика или сеошник начинает править страницы через визуальный интерфейс и все ломает, карта не грузится. Почему такое происходит ? - потому что у битрикса есть слабое место - сложные конструкции на php и js ломаются и сохраняется белиберда, это неправильная обработка двойных ковычек и тому подобного (все таки визуальный редактор создан для контента, а не кода).

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

    Еще многие делат так - в битриксе есть такое понятие ка квключаемые области, это php файл с неким кодом, который как задумывалось, будет 1) использоваться в нескольких местах 2) будет правиться в 1 месте, в других местах инфа автоматом то же поменяется. Например нам править визуально не надо, нас вполне устроит и то, что карта будет хранится в отдельном файле, который не поломает визуальный редактор (так же на всякий случай делаем рядом бекап файла).

    Теперь переходим к коду карты.

    На карте в цикле вы создаете много объектов, у каждого объекта есть свои свойства. А так как основной контент страницы - это карта, то надо наиболее полно ее опиисать, а точнее все объекты. У вас такая конструкция: название + заголвок + описание

    iconContent: 'Название объекта',
    balloonContentHeader: '<a href="ссылка на объект">Название объекта</a>',
    balloonContentBody: 'Характеристика 1: <b>Примечание</b><br>трала ла... тут какаято инфа по объекту'

    А по документации API яндекс карт http://api.yandex.ru/maps/jsbox/balloon_and_hint
    можно добавить еще 2 поля:

    balloonContentFooter: "Подвал",
    hintContent: "Хинт метки"

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


    Идем далее, вспомним то, что я говорит что в компанентах для кеша есть специально подключаемые файлы js+css. Так вот это когда делается на компанентах.
    Компаненты это специальные куски текста, написанные по определенным правилам.
    В общем хочу сказать, что непонятно откуда у вас берутся данные с координатами, но вам можно было сделать решение: в админку забиваются элементы с координатами
    заданные визуально на яндекс карте, очень удобно, а потом все выводится в компанент, но походу вы сделали все через не так.

    Я пишу сумбурно, так как тема широка, если что - пищите в личку, попробую ответить более детально.
    Marketologov нравится это.
Статус темы:
Закрыта.