Умови використання імен JavaScript


12

Я з Java, я новачок у JavaScript. Я помітив багато методів JavaScript, використовуючи поодинокі імена параметрів символів, наприклад, у наступному прикладі.

doSomething(a,b,c)

Мені це не подобається, але інший розробник JavaScript переконав мене, що це робиться для зменшення розміру файлу, зазначивши, що файли JavaScript потрібно перенести в браузер.

Тоді я виявив, що розмовляю з іншим розробником. Він показав мені, як Firefox буде усікати імена змінних, щоб швидше завантажувати сторінку. Це стандартна практика для веб-браузерів?

Які найкращі практики називання конверсій, яких слід дотримуватися при програмуванні в JavaScript? Чи має значення довжина ідентифікатора, і якщо так, то в якій мірі?


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

4
Я часто бачив розробників, які сперечаються про переваги коротких імен змінних. Не слухайте їх. Це майже завжди привід для "я занадто великий палець, щоб вигадати гарне ім'я" або "я лінивий набрати стільки символів".
Док Браун

@DocBrown: Навіть мені це не сподобалось. Оскільки я не є знавцем JavaScript, я хотів знати найкращу практику.
ManuPK

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

Відповіді:


26

Ви побачите, що самі розробники не використовують короткі імена змінних. У той час як вони розвиваються, вони використовують змістовні та докладні назви змінних.

Потім , в процесі складання / випуску, код , який вони написали це пробіг Minifier / обфуськатор з метою мінімізації розміру файлу, як кращої практики для прискорення веб - сайту. Це необов'язковий крок , якщо ви дбаєте , що багато про продуктивність. Більшість невеликих веб-сайтів цього не роблять.

Ви , як розробник, не повинні дбати про процес мінімізації / обфускування; напишіть свій код, щоб він був читабельним, значущим, добре задокументованим та добре структурованим. Тоді, якщо ви так сильно піклуєтесь про продуктивність (необов’язково, не забувайте!), Введіть у процес звільнення мініфікатор / обфускатор, щоб мінімізувати код (видалити пробіл, нові рядки, коментарі тощо) та придушити його (наприклад, скоротити змінну назви). Гарну статтю, яка пояснює обфускування та мінімізацію, можна знайти тут .

Крім того, Desktop FireFox не буде скорочувати період змінних імен . Скорочення імен змінних існує для пришвидшення завантаження сторінки. На той момент, коли FireFox отримує файл, він уже завантажений, тому робити це не потрібно. Ваш друг може запустити плагін, який робить це; у такому випадку скажіть йому його видалити, бо це марно.

Для завершення деякі (мобільні) браузери мають можливість використовувати сервери середнього рівня, які перехоплюють відповіді запитуваних вами ресурсів та стискають їх для вас (що може включати в себе мінімізацію файлів JavaScript). Зауважте, що стиснення виконується на сервері (тобто перед завантаженням сторінки), отже, потенційна вигода від завантаження меншого файлу, а не в браузері після того, як ви вже завантажили файл (як це запропоновано в питанні). Такі мобільні браузери включають Opera Mini та новіші версії Google Chrome (принаймні, на iOS; не впевнені в Android). Для отримання додаткової інформації дивіться тут .


11

Ні, не всі браузери автоматично вкорочують JavaScript, щоб забезпечити ефективність роботи.

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

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

Якщо вам потрібна посилання на деякі хороші умови кодування JavaScript, я рекомендую використовувати їх .


2

Не турбуйтеся про розмір файлу передчасно. Хоча це завжди викликає занепокоєння, важливіше читати та ремонтувати важливіше.

Зважаючи на це, ви, ймовірно, в будь-якому разі повинні обслуговувати мінімізовані (наприклад, через YUI Compressor ) версії сценаріїв.

Якщо вас цікавлять найкращі практики веб-розробки загалом, пропоную прочитати Що повинен знати кожен програміст про веб-розробку?


1

Я працював у JavaScript дуже довго.

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

Здавалося, працює добре. Я знаю, що є випадки проти цього, але це спрацювало добре для нас. Особливо, коли у вас є масивні файли JavaScript, де вам потрібно знайти речі.

Я б застеріг від передчасної оптимізації. Ви, ймовірно, зіткнетеся з брудним кодом, який насправді не працює набагато швидше.


5
Угорська нотація? Це стара школа. Угорська нотація - це стара релігія розвитку, і в часі її більше не рекомендують.
Smokefoot

2
Я, як правило, використовую його трохи, але лише для значень, обернених jquery, тих, з яких я розпочну з $. Проблема з угорською нотацією полягає в тому, що люди говорили вам вводити слово "int" vs "String", а не з точки зору сематики програми
Zachary K

"Особливо, коли у вас є масивні файли JavaScript, де вам потрібно знайти речі." -- Я чую тебе. Але угорська нотація - це просто приклеювальна штукатурка ... вона не допоможе в довгостроковій перспективі, вона просто заплутається, коли вам потрібно буде змінити тип чогось, але не встигне змінити всі змінні префікси. Автоматизація всього того, де GWT надходить у власний ІМО.
funkybro

1
Я не обов'язково купую, використовуючи позначення як "порушення" слабко набраних аспектів мови. Звичайно, вам доведеться змінити ім’я, коли ви змінюєте тип, але це було б добре зробити все одно, щоб ви могли відстежувати, що ви робите. Я знаю, що в цьому є аспекти, які некрасиві. Але якщо ви коли-небудь працювали у великому проекті (я говорю сотні тисяч рядків коду) на друкованій мові, це може допомогти вам швидше знайти свій шлях у певних випадках. Скажімо, що вона датована і т. Д. Насправді не стосується основної проблеми, яку ОП намагалася словенською.
Алан Делімон

1
Угорська нотація - одна з тих речей, яку люди негайно відхиляють, не розуміючи, чому саме. Виявлено, що це шлях до тієї ж категорії, gotoде люди бездумно повторюють мантру "не використовуй гото ... не використовуй гото ..." . Реальність така, що це лише інструмент у вашому наборі інструментів. Як і будь-який інструмент, у нього є ситуації, коли це корисно, і ситуації, коли він не такий корисний (або навіть шкідливий). Начебто хтось мав поганий досвід, намагаючись побачити шматок дерева за допомогою молотка, а потім проголосив "ніколи не використовуй молотки, пили набагато краще!" . Підсумкові узагальнення завжди помиляються
MattDavey

1

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

  • functionNamesLikeЦе, наприклад, getCashbackData () {}
  • variaNamesLikeЦе, наприклад, var alarInterval = 10;
  • ClassNamesLikeЦе, наприклад, var CustomerOrder = {getOrderLines: function () {}}
  • EnumNamesLikeThis, наприклад, var ColorOfChoice = {White: "#FFFFFF"}
  • methodNamesLikeThis, наприклад, var CustomerOrder = {getOrderLine: function () {}}
  • SYMBOLIC_CONSTANTS_LIKE_THIS, наприклад, var EPOCH_UNIX = "01011970"

У вас є щось більше, щоб додати потім купу посилань? Я маю на увазі, що ти навіть не пояснюєш, хто такий Дуглас Крокфорд.
Рамхаунд

0

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

  1. Знайдіть найкращі IDE для потреб особистого розвитку, які мають гідні функції автоматичного завершення та інтелігенції, такі як aptana, netbeans, eclipse (все безкоштовно) або будь-який із численних комерційних продуктів (якби у мене була безкоштовна гра, я б подивіться на продукти JetBrains)
  2. Напишіть свій код таким чином, щоб будь-яке коментування було зайвим. Це означає, замість того, щоб писати

    getXy(e) { return [e.pageX, e.pageY ] }

    що може означати насправді все, що завгодно (особливо на шаленій розгубленій мові, як js;), ви робите код виражати себе

    getPageCoordinatesFromEvent(event) { 
        return [event.pageX, event.pageY ];
    }

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

  3. Отримайте книги "Чистий код" Роберта К. Мартіна та "Прагматичний програміст" Ханта / Томаса і більше ніколи не задайте собі подібні запитання - ви будете занадто зайняті роботою на сервері безперервної інтеграції, щоб автоматизувати нудний тест -, і будуйте частини процесу розробки (включаючи мінімізацію) і концентруйтеся на цікавій частині, написавши чітко зрозумілий код, який робить чудові речі!

PS Якщо вам потрібно швидко налагодити розробку найсучаснішого коду javascript, погляньте на книгу Резіга Джона "Містера jQuery" на "Техніки Javascript Pro" відразу після або разом із вищезазначеним.

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