Плавали, не знаем
Естественно, большое значение имеет практический опыт работы. Если на собеседовании в ответ на вопросы о прошлых разработках, кандидат «плавает» и не может объяснить собственные действия, стоит насторожиться.
Например, программист говорит о разработке системы с использованием MySQL, но не может назвать альтернативные технологии и причину, по которой выбрал эту. При этом в качестве «правильного» ответа, годится даже вариант: «просто я ее лучше знаю».
Как проверить: задать программисту вопросы о деталях прошлых проектов и спросить, почему разработка велась именно так. Если кандидат не сможет внятно ответить, есть вероятность, что он приписывает себе работу команды или других коллег. При этом владельцу сайта необязательно разбираться в тонкостях программирования, достаточно задать уточняющие вопросы.
Открытие ссылок в новом окне
Чтобы создать ссылку, открывающую страницу в новом окне браузера, вы можете воспользоваться атрибутом target открывающего тега элемента <a>. Значение этого атрибута должно быть установлено _blank. Чаще всего ссылки данного вида ставятся, если они перебрасывают посетителя на сторонний сайт. В этом случае создатели сайтов надеются, что посетитель вернется на их сайт по завершении просмотра открывшейся страницы, так как в этом случае ваш сайт остается открытым в исходном окне посетителя и не дает ему забыть о вас. Одни пользователи любят средство отображения в отдельном окне, а у других новые окна могут вызывать скорее чувство раздражения, чем комфорта. Поэтому пользуйтесь этим приемом экономно, лишь к некоторым ссылкам и, при этом, будет не лишним заранее предупредить посетителя, что страница откроется в новом окне.
В следующем примере показано как создать ссылку, открывающую страницу в новом окне браузера:
Если установить значение _blank для всех ссылок на веб-странице, то каждая из этих ссылок будет открываться у посетителя в новом окне, в результате перед пользователем может оказаться великое множество открытых окон. Для избегания подобной ситуации можно присвоить целевому окну индивидуальное имя, которое можно будет указывать в ссылках вместо значения _blank. Следующая ссылка откроется в новом окне с именем _window:
Укажите в каждой ссылке, на своей веб-странице, значение _window вместо _blank и все документы, к которым будет осуществляться переход по ссылкам, будут открываться в том же самом втором окне, а ваш сайт остается открытым в исходном окне.
Атрибут target может принимать следующие значения:
Значение | Описание |
---|---|
_blank | Открыть страницу в новом окне или вкладке. |
_self | Открыть страницу в том же окне (это значение задается по умолчанию). |
_parent | Используется при работе с фреймами и позволяет открыть страницу в родительском фрейме; если на текущей странице нет фреймов, то это значение работает как _self. |
_top | Применяется при работе с фреймами и позволяет открыть страницу в полном окне браузера, заменяя собой все фреймы, которые были на странице; если на текущей странице нет фреймов, то это значение работает как _self. |
framename | Открыть страницу в новом окне с именем framename. |
Шаг 1 — Создание проекта и начальная разметка
Наш проект будет состоять из контейнера с двумя типами дочерних элементов:
- Дочерние элементы, которые можно перетаскивать
- Дочерние элементы, в которые могут быть перетащены элементы
Откройте окно терминала и создайте новый каталог проекта:
Затем перейдите в этот каталог:
Создайте в этом каталоге файл :
Добавьте базовый код веб-страницы HTML:
index.html
Добавьте между тегами перетаскиваемый элемент и элемент (цель перетаскивания):
index.html
Сохраните и закройте файл. Затем создайте файл :
Добавьте стили элементов в файл :
style.css
При этом в приложение будет добавлено определенное форматирование. Теперь вы можете открыть файл в браузере и увидеть элементы и .
Затем мы явно сделаем первый перетаскиваемым, добавив атрибут :
index.html
Сохраните и закройте файл.
В заключение снова откройте файл в браузере. Если мы нажмем на элемент и перетащим его через экран, потребуется визуальная индикация перемещения.
По умолчанию атрибут имеет значение . Это означает, что поведение браузера по умолчанию определяет, является ли элемент перетаскиваемым. Обычно это значит, что выделенный текст, изображения и ссылки можно перетаскивать, не задавая .
Теперь у нас есть файл HTML с перетаскиваемым элементом. Мы перейдем к добавлению обработчиков .
Другие условные конструкции в JavaScript
- Консрукция switch JavaScript .
- Оператор вопросительный знак
Урок №5Операторы ветвления if в языке JavaScript
Операторы ветвления
предназначены для того, чтобы программа могла запускать тот или иной блок кода, в зависимости от верности true или не верности false условия.
Операторов ветвления существует пять видов, в этом уроке мы рассмотрим два из них:
— оператор ветвления if
— оператор ветвления if else
Запускает код, если условие возвращает true .
В качестве условия, в операторах ветвления, обычно выступают операции сравнения или логические операции.
Схема оператора ветвления if , выглядит следующим образом:
If (условие) {
код запустится, если условие вернёт true
}
Приведём пример с оператором ветвления if:
// создадим две переменные
var numOne;
var numTwo;
// присвоим переменным значения
numOne = 5;
numTwo = 3;
if (numOne > numTwo) {
alert(«Условие возвратило true»);
}
В скрипте мы создали две переменные numOne и numTwo , присвоили им числовые значения 5 и 3 .
Далее создали оператор ветвления if , который сравнивает между собой значения двух переменных. Если операция сравнения вернёт true , то запустится код расположенный между фигурными скобками. В нашем случае, появится окошко с сообщением Условие возвратило true . Если операция сравнения вернёт false , то ничего не произойдёт.
Символы двойного слеша // , являются комментарием. После двойного слэша можно написать любой текст, интерпретатор языка JavaScript, будет воспринимать его как комментарий и обрабатывать не будет. Как мы помним, в языках и , тоже можно создавать комментарии.
Оператор ветвления if else
, предназначен для запуска того или иного блока кода, в зависимости от значения которое вернёт условие: true или false
Схема оператора ветвления if else , выглядит следующим образом:
If (условие) {
код запустится, если условие вернёт true
} else {
код запустится, если условие вернёт false
}
Приведём пример с оператором ветвления if else:
Var numOne;
var numTwo;
numOne = 5;
numTwo = 3;
if (numOne > numTwo) {
alert(«Условие возвратило true»);
} else {
alert(«Условие возвратило false»);
}
Присвойте переменной numTwo , число большее чем 5 , например 7 , тогда условие вернёт false и появится окошко с сообщением Условие возвратило false .
Создание URL
Синтаксис создания нового объекта :
- – полный URL-адрес или только путь, если указан второй параметр,
- – необязательный «базовый» URL: если указан и аргумент содержит только путь, то адрес будет создан относительно него (пример ниже).
Например:
Эти два URL одинаковы:
Можно легко создать новый URL по пути относительно существующего URL-адреса:
Объект даёт доступ к компонентам URL, поэтому это отличный способ «разобрать» URL-адрес, например:
Вот шпаргалка по компонентам URL:
- это полный URL-адрес, то же самое, что
- – протокол, заканчивается символом двоеточия
- строка параметров, начинается с вопросительного знака
- начинается с символа
- также есть свойства и , если используется HTTP-аутентификация: (не нарисованы сверху, так как редко используются).
Можно передавать объекты в сетевые методы (и большинство других) вместо строк
Мы можем использовать объект в методах или и почти во всех других, где ожидается URL-строка.
Вообще, объект можно передавать почти куда угодно вместо строки, так как большинство методов сконвертируют объект в строку, при этом он станет строкой с полным URL-адресом.
Связный список (Linked Lists)
Связный список — это структура данных, в которой несколько значений хранятся линейно. Каждое значение содержит своё собственное значение узла, а также содержит данные вместе со ссылкой на следующий узел в списке. Ссылка — это указатель на другой объект узла или на , если следующего узла нет. Если у каждого узла есть только один указатель на другой узел (чаще всего называется ), то этот список считается односвязный (singly linked list); тогда как если у каждого узла есть две ссылки (обычно и ), то он считается двусвязный (doubly linked list).
В этом посте я остановлюсь на односвязном списке.
Если ты хочешь сразу перейти к коду и пропустить объяснение — можешь посмотреть его здесь (TypeScript).
Ручная работа
Есть шутка, что хороший программист – ленивый программист, но в ней есть доля правды. Грамотные специалисты пишут код так, чтобы минимизировать не только усилия тех, кто потом работает с программой, но и собственные. Они стараются использовать чужой готовый код (OpenSource) и в этом нет ничего плохого.
Как проверить: уточнить, как программист подходит к созданию кода, попросить привести пример. Хорошо если изначально он ищет готовое решение, а при его отсутствии, пишет код самостоятельно. Можно, к примеру, спросить у программиста, как он разработает календарь, который может понадобиться в форме заказа для выбора даты доставки. Хороший ответ – найти готовый компонент.
Ход эксперимента
В рамках проведения эксперимента были реализованы следующие шаги:
-
На двух разных документах были созданы группы ссылок. Одна из групп ссылок была скрыта через различные варианты JS, а вторая группа — посредством технологии AJAX.
Рис. 3. Иллюстрация страниц с экспериментом.
-
Анкоры ссылок состояли из слов, которые в такой же последовательности и точной форме не встречаются в тексте документа-акцептора.
-
При этом, отдельные слова из запроса должны были присутствовать в документе для того, чтобы документы прошли аналог «яндексовского» кворума в Google по ссылочному ранжированию.
-
Сами скрипты и подгружаемые ссылки были закрыты от индексации в файле robots.txt.
-
Далее следовало ожидание переиндексации документов в Google и Яндекс.
01 Скрытие ссылок с помощью тега i и JS
Предположим, что у нас в шаблоне есть ссылка вида
<a href="https://n-wp.ru/">Блог о WordPress</a>
и мы хотим, чтобы поисковые системы не видели ее, как внешнюю ссылку. Для этого заменяем тег a на тег i, а параметр href на параметр title:
<i title="https://n-wp.ru/">Блог о WordPress</i>
После такой замены Блог о WordPress для поисковых роботов станет не ссылкой, а обычным текстом. Ну а чтобы для живых людей этот текст все же отображался в браузере, как ссылка, по которой можно кликнуть и перейти, внедрим JS-скрипт. Для этого нужно создать файл extlink.js с содержанием
jQuery(document).ready(function(){ $("i").each(function(){ $(this).replaceWith("<a target="_blank" rel="nofollow" href="http://">" +$(this).html() + "</a>"); }); $("a").not("a").attr("target", "_blank"); });
Этот файл нужно скопировать в папку JS, которая находится в папке используемой вами темы, и присоединить. Делается это одной строчкой, которую нужно вставить в файл header.php или footer.php:
<script type="text/javascript" src="/js/extlink.js">
Как работает этот скрипт? В момент окончания загрузки страницы браузером находятся все теги i с атрибутом title. Они по очереди обрабатываются: в них на лету тег i заменяется на тег a, а атрибут title заменяется на атрибут href. После этого полученный код ссылки проверяется, и для поисковых систем исключаются все ссылки с адресом n-wp.ru.
Плюсы этого способа:
- Все легко и понятно.
- Событие click происходит по элементу a — это легко понимают всевозможные счетчики и бары.
- Для элемента i не нужно задавать отдельное оформление в css, так как он на лету преобразуется в элемент a, на который распространяются общие правила из style.css.
Минусы этого способа:
- Наличие лишних преобразований при формировании страницы.
- Если вам нужно скрыть ссылку от фиксации барами и счетчиками, то в большинстве случаев способ не подходит. Например, хотя сам поисковый робот Яндекса и не воспринимает такую ссылку, как полноценную (для него ее нет среди внешних ссылок на странице), Яндекс.Метрика все же умеет определять клики по такой скрытой ссылке.
Атрибуты и свойства тега
1. Атрибут target=»параметр», который может принимать следующие значения:
- _blank — открывает страницу в новом окне
- _self — загружает страницу в текущее окно
- _parent — загружает страницу во фрейм-родитель
- _top — отменяет все фреймы и загружает страницу в полном окне браузера
Пример с target
В этом случае мы получим ту же ссылку, что и в первом примере, но перейдя по ней, страница откроется в новом окне.
Чаще всего применяется значение _blank, поскольку он позволяет открывать страницу в новой вкладке. Это удобно для пользователя, поскольку у него остается открытой текущая страница в соседней вкладке.
Пример с подсказкой title
Преобразуется на странице в следующее:
В данном случае подсказка высвечивается стандартным способом. Однако можно также сделать более красивую всплывающую подсказку: как сделать красивую всплывающую подсказку для ссылки »
3. Атрибут class=»название класса» задает класс стиля для ссылки. О классах Вы уже знаете из предыдущего урока (стили в html). Для тега a стили имеют небольшие отличия. Объясню все нюансы на следующем примере.
Пример
Преобразуется на странице в следующее:
как заработать на сайте
Поясню выше описанный пример. Класс, в котором мы описали тег <a> называется list. Давайте разберемся, что значат приписки visited, link и hover.
- a.класс:visited стиль для ссылки, который пользователь уже посетил. Это позволяет пользователю не заходить на одну и ту же страницу дважды, даже если у ссылки на эту страницу будут разные анкоры.
- a.класс:link стиль для тех ссылок, которые ещё не посещал пользователь (можно не указывать приписку «:link», поскольку a.класс — делает то же самое).
- a.класс:hover стиль ссылки при наведении курсора. Обычно для этого стиля делают другой цвет, а также подчеркивание, чтобы дать пользователю понять, что ссылка стала активной.
4. Атрибут rel=»параметр» — определяет отношения между текущим документом и документом, на который ведет ссылка
Этот атрибут носит важное значение для поисковых машин, но браузерами никак не трактуется. Может принимать следующее значения:
Визуально никаких отличий Вы не заметите, однако для поисковых систем эта ссылка не будет передавать вес. Поэтому мой совет для всех: закрывайте все внешние ссылки атрибутом rel=»nofollow», чтобы сохранить вес на Вашем сайте.
4.2. canonical — в случае множества дублей на сайте, указывает главную страницу среди всех дублей
Есть также множество других значений атрибута rel, но они вообще никак не влияют не на внешний вид, ни на поисковые системы, поэтому рассматривать их не вижу смысла.
Исходный код страницы
Для начала, я хочу очень кратко рассказать про то, из чего состоит веб-страница. Вы можете открыть любой сайт, например мой блог и нажать(или правой кнопкой на странице и выбрать «Исходный код»). Вы увидите код, это обычный текст в формате HTML, который браузер преобразует в веб-страницу. Ключевые слова, заключенные в «<>» — называются тегами, свойства внутри них — атрибутами и значениями атрибута. Все это нам пригодится, чтобы отыскивать необходимые теги с нужной информацией.
Пример:
Что же делает браузер с этим кодом? Браузер, руководствуясь этим кодом, располагает информацию на странице в указанном порядке, подгружает таблицы стилей css, которые добавляют оформление элементам, подгружает и вставляет картинки, скачивает и выполняет различные скрипты. Правила, по которым браузер это делает — называются спецификацией, которая необходима, чтобы все браузеры отрисовывали страницы и обрабатывали скрипты одинаково.
Управление DOM
Это интересная тема. Чаще всего, описывая обычную работу программиста, про это забывают. Может быть, вы изучили jQuery, и вам и не нужно было учиться навыкам управления DOM. Может, вы просто работаете с front-end фреймворком, где управление DOM используется редко. Однако я считаю, что это очень важный аспект для понимания JavaScript, как минимум во front-end. Понимание того, как работает DOM и как получать доступ к элементам, поможет вам лучше понять, как работают сайты. К тому же, обязательно наступит момент, когда вам придется работать с DOM, даже если вы используете современные front-end фреймворки, и вы точно не хотите вводить jQuery в ваш , чтобы просто получить доступ к элементу.
Photo by LinkedIn Sales Navigator on Unsplash
Тестирование
Тестирование — это действительно очень важная часть разработки приложений, в том числе и в JavaScript. При написание кода, прежде чем запустить функцию, вы (в идеале) должны провести тестирование, пусть даже и ручное. Лучше будет применять автоматическое тестирование. Существуют разные типы тестов: модульное, сквозное, нагрузочное тестирование, проверки безопасности и front-end (например, подключен компонент или нет). Также есть множество различных тестовых сред: enzyme, jasmine, mocha, chai, и т.д. Сейчас мне больше всего нравится ava.js, советую изучить её, если вы до этого не работали с автоматическим тестированием.
Птичий язык
Еще один важный момент – способность кандидата разговаривать на «человеческом» языке. Хороший специалист сможет объяснить свою работу простыми словами. Но если соискатель разговаривает исключительно терминами, ему будет сложно взаимодействовать с коллегами и владельцем компании.
Как проверить: попросите рассказать о какой-то ошибке, за которую ему «влетело» от руководства. Например, на сайте 2 недели не работала форма «обратной связи». Представьте, что это ваш сайт.
Уточните в чем была суть ошибки, как он о ней узнал, как нашел причину и устранил ошибку. Если соискатель будет рассказывать «заумными терминами» — попросите разъяснить. Если вы все еще не удовлетворены объяснением, сработаться с ним будет сложно.
Как выполнить проверку
Убедитесь, что роботы Google могут найти и просканировать ваши структурированные данные. Для этого выполните проверку следующим образом:
- Откройте инструмент проверки расширенных результатов.
-
Введите URL, который вы хотите проверить.
- Нажмите Проверить страницу.
Успех. Если все действия выполнены правильно и заданный вами тип структурированных данных поддерживается инструментом, появится сообщение «Страница подходит для показа расширенных результатов».
При проверке структурированных данных, которые не поддерживаются инструментом проверки расширенных результатов, изучите обработанный код HTML.
Если этот код содержит ваши структурированные данные, роботы Google смогут считать их.Неудача. Если на экране появятся сообщения об ошибках или предупреждения, это может быть связано с некорректным синтаксисом или с тем, что вы не внедрили какие-либо свойства.
Ознакомьтесь с документацией по нужному типу структурированных данных и проверьте, все ли свойства добавлены. Если проблему решить не удастся, изучите руководство по устранению неполадок, возникающих из-за JavaScript.
Манипуляция рекламой
Реклама в интернете появилась далеко на сразу — вначале не предполагалось, что на интернете можно будет зарабатывать.
Интернет-реклама — это особый вид рекламы, заключающийся в продвижении товаров и услуг в электронном виде.
Для многих это основной вид заработка, поэтому реклама в сети становится все более изощренной. Она не просто содержит информацию о достоинствах товара, а часто создает целую иллюзию реальности, существование в которой без рекламируемого продукта невозможно.
Рассмотрим какие манипулятивные техники используются в интернет-рекламе в настоящее время.
Воздействие в форме утвердительных высказываний.
Реклама смартфона Samsung
Производители смартфонов не только освещают достоинства гаджетов, но и большое внимание уделяют имиджу, который обретет счастливый покупатель. На картинке выше видим рекламу, на которой написано «Смартфон без границ»
То есть потребителям пытаются внушить, что с этим гаджетом их возможности станут безграничны
На картинке выше видим рекламу, на которой написано «Смартфон без границ». То есть потребителям пытаются внушить, что с этим гаджетом их возможности станут безграничны.
В рассматриваемом примере рекламы мы видим прием манипуляции, который называется «воздействие в форме утвердительных высказываний». Суть его заключается в том, что такие небольшие фразы не вызывают никаких подозрений и воспринимаются как факт.
Таким образом, люди на подсознательном уровне начинают думать, что это смартфон сделает их лучше, поможет решить им свои проблемы.
«Эффект новизны».
Людей привлекает все новое. Когда человек заинтересовался новинкой и попался на крючок — у него немного притупляется рациональное мышление. Он не может оценить, нужен ли ему предлагаемый товар. Все это создает позитивное отношение к рекламируемому товару и делает человека возможным покупателем.
Постоянное напоминание.
Здесь речь идет о контекстной рекламе. Специальные программы отслеживают, чем вы интересуетесь — и на основании запросов предлагает товар.
Данный вид рекламы пытается убедить пользователя в необходимости товара, рассказывает, как легко можно его приобрести. И что самое главное — объявление постоянно мелькает перед глазами, не давая забыть себя. Все это увеличивает вероятность покупки.
Еще одной разновидностью является директ-рассылка. Люди часто оставляют адрес своей электронной почты в интернете, на который потом и рассылается реклама. Сейчас этот вид рекламы теряет свою популярность — однако тоже присутствует.
Рассылка от сайта labirint.ru
Проблемная ситуация.
Данный прием относится к методу убеждения. В рекламе ставится некая проблема, которая требует решения — и рекламируемый товар непременно поможет с ней справиться.
Употребление ключевых слов.
Это такие слова, которые создают в сознании человека определенные образы и ассоциации. Например, слова: «мягкий», «теплый», «чистый», «сильный» вызывают у нас одни эмоции, а слова: «шумный», «скользкий», «темный», «клейкий» — другие, поэтому вряд ли мы их встретим в рекламе.
Отсутствие отрицательных частиц.
В нашей статье «Как мошенникам удается обмануть нас в интернете: признаки и техники манипуляций» мы уже рассказывали, какое влияние оказывают отрицательные конструкции на человека. Поэтому в рекламах, вместо того, чтобы говорить: «Вы не хотите болеть», говорят «Вы хотите быть здоровым».
Проблема подсчета ссылок в стратегии сборки мусора в JS
Позвольте мне кратко рассказать о принципе стратегии сборки мусора по ссылкам в JS. Когда переменной присваивается значение ссылочного типа, счетчик ссылок для значения этого ссылочного типа увеличивается на 1. Точно так же, как переменной obj1 в коде назначается адрес объекта obj1, переменная obj1 указывает на объект obj1 (вверху справа), а счетчик ссылок obj1 (вверху справа) увеличивается на 1. Когда значение переменной obj1 не равно Когда адрес объекта obj1 (вверху справа) снова становится, счетчик ссылок объекта obj1 (вверху справа) будет уменьшен на 1. Когда счетчик ссылок объекта obj1 (вверху справа) станет равным 0, сборщик мусора вернет его. Поскольку в настоящее время нет переменной, указывающей на вас, нет возможности использовать вас.
Почему возникает проблема с кажущейся разумной стратегией сборки мусора?
Это вызвано круговой ссылкой, упомянутой выше, давайте проанализируем ее ниже. Когда переменная obj1 выполняет объект obj1, счетчик ссылок объекта obj1 увеличится на 1, а значение счетчика ссылок равно 1, тогда атрибут b объекта obj2 указывает на объект obj1, поэтому счетчик ссылок объекта obj1 в это время 2. Точно так же счетчик ссылок объекта obj2 также равен 2.
Когда код выполняется, переменным obj1 и obj2 присваивается значение null, но в это время счетчики ссылок двух объектов obj1 и obj2 равны 1, а не 0, поэтому сборка мусора не будет выполняться, но эти два Объекты больше не используются, и их нельзя использовать вне функции, поэтому это вызывает утечку памяти.
В широко используемой стратегии удаления и повторного использования тегов вышеуказанные проблемы не возникнут. Общий поток стратегии удаления и повторного использования тегов таков. В начале все переменные помечены, и функция будет изменена при выполнении функции cycularReference. Эти метки внутренних переменных очищаются, и метки добавляются после выполнения функции. Переменные, которые были очищены и отмечены, считаются переменными, подлежащими удалению, потому что переменные в этих функциях больше не доступны. Две переменные, такие как obj1 и obj2 в приведенном выше коде, отмечены в начале и очищаются после ввода функции, а затем помечаются после выполнения функции, она рассматривается как очищаемая переменная, поэтому счетчика ссылок нет. Проблема возникает из-за того, что при удалении метки не учитывается количество ссылок.