На Юи и Loader промени, за 3.4.0
Юли 1, 2011 в 6:34 ч. от Dav стъкло | в развитието , Производителност | 10 КоментариВ 3.4.0 ние започнахме процеса на преместване на някои от логика Loader наоколо, за да не само да по-performant, но да се направи по-силен и по-лесно да се използва в други места (например на сървъра). Ние ще се подвижен повече промени в бъдещи преразглеждания, но аз исках да отнеме известно време и да обясни какво е променено, защо той бе променено и как тя може да повлияе на разработчиците. За голямата част от случаите на използване, разработчиците ще забележите нищо по-различно, с изключение на това, че нещата са малко по-бързо и техните изисквания са малко по-малък.
Семената на файла
Първото нещо, което искате да се обърнете е на семена Юи файл. В предишните версии на Юи, нашата семена файла е много малка и не съдържа Loader или някоя от мета-данни. Ние открихме, че в 90% използване случай това не е като performant, както се надявахме. Нормален потребител включва семена на файла, след което иска техните модули, което от своя страна означава, че семената трябва първо да донесе Loader, след това изчислява всички негови зависимости, а след това донесе на всички тях. Сега чувствам, че това допълнително искане HTTP е грешното нещо, което трябва да направите, така че нов стандартен файл семе съдържа товарач и мета-данни. Да, това ще направи първоначалното искане малко по-голям, но той ще направи за зареждане на модули, които много по-бързо, тъй като всички на своите изисквания за мета-данни, са вече на страницата.
Ако желаете да го използвате по стария начин, може просто да включва семена Юи база файл вместо. Той съдържа всичко, което е необходимо, за да Юи работи в самостоятелен режим, освен това съдържа Способност да донесе Loader при поискване. Ако имате нужда от дори по-фини зърна зависимости, ние сме създали един Юи ядро семена файл, който е точно това, което старата на Юи база семе е.
/ Строителство / Юи / Юи min.js / / Юи Seed + Loader
/ Строителство / Юи база / на Юи база-min.js / / Стария Seed Юи с Loader донесе подкрепа
/ Строителство / Юи-ядро / Юи ядро-min.js / / Стария Юи база без Loader донесе подкрепа
Трябва да се отбележи, че тези URL адреси са различни от предишната URL адреси. Всеки, който е използвал yui/yui-base.js файлове трябва да ги repoint yui-core/yui-core.js . Ако искате по-стария начин за зареждане на семена и привлекателен Loader, Вие можете да използвате на файла семена yui-base/yui-base.js .
Другият мотивите за тази промяна е пътна карта за вземане на Юи тече като на много места е възможно. Стария файл семена плюс Loader, в една и съща молба комбо сървър е добре, ако имате комбо сървър, достъпен във вашето приложение. Но какво да кажем на сървъра? Или в офлайн приложение на мобилно устройство? Тези места трябва да се сведе до минимум достъпа на файл, докато все още получават необходимата им информация.
Сборни
Следващото нещо, което променихме е премахване на сборни пакети от системата и, изправната allowRollup фалшиви в довереник на товарача. Какво означава това за вас? Ами, надявам се нищо. Преди да обясня на въздействието на промяната, нека ми обясни мотивите зад него. Основната причина е, отново, изпълнение, заедно с полезния товар доставка. Вземете този пример:
Модул А: изисква събития, събитие-б
Модул Б: изисква събитие-C, събитие-D
Когато ви поиска, кумулативен логика преди 3.4.0 използва за да се определи, че вие трябва да получите на кумулативен събитие. Което всъщност означава, че сте се:
event.a, event.b, event.c, event.d, event.e, event.f, event.g, event.h
Вие в крайна сметка с повече на вашата страница, отколкото действително необходима. С изключване на кумулативен подкрепа, Юи сега ще поиска само това, което действително поисканата и нищо повече. В повечето случаи, няма да забележите това. Модул на разработчиците, може да работи в ситуация, където нещата, които са работили в миналото, не може да работи сега. Причината за това е, че те действително работи от инцидент преди. Позволете ми да използвам истински пример на света: Dial.
В 3.3.0, Dial изисква това:
изисква: [
"Джаджа",
"Дд-Drag",
"Заместител",
"Събитие-mouseenter",
"Преход",
"Intl"
]
За по-голямата си част, Dial работи в 3.4.0, обаче подкрепа клавиатура не работи. След като направите няколко прости разследване, се оказа, че всъщност е кумулативен подкрепа иска цялата на кумулативен събитие (което включва ход на събития, и събития ключ). Без да се на кумулативен логика дърпа във всички на събитието, 3.4.0 Dial вече не всички от нейните изисквания. Осъществяване на изискванията на набиране на по-специфичен и определяне на всички от нейните действителни зависимости правилно го прави, както се очаква.
изисква: [
"Джаджа",
"Дд-Drag",
"Заместител",
"Събитие-mouseenter",
"Събитие движение",
"Събитие-ключ",
"Преход",
"Intl"
]
За Модул разработчиците, това е най-добра практика, за да сте сигурни, че вашия модул изисква точно това, което трябва да функционира. Не смятайте, че нагоре по веригата изискване модул е там. Винаги е по-добре да се уверите, че ви попитам за това, което ви трябва.
Това също така означава, че модул изисквания са по-добре дефинирани. Например, datatype-date трябва Intl подкрепа. В предишните версии, който осъществявате достъп до Intl като това:
Y.Intl.getAvailableLangs (вид данни-дата ");
Но тъй като този модул не действително да има език ( datatype-date-format модул), това ще се провали. Тя трябва да бъде по-специфичен и всъщност поиска езици за правилния модул:
Y.Intl.getAvailableLangs (вид данни-дата-формат ');
Изграждане на файла експлозия и отстраняване Submodule,
След като направите тази промяна, следващата промяна, ние направихме беше експлодира директория строителство и премахване на submodules от базовата система. Submodule логика не е отстранен, само нашата структура на мета-данни е променен. Това ще осигури обратна съвместимост за текущи инсталации.
Submodules в базовата система, причинени няколко проблеми, които трябваше да се разрешат. Първата причина е изпълнение. Всеки път Loader, необходима за изчисляване на зависимости, тя трябва да да извървим submodule / плъгин структурата на всеки модул. Правейки това хиляди пъти наранява нашата работа по време на Loader изчисли рутина. С премахването на подкрепа за submodules в основната система, ние спаси десетки хиляди на извикванията на функции и повторения.
Loader е променено така, че ако use имот в мета-данни модул определя повече модули, ще използва тези модули вместо да се опитвате да заредите оригиналния модул. Така че, ако поиска " dd "Loader ще инспектира" dd "е мета-данни и да видим за ползване на собственост, която изглежда по следния начин:
"Дд-DDM база, DD-DDM, DD-DDM спад, DD-DRAG, DD-прокси, DD-ограничават, DD-капка, DD-Scroll, DD-капка-Plug-in"
В основата семена Юи файл, ние сме включително и това, което ние призоваваме виртуални сборни пакети или псевдоними. Тези модулни определения са абсолютно същите като мета-данни в Loader. По този начин можете да включите всички файлове, изнесени от зависимостта ни Конфигуратор и все още използват тези сборни пакети, без да се налага на на Loader настоящето на страницата. В бъдещите версии, ще бъде рафиниране на този подход дори повече.
След като направите тази промяна, ние след това, предхождани да експлодират нашите изграждане на файлове. В предишните издания, submodules определя пътя на файла модули. Например:
"Дд": {
"Submodules": {
"Дд-влачене":
/ / Модул данни
}
}
В 3.3.0, когато построил "DD", структурата на файла изглеждаше нещо подобно:
/ Строителство / DD / DD-drag.js
/ Строителство / DD / DD-ddm.js
/ Строителство / DD / DD-drop.js
С изграждане на системата, избухна в 3.4.0 е "DD" изграждане на файлове сега изглежда така:
/ Строителство / DD-Drag / DD-drag.js
/ Строителство / DD-DDM / DD-ddm.js
/ Строителство / дд пускане / DD-drop.js
Това позволи на нас, за да премахнете свойството "път" от всички на нашия модул мета-данни, както и спестяване на размера на файла и намаляване на логиката, която се изисква, за да се съберат на модулите на URL пътеката.
Ако включително и предварително конфигурирани комбо URL, вие трябва да преизчислите URL при надграждане.
Недостатъкът на тази промяна е, че ако сте включително комбо URL на модули към "подготвителния", вашата страница, вие не можете просто да смените номера на версията и надграждане. Вие ще трябва да преразгледа зависимостта Конфигуратор и да генерират нов URL адрес с нов модул структура.
Бъдещето
Аз ще се продължава да се усъвършенства, refactor и максимално всеки аспект на нашата Loader и стратегия на семена. Тези първи стъпки са необходими, за да помогне в бъдещи промени, които трябва да се предвиди не само на нашата стратегия от страна на клиента, но също и нашия сървър, на командния ред и мобилни стратегии устройства, както и.
Споделете и разширяване : Запазете си отметка към del.icio.us | Digg тя | Reddit!
10 Коментари »
RSS емисия за коментари по тази публикация TrackBack URI
Оставете коментар

Copyright © 2006-2012 Yahoo! Inc. Всички права запазени. Декларация за поверителност - Условия за ползване
Осъществено от WordPress на Yahoo! Уеб хостинг .

Аз съвсем не получите този пасаж:
"Loader е променено така, че ако използването имот в мета-данни модул определя повече модули, ще използва тези модули вместо да се опитвате да заредите оригиналния модул. Така че, ако поиска "гг" Loader ще инспектира "DD" е мета-данни и да видим за ползване на собственост, която изглежда по следния начин:
"Дд-DDM база, DD-DDM, DD-DDM спад, DD-DRAG, DD-прокси, DD-ограничават, DD-капка, DD-Scroll, DD-капка-Plug-in"
"
Можете ли да обясните този показателен за разлика от това, което се случва в текущата версия?
THX
/ Паоло
Коментар от Паоло Nesti - 4 юли, 2011 #
@ Паоло
Във версиите преди 3.4.0 Pr2, ние създадохме статични файлове кумулативен. Така че в случай на DD, имаше файл, наречен:
/ Строителство / дд / dd.js
И това съдържа всички свързани модули гг.
Коментар от Dav стъкло - 4 юли, 2011 #
Радвам се, че вие, момчета правят това. Аз винаги избягва ролка фирми като чумата. Въпреки това, тъй като някои от базовите класове изглежда да бъдат премахнати сега, например възел база става възел ядро, това би било нещо добро за да получите списък на всички класове, които са били НЕПРЕПОРЪЧИТЕЛНА по този начин.
Коментар от Марк - 5 юли, 2011 #
@ Марк
Когато 3.4.0 е освободен, трябва да има много документация около променените модули.
Коментар на Dav стъкло - 5 юли, 2011 #
Този коментар не е на този пост конкретно, но аз все още ще разберете философията на Юи срещу вярата ми в добър дизайн ", прости неща, които трябва да бъдат прости, сложни неща, следва да бъде възможно".
Защото съм се озовах отново и отново чете документацията от най-основните модули като възел и събитие, след няколко месеца с YUI3.
Новите модули от APP / MVC изглежда перфектен за моята ап На първо място, а след това започнах да пиша много обичай логика да се получи около поведението по подразбиране, поради огромния памет режийни. Когато изхвърляме Модул & Вижте напълно, аз в крайна сметка с много по-кратък и компактен логика, само по-бързо!
Друг случай е контекстно меню, което аз не намерите в YUI3. Някои Юи експерти предполагат създаването на нов клас, въз основа на Overlay, след което се добавят различни потребителски свойства и методи за оказване ... Аз просто се нуждаят от една контекстното меню и в крайна сметка имам го направи с по-малко от 10 линии на суров JS + CSS.
Аз никога не се съмнявам, YUI3 може да поддържа сложни ситуации, но какво да кажем за много прости случаи, като Hello App World? С C, просто наричаме ФОРМАТ ("Здравей, свят!") В рамките на основната (). За Java, трябва първо да дефинираме клас HelloWorld, публичен статичен метод невалидни наречените главни (), и накрая, обадете се на System.out.println ("Здравей, свят!") ... OMG, всеки осъзнава колко предпоставка знанието е необходимо да напиша нещо толкова просто, тъй като това? Това е точно как се чувствам Юи!
ЕСТЕСТВО, аз не мисля, че YUI3 някога ще стана по-лесно, но аз все още се надявам вие, момчета, може да го направи възможно най-прости.
Коментар от Уейн - 16 юли, 2011 #
@ Уейн: Не е нужно на Юи да напишете Здравейте App World. Това звучи като теб не трябва Юи за изграждане на приложението, което се опита да се изгради с помощта на модела и Преглед компоненти.
Това е добре!
Юи не ще да е идеалният инструмент за всяка задача. Ако можете да напишете десет реда на JavaScript и да се постигне това, което трябва да направите, след това с всички възможни средства, направете това, че вместо уиджет, който прави много повече, отколкото трябва.
Това не означава, че джаджата е безполезно, или ненужно сложни. Това означава, че не беше правилният инструмент за работата, за която искал да бъде направено.
Ние абсолютно искате да направите Юи толкова просто, както е практично, но има да се постигне баланс между простота и полезността. Най-простият код не е код на всички, но ако ние отидоха толкова далеч, ние също няма да предостави никаква стойност. Така че ние се стремим към баланс се опитваме да направим по-сложни неща, просто, но без тях oversimplifying до точката, където нашите абстракции, не са полезни.
Съгласен съм с Вашата философия, че простите неща трябва да бъдат прости и сложни неща, следва да бъде възможно. И вярвам, че е точно това, което Юи: той прави сложните неща възможни, без да се правят прости неща, по-малко прости. Красотата на Юи в модулна архитектура е, че ако откриете по-лесно да се търкаля собствен код, вместо да използват определен джаджа, не сте принудени да се зареди, че джаджите код. И, Товарещи промени в 3.4.0 правят това още по-лесно.
Коментар от Райън Grove - 20 юли, 2011 #
[...] Loader е оказало значително обновяване за 3.4.0. Ако се прави ръчно спецификации за натоварване чрез използване ("*") или използването на submodule конфигурации, че високо ценим опитвате кода си с новия товарач, за да се уверите, ние правилно разглеждане на всички използването случаи. За по-подробна информация за Товарещи промени в тази версия, се обърнете към блог пост, описващ 3.4.0 Товарещи промени. [...]
Pingback от Юи 3.4.0 Преглед на издаване 3 Сега на разположение на CDN »Yahoo! User Interface Блог (YUIBlog),, - 28 юли, 2011 #
@ Райън,
Току-що видях коментар. Поддържа стария проект, написан на Юи 3,1 с 1000s на реда код, а аз просто исках да добавите един контекстно меню. Но аз не успява да открие всяко възможно модул / метод за да го направи бързо и лесно. Предвиждайки тази малка особеност може да се наложи 100s на линии на ориентиран код Юи, използва сурово JS вместо.
BTW: имаше няколко проблеми при преминаването на 3,2, а цялата система, спря да работи при превключване на 3,3. Така че аз не мисля, че е необходимо да се опитат 3.4 за този проект.
Коментар от Уейн - 18 август, 2011 #
[...] Броят на итерациите, изпълнени от товарач изчисляване на зависимости. Можете да се обърнете към блог пост за Товарещи промени в 3.4.0 за повече [...]
Pingback като Обявяване Юи 3.4.0 и новата YUILibrary.com »Yahoo! User Interface Блог (YUIBlog), - 18 август, 2011 #
Всички тези промени в товарач изглежда много обещаващо и отстраняването на под-модули изчисления е голяма. Това е вероятно причината, виждах тон на извикванията на функции в IE, когато зависимостта от изчисления и IE нещо такова ще се задуши за няколко секунди.
С промените в товарач и мета данни - как е товарач Юи сървъра страна, засегната. Е, че се актуализира, за да се държи сметка за това се промени. Защото този, това, което в крайна сметка с.
Коментар от Али D - 19 август, 2011 #