Нав'язливий JavaScript коли-небудь добре?


9

Я думав, що якщо для всіх користувачів веб-сайту потрібно ввімкнути JavaScript, чи нормально використовувати нав'язливий JavaScript?

Я все за прогресивне вдосконалення, але який сенс, коли просунутий веб-додаток відскакує від користувачів у двері, якщо у них відключений старий браузер чи JavaScript?

У нас дуже тонка цільова аудиторія, і ми можемо сказати нашій цільовій аудиторії, який браузер та плагіни / функціональні можливості вони повинні мати. Отже, моє запитання полягає в тому, чи добре в цьому випадку змішувати JS та HTML? Як і використання атрибутів onclick.


1
"Якщо для всіх користувачів веб-сайту потрібно ввімкнути JavaScript ... якщо у них ... JavaScript відключений?" <- Це суперечність, і я не впевнений, як дати корисну відповідь на це невирішеною.
HedgeMage

3
Зауважте, що залежно від вашої цільової аудиторії та ринку, можуть існувати закони про доступність, які вимагають, щоб ваші веб-сайти були доступні для всіх користувачів, включаючи людей з обмеженими можливостями. Що це означає на практиці для JS, я не знаю. AFAIK (IINAL), де я є, у нас є такі закони, але ще не було тестових випадків для розробки деталей.
Джеймс

16
Що ви маєте на увазі під "нав'язливим" javascript? Я не знайомий з терміном.
Макке

2
Отже, ваше питання в основному таке: чи коли-небудь нормально писати банальний код? Так, для прототипів та проектів, які досить малі та не потребують технічного обслуговування / оновлення після закінчення. Інакше через півроку ви просто зіткнетеся з обличчям, тому що вам знадобиться година, щоб зрозуміти, що могло бути правдоподібно, якби ви вклали ще кілька секунд, коли поставили його на місце.
back2dos

3
Я подумав, що це питання я буду задавати, якщо все було гаразд, щоб змінити розмір вікна браузера у когось або мати тони спливаючих вікон.
whatsisname

Відповіді:


17

Це бізнес-рішення, а не проектне рішення.

Існує вартість надання версії веб-сайту, який працює без JavaScript (або Flash, або Silverlight). Бізнес повинен вирішити , втрати в доходах / відвідувачів , чи варто це чи ні.

Тож якщо для написання цієї версії коштуватиме 10 000 доларів США (число може бути з великої сторони, але воно існує лише для цього прикладу), то чи буде бізнес окупати ці витрати протягом життя сайту? Якщо ні, то не надайте цю версію.

Однак якщо на написання цієї версії коштує лише 100 доларів, то було б доцільно забезпечити витончену деградацію.

Прийнявши бізнес-рішення, орієнтуючись лише на браузери, що підтримують JavaScript, і очікуєте, що у ваших користувачів буде ввімкнено JavaScript, тоді має сенс зробити так, щоб ваша програма скористалася тими функціями, які у вас зараз доступні. Єдине, що вам потрібно буде зробити, це (як це робить переповнення стека) - це попередження про те, що сайт не працюватиме належним чином, якщо користувач не ввімкнув його.


2
Я думаю, ви мене нерозумієте.
Петах

5
Ви повинні ласкаво сказати нам, що WTF "нав'язливий JS" означає уникнути непорозуміння. Ви вже просили це зробити (звернено 7 разів)!
maaartinus

1
У минулому я створив кілька вишукано принижуючих сторінок і виявив, що html та javascript набагато менш прозорі, якщо ви все ще хочете запропонувати відвідувачам, що надають JS, найкращий досвід користувача. Сторінки НЕ МОЛЬКІ важче створити, і я вважаю, що у хлопця, який підтримує сторінку, виникнуть певні труднощі після вашого коду. Тож, безумовно, є довгострокова вартість ремонту, яку потрібно пам’ятати, оцінюючи витрати на те, щоб ваш сайт вишукано принизив якість. Мені здалося, що це дуже спокусливо йти на компроміси з підтримкою JS з підтримкою JS ..
Thomas Stock

1
@maaartinus, нав'язливий javascript - це протилежність ненав’язливому javascript en.wikipedia.org/wiki/Unobtrusive_JavaScript
Petah

1
Гаразд, тому я можу лише сказати ... html + js - це чума (зламані реалізації, ігноруючи дивні стандарти), і я мінімізував би зусилля так, як писав Томас Сток. Постарайтеся, щоб вона працювала ідеально у вибраному веб-переглядачі (і не вибирайте IE6: D) a та бути переносимою для інших. Замість того, щоб працювати над усіма проблемами, витрачайте свій час на функціональність.
maaartinus

20

Щось ще ніхто не виховував ...

99% веб-сайтів вітають конкретного відвідувача, один з яких майже не має JavaScript. Цей відвідувач має ім'я: Googlebot .

Важлива причина, що всі повинні дбати і про сліпих відвідувачів ...

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


4
Справді. Ми вдосконалили один з наших сайтів, щоб зробити його більш доступним для сліпих, і як ненавмисний наслідок трафік, отриманий від Google, помножився майже на 10 в один рік.
Кріс

1
Так, але веб-сайт не для публіки. Тож пошукові рейтинги не застосовуються.
Petah

3
@ Petah: Чи розглядали ви чітко і коротко, які ваші точні вимоги, ситуації та обмеження стосуються питання, а не пересипаючи невеликі фрагменти інформації тут і там у коментарях?
ПРОСТО МОЕ правильне ДУМКА

1
Ти більше не правий. Так як Googlebot вже досить довго працює javascript (не дивно, враховуючи, що Google працює як на двигуні V8, так і на angularjs).
maaartinus

8

Люди, які пишуть речі для конкретних внутрішніх середовищ, є головною причиною, чому IE6 все ще існує.

Подумай над цим


4

Якщо ви робите лише веб-сайт JS (можливо, "додаток" у цьому випадку є кращим словом), так звана "ненав'язливість" JS не має великого значення, як у випадку, коли вам потрібно граціозно перейти до не- Версія JS

Однак JavaScript, написаний ненав'язливим способом, взагалі простіше писати (і, принаймні, я вважаю це таким чином) та підтримувати. Простіше ввести зміни в макет HTML, які не порушують JS, і змінюються на JS, не турбуючись про порушення HTML.


4

Якщо ви будуєте веб-сайт, я б залишав ненав’язливим JavaScript. Однак якщо ви будуєте якусь форму програми (наприклад, Google Docs), JavaScript буде досить нав'язливим.

JavaScript і HTML5 чудово підходить для створення програм, якщо це ваша потреба, але це справді вибір бізнесу.


Так, це більше нагадує документи Google, ніж веб-сайт. І ми сильно використовуємо HTML5.
Petah

Виправте мене, якщо я помиляюся, але я думаю, ви все ще можете використовувати більшість понять у ненав’язливому JavaScript, не обов'язково створюючи безлад у коді? Це концепція, яка виділяється і викликає найбільше шуму для мене. Можливо, ви маєте на увазі деякі інші аспекти ненав’язливого JavaScript, яких вам слід уникати, використовуючи HTML5, наприклад, зворотну сумісність з користувачами, які не мають JavaScript? Вам доведеться вибрати та вибрати найкраще для вас та проекту, якщо ви зможете обґрунтовано обґрунтувати причини та проаналізувати ризик, тоді я думаю, що це все добре :) +1
jmort253

Я говорю про те, як буде функціонувати сайт, якщо Javascript вимкнено. Бувають випадки, коли він буде повністю функціональним (якщо він може бути не таким приємним) та інші, коли він вийде з ладу повністю. Мене не турбують старі браузери, які не підтримують JavaScript (Netscape 1). Звичайно, у будь-якому випадку немає підстав писати JavaScript BAD
Zachary K

2

Більшість користувачів (мої користувачі, я не знаю про ваших користувачів) мають доступний і увімкнутий JavaScript. Дамо цим користувачам чудовий досвід користувача. Однак вам все одно потрібно надати версію свого сайту, яка працює без Javascript. Я знаю, що скласти 2 версії, але це так, як це йде в веб-розробці. (Насправді вам, можливо, доведеться створити кілька версій, третя може бути мобільною версією вашого сайту).

Те, що ви не хочете робити, - це дизайн для найменш розповсюдженого знаменника: "Ну, є деякі користувачі, у яких відключений Javascript, тому ми збираємось створити наш сайт, щоб він працював на них добре - немає Javascript, натисніть сервер на все . " Це просто карає більшість ваших користувачів, які мають Javascript.


Що я кажу, що жоден з користувачів не відключений JavaScript. Якщо вони роблять, вони не можуть отримати доступ до сайту.
Petah

@ Пета, ну, це теж не чудово. Ви не хочете відмовлятися від користувачів без Javascript. Отже, що ви запитуєте тоді, оскільки я виганяю користувачів без Javascript, чи можу я помістити JS у той самий файл зі своїм HTML?
Марсі

У нас дуже тонка цільова аудиторія, і ми можемо сказати нашій цільовій аудиторії, який браузер та плагіни / функціональні можливості вони повинні мати. Отже, ви моє запитання: змішувати JS та HTML в цьому випадку добре. Як і використання атрибутів onclick.
Петах

4
@Petah, є й інші причини, щоб уникнути змішування JS та HTML. Це ті самі причини, що ми уникаємо змішування стилів та HTML - розділення проблем. Якщо ваш стиль змішується з вашою структурою, яка змішується з вашою поведінкою, вам потрібно щось дуже важко підтримувати. Зробивши це "ненав'язливий" спосіб на деякий час, ви побачите, наскільки елегантними є ваші файли та наскільки простіше вносити зміни.
Марсі

2
@Petah, чи є у вас величезний файл JS для всього вашого сайту, і там все йде? У мене приблизно один JS-файл на сторінку, і це добре працює для мене. Воістину "загальні" речі - це все, що є у спільному файлі JS.
Марсі

2

Ви згадали про використання атрибутів onlick. Плануєте використовувати обробник подій JavaScript для навігації по сторінках?

Я б рекомендував проти цього не з однієї причини: це порушує середнє клацання .

Для регулярного клацання посилання, якщо припустити JavaScript, вони будуть функціонально еквівалентними:

<a href="#" onclick="window.location = 'myPage.htm';">Click here</a>
<a href="myPage.htm">Click here</a>

Якщо ви спробуєте посередині натиснути перший приклад, ви отримаєте порожню сторінку, а не myPage.htm.

Окрім цього прикладу, я думаю, що нормально використовувати нав’язливий JavaScript, якщо він має для вас сенс для бізнесу. Написати (але не обов’язково підтримувати) вбудований JavaScript потрібно менше часу, і втрата прогресивного вдосконалення може не мати важливого значення у вашій ситуації.


У цьому випадку це не для навігації, а для кнопок "Оновити", "Видалити", "Створити" тощо
Petah

У такому випадку я б припустив, що це особистий стиль. Мені здається, що нав’язливий метод швидше / простіше розпочати, але «правильний» спосіб бути більш чистим і легшим у догляді. Однозначно є нечіткий фактор, що робить правильний шлях.
GavinH

+1 - Простіше зберегти код чистим з самого початку, якщо він ненав'язливий. Я вважаю, що якщо я занадто заплутався на початку, це може бути занадто важким, щоб спробувати виправити проблеми пізніше. Мене переповнює. Я вважаю за краще займатися якомога кращою роботою, щоб, коли я повертаюся назад, не так вже й погано було робити рефактор.
jmort253

2

Нав'язливий JavaScript був у порядку 10 років тому. Це також добре, якщо ви любитель, або ви будуєте дослідний прототип, або якщо є якась обставина, яка цього потребує, наприклад, залежність від застарілого коду або керованого даними коду, і це просто зрозуміло б занадто багато, щоб виправити аль

Якщо ви будуєте щось з нуля, дотримуйтесь стандартів, пишіть хороший, чистий, бездоганний код. Напишіть щось, чим ви будете пишатися, і що не захворіє на рік з цього моменту, коли якийсь бідний чмоха просить вас про допомогу, бо вони не розуміють хакінгу, який ви зробили. Напишіть щось, що гарантує, що ваші веб-дизайнери зможуть легко замінювати CSS без необхідності копати їх через брудні HTML та JavaScript.

Побудуйте додаток таким чином, щоб він мав можливість рости, щоб будь-який розробник міг зайти і підтримувати його. Вкладений зараз час дозволить заощадити час у майбутньому, якщо не ваш час, то чужий.

Переконайтесь, що JavaScript можна повторно використовувати в іншому контексті. Переконайтеся, що повний перепроект веб-сайту може бути саме цим, перепроектуванням, а не повною перебудовою того, що вже існує, але просто не було побудовано жорстко.

Уявіть, як неприємно було б витратити таку ж кількість часу на реконструкцію, як і спочатку її побудувати.

Повірте мені досвід, ненав’язливий JavaScript не дозволить вам зробити деякі дорогі помилки.


2

Добре, просто зателефонуйте мені на зберігача склепу на весь некролог, який я роблю, але я ніколи не відчував, як справжня цінність цього була правильно зрозуміла. Історично стверджувалося, що "ненав'язливий JavaScript" або, не дозволяючи JS вийти з HTML за допомогою вбудованих атрибутів обробника подій HTML та тегів сценаріїв, які максимально не посилаються на файл, є величезним ключовим елементом:

  • Проблеми доступності
  • SEO
  • І прогресивне вдосконалення

ЛАЖЕ! (ну, тепер би вони були)

Правда в тому, що ви можете зробити технічно нав'язливий JavaScript і все-таки витягнути вищевказані три елементи. Якщо ви не будували HTML-вміст динамічно, це було великим SEO-ні-ні в день.

Але зупинись і подумай ... Про ВАС!

Дійсно, велика вигода, головна і найпомітніша вигода від збереження розлуки завжди були прямою вигодою, яку розробник отримує від цього. Ви можете мати стільки обробників подій, скільки вам потрібно, для того ж елемента html для тієї ж події, що і зручно. Це означає, що якщо тег з class="some_class"завжди отримує певну поведінку, але також отримує деяку бонусну поведінку, коли він знаходиться всередині id="bonus_behavior"діва, нам не потрібно починати возитись з логікою всередині нашого дозволеного обробника подій, щоб відгалужуватися на це. Ми можемо просто додавати або не додавати обробники в залежності від контексту.

Легко читати занадто

Ще одна перевага - розбірливість. Це було особливо критичним, коли інструменти браузера складалися з ексклюзивного повідомлення про помилку IE, яке повідомляло вам, що щось не так, [object]але IMO, це все ще велика справа. CSS тут, JS там і HTML - це місце, де вони і сервер зустрічаються. Оскільки всі ці речі збираються в одному місці, має сенс покластися на гачки (ідентифікатори, класи та ієрархію), щоб створити шар абстракції, який використовується для підключення до HTML.

IMO, чим більше ви МОЖЕТЕ тримати HTML, CSS та JS, тим простіше не просто читати, а й змінювати та розуміти, що відбувається. Я бачу порожній div з "динамическим_комбо_бокс" як клас, і я гарно уявляю, що щось робить фантазійний вибір, який завантажує дані динамічно. Я маю на увазі, як знайти, що в JS та CSS, і якщо я зіткнуся з класом у цих питаннях, я буду гарно уявляти, про що йдеться, і як це знайти в HTML.

Занадто просто зробити рівний слойпер

І звичайно, розбірливість має тенденцію йти на руку з ремонтом. Коли ви просто робите речі безпосередньо, скидаючи все це в теги скриптів, де трапляється відповідний HTML, настільки часто, як ні, людям стає простіше просто вирізати та вставити цей скрипт у HTML іншої сторінки, над якою вони працюють, коли вони хочуть подібної функціональності, а значить, зараз у вас є одне, що, швидше за все, з часом стане двома набридливо схожими, але не на 100% схожими речами, поведінка яких з часом може стати проблематичною, оскаржуючи очікування і вимагаючи додавання більш безглуздих розгалужень для обробки винятків, для чого потрібно інший не став.

Таким чином, таке поводження з цими гачками HTML заохочує розумне використання коду. Якщо вам потрібна гілка поведінки для альтернативної реалізації, ви просто перейдете до тієї ж функції і обробіть її там за допомогою ієрархії HTML або, можливо, атрибут даних, що ініціює деяку альт-поведінку. Це одна зупинка для тих, хто хоче зрозуміти, як працюють елементи користувальницького інтерфейсу певного типу, а ті, які відверто лінуються-в-поганому - нарізати та вставити типи, зроблять правильне / більш-ремонтоване, лише тому, що це найпростіше зробити це зараз, і це найкращий спосіб зробити ремонтопридатність. Зробити це найпростішим "духом", що можна зробити навіть для того, хто не міг хвилюватись, чи то через паніку чи апатію.

А як щодо 2014 року?

Це може бути легітимним моментом, що в сучасних односторінкових програмах деякі з цих стихійних речей, можливо, не слід приклеювати так догматично, як це було, але повірте мені, коли я кажу, що я не думаю, що я єдиний, хто було продано на ньому, оскільки це врешті-решт полегшує роботу. Я лінивий (сподіваюся) здебільшого-добрий. Мені подобається, коли мені потрібно змінити лише речі в одному місці, щоб отримати зміни в усьому додатку, коли мені потрібно лише шукати в одному місці, щоб зрозуміти, що таке помилка, і коли мені легко зрозуміти, що це за чорт що відбувається і як найкраще повторно використовувати цей код, щоб зробити щось дуже схоже.

Це добре, як добре розділити БД або рівень даних. Це в кінцевому підсумку - чому я не зробив це, що економити час, як взяти всі п’ять хвилин, щоб прати білизну ввечері, а не витрачати 10 хвилин на замерзання ваших боксерів і проведення перевірки параноїдального запаху наступного ранку.

Для мене саме ті егоїстичні мотивації завжди були головним моментом, чому я тримаюсь не просто ненав’язливого JS, але поділу стилю / поведінки / змісту стосується, наскільки це можливо, навіть те, що ЩО-Freaking-WG робить їх найчеснішим заглушувати ці проблеми зрозумілим дивовижним та крутим / зручним способом.

Тепер, коли всі роблять СПА і майже нерозумно намагаються переконати бізнес, що нам слід піклуватися про людей, які працюють без JS (доступність тепер може бути оброблена контентом, створеним JS), схоже, що наступне покоління розробників JS піклується менше з цього приводу, окрім IMO, все ще є виграш, і це переважно для вас, розробника, який пише та підтримує цей матеріал. І справді, ця виграш завжди повинна була бути найбільш підкресленою, але ніколи не була з якихось причин, тому що в кінцевому рахунку виграє вам, а також продукту щасливою випадковістю через те, що простіше налаштувати / змінити / налагодити.

Це колись гаразд?

Ну так, я думаю. У одноразовому додатку, що викидається на конкурс, чи щось можливо. Але я б все одно це робив лише тому, що мені це звично, і це насправді не важче зробити.


1

Якщо ви знаєте своє цільове робоче середовище, Javascript та такі рамки, як jQuery, можуть бути справжньою знахідкою. Наприклад, у корпоративному середовищі, де у ДП є Javascript та IE8, ніж його більш ніж безпечно писати інтенсивні програми клієнтського браузера.


1

Полегшити витончену деградацію - лише один із багатьох факторів, які роблять ненав’язливий JavaScript привабливим вибором, і, на мою думку, він не є найважливішим.

З особистого досвіду я б сказав, що якщо ви говорите про більш масштабний проект, який, швидше за все, розвиватиметься з часом, то використання ненав'язливого стилю зробить додаток ЛОТИ простішим у обслуговуванні, налагодженні та рефакторі. Це найбільша причина, чому ми завжди використовуємо ненав'язливий стиль, навіть на сайтах, які вимагають, щоб JavaScript був включений для всіх відвідувачів.


+1 до Шангу за цей дорогоцінний камінь "Полегшити витончену деградацію - це лише один із багатьох факторів, які роблять ненав'язливий JavaScript привабливим вибором, і, на мою думку, він не є найважливішим". Реалізація Javascript часом може бути двогранним мечем, я особисто знайшов
MattyD

1

Загалом, якщо ви розробляєте традиційний "веб-сайт", який доступний анонімно, індексується пошуковими системами, і де дохід створюється рекламою, то вам слід забезпечити витончене зменшення. Ідея полягає в тому, що такий веб-сайт живе і вмирає через доступність, тому обмеження доступності означає втрату тони переглядів сторінок і, таким чином, дохід від реклами.

Обмежений доступ, як правило, неіндексується та не "дохід від реклами" на веб-сайті (веб-додаток) може бути набагато більш гнучким. Це зводиться до рішення між шириною підтримки, глибиною особливостей та вартістю розробки. Подумайте про це як про розробку традиційного додатку: яку платформу ви підтримуєте і які мінімальні специфікації? Якщо ви орієнтуєтесь лише на одну платформу та обмежені технічні характеристики, ви можете зосередитись на забезпеченні чудового продукту із меншими витратами на розробку та підтримку, за рахунок втраченої потенційної частки ринку.

Приклад: Пошук Google - це веб-сайт. Google Документи - це веб-додаток. Пошук Google не викликає надмірностей і може функціонувати однаково без JavaScript, CSS та / або зображень тощо ... - він працює в текстових режимах браузерів так само, як і в останніх браузерах GUI. Документи Google просто не працюють з відключеним JavaScript, і він навіть не погіршується, навіть не попереджає ввімкнути JavaScript.


1

Я вважаю за краще більшість макетів і навігації обробляються в CSS. Так, Lynx може не підтримувати його, але всі повнофункціональні браузери, про які я знаю, не можуть вимкнути його. Тоді JavaScript можна використовувати для більш яскравих, але не потрібних речей. Мені також подобається Ruby on Rails для цієї мети. Він може зробити багато того, що JavaScript потрібно буде робити на стороні сервера, поки вам не потрібні динамічні оновлення сторінки.

Більш орієнтований на відповідь на запитання: Я НЕ ЛЮБИТЬ потрібний JavaScript, але є бізнес-випадок, коли він потрібен, як зазначив ChrisF.


0

Javascript - це стандарт дефекто, коли мова йде про будь-який тип динамічного контенту, що доставляється клієнтом, якщо у них немає JS, вони, ймовірно, не матимуть сріблястого світла.

Тоді вам доведеться подумати про свій ринок / аудиторію, ви програмісти.stackexchcange або bbc.co.uk/news? дуже різні аудиторії.


0

Оскільки ви можете переглядати Інтернет та бачити "нав'язливий javascript" на багатьох сайтах, на ваше основне питання відповіли, так, це нормально, і багато популярних сайтів це роблять, навіть Google.

Важливіше, однак, є витончена деградація функціональності, хоча ви наполягаєте на тому, що ваші користувачі повинні мати Javascript, ви повинні забезпечити гідний рівень досвіду для користувачів, які не користуються js, інакше вони ніколи не будуть охоче повертатися.


Їх навіть ніколи не пустять повз першу сторінку.
Petah
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.