<
  • Главная
Статьи

Створення мобільних Web-додатків із застосуванням HTML 5: Частина 4. Використання механізму Web Workers для прискорення роботи мобільних Web-додатків

  1. Серія контенту:
  2. Цей контент є частиною серії: Створення мобільних Web-додатків із застосуванням HTML 5
  3. Про це циклі статей
  4. Багатопотокових JavaScript на мобільних пристроях
  5. Часто використовувані скорочення
  6. Лістинг 1. Використання Web Worker в сценарії сторінки
  7. Лістинг 2. Сценарій Worker
  8. підтримка пристроїв
  9. Підвищення продуктивності за допомогою Workers
  10. Лістинг 3. Код HTML додатки для роботи з аукціоном
  11. Лістинг 4. Функція loadDeals
  12. Малюнок 1. Інтерфейс користувача Mobile Deals
  13. Лістинг 5. Попередня вибірка деталей пропозиції
  14. Лістинг 6. Сценарій вилучення деталей пропозиції за допомогою Worker
  15. Лістинг 7. Сценарій, імпортований Worker
  16. Малюнок 2. Відображення докладної інформації
  17. Лістинг 8. Функція ShowDetails
  18. Висновок
  19. Ресурси для скачування

Створення мобільних Web-додатків із застосуванням HTML 5

Додайте в HTML 5 багатопотокових JavaScript!

Серія контенту:

Цей контент є частиною # з серії # статей: Створення мобільних Web-додатків із застосуванням HTML 5

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=Создание+мобильных+web-приложений+с+применением+html+5

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Створення мобільних Web-додатків із застосуванням HTML 5

Слідкуйте за виходом нових статей цієї серії.

29 червня 2010 р .: додані посилання на частину 5 цього циклу в розділах "Про це циклі статей", "Висновок" і "Ресурси".

Про це циклі статей

Інші статті цього циклу

HTML 5 - надзвичайно популярна технологія, і тому є поважна причина. Вона обіцяє стати технологічною переломною точкою в процесі перенесення настільних додатків в браузер. Вона перспективна для традиційних браузерів, але ще більше можливостей обіцяє браузерам мобільним. Більш того, розробники найпопулярніших мобільних браузерів вже освоїли і реалізували багато важливих елементів специфікації HTML 5. У цьому циклі з п'яти статей ми розглянемо деякі з цих нових технологій, які входять в HTML 5 і можуть надати величезний вплив на розробку мобільних Web-додатків. У кожній статті ми будемо розробляти якусь чинне мобільне Web-додаток, яке демонструє функції HTML 5, яке можна використовувати з сучасними мобільними Web-браузерами на кшталт тих, що працюють на пристроях iPhone і Android.

У цій статті ми розробимо Web-додаток з використанням новітніх Web-технологій. Велика частина коду - це просто HTML, JavaScript і CSS - основні технології будь-якого Web-розробника. Головне, що вам знадобиться - це браузери для тестування. Велика частина коду з цієї статті буде працювати з останніми версіями настільних браузерів - за деякими рідкісними винятками. Звичайно, додаток потрібно буде протестувати і на мобільних браузерах, так що знадобляться останні версії SDK для iPhone і Android. У цій статті використовуються iPhone SDK 3.1.3 і Android SDK 2.1. У прикладі для цієї статті застосовується також проксі-сервер для доступу з браузера до віддалених службам. Проксі-сервер - це простий сервлет Java ™, але його легко замінити проксі-сервером, написаному на PHP, Ruby або іншою мовою. Див. Посилання в розділі ресурси .

Багатопотокових JavaScript на мобільних пристроях

Для більшості розробників в багатопотоковому, або паралельному програмуванні немає нічого нового. Воно так чи інакше підтримується в більшості сучасних мов. Однак JavaScript в їх число не входить. Його творець вважав це надто складним і непотрібним для мови, призначеного для вирішення простих завдань в межах Web-сторінки. Але Web-сторінки перетворилися в Web-додатки, і рівень складності завдань, що вирішуються за допомогою JavaScript, піднявся настільки, що вивів JavaScript на один рівень з іншими мовами. У той же час розробники, що використовують мови, які підтримують паралельне програмування, часто скаржаться на надзвичайну складність елементів паралельного програмування, таких як потоки і м'ютекси. Останнім часом з'явився ряд нових мов, таких як Scala, Clojure, і F #, які обіцяють спростити розпаралелювання потоків.

Часто використовувані скорочення
  • Ajax: Asynchronous JavaScript + XML
  • API: Application Programming Interface - інтерфейс програмування додатків
  • CSS: Cascading stylesheet - каскадний таблиця стилів
  • DOM: Document Object Model - об'єктна модель документів
  • HTML: Hypertext Markup Language - мова гіпертекстової розмітки
  • REST: Representational State Transfer - передача репрезентативного стану
  • SDK: Software Developer Kit - пакет ПЗ розробника
  • UI: User Interface - призначений для користувача інтерфейс
  • URL: Uniform Resource Locator - уніфікований покажчик ресурсів
  • W3C: World Wide Web Consortium
  • XML: Extensible Markup Language - розширювана мова розмітки гіпертексту

Специфікація Web Worker - це не тільки додавання паралелізму в JavaScript і Web-браузери; мова йде про те, щоб розширити можливості розробників, не змушуючи їх використовувати інструмент, який може викликати проблеми. Наприклад, розробники настільних додатків вже багато років використовують багатопоточність, забезпечуючи доступ до ресурсів введення-виведення без заморожування користувальницького інтерфейсу в очікуванні звільнення цих ресурсів. Однак якщо ці потоки змінюють якісь загальні ресурси (в тому числі для користувача інтерфейс), додаток часто завмирає або зависає. У разі Web Workers цього відбуватися не повинно. Породжений потік не має доступу до тих же ресурсів, що і основний потік призначеного для користувача інтерфейсу. Насправді, код породженого потоку навіть не може виявитися в тому ж файлі, що і код, що виконується основним потоком користувальницького інтерфейсу.

В рамках конструктора необхідно створити зовнішній файл, як показано в лістингу 1 .

У цьому процесі використовуються три речі:

  1. JavaScript Web-сторінки (будемо називати його сценарієм сторінки), який виконується в основному потоці.
  2. Об'єкт Worker, тобто об'єкт JavaScript, який використовується для виконання функцій Web Worker.
  3. Сценарій, який буде виконуватися знову породженим потоком. Будемо називати його сценарієм Worker.

Отже, розглянемо сценарій сторінки, представлений в лістингу 1 .

Лістинг 1. Використання Web Worker в сценарії сторінки

var worker = new Worker ( "worker.js"); worker.onmessage = function (message) {// виконати щось}; worker.postMessage (someDataToDoStuffWith);

У ньому видно три основні кроки по використанню Web Workers. Спочатку створюється об'єкт Worker, і цьому об'єкту передається URL сценарію, який буде виконуватися в новому потоці. Весь код, який буде виконувати Worker, повинен міститися в сценарій Worker, URL якого переданий конструктору Worker. URL цього сценарію Worker обмежений все тієї ж вихідної політикою браузера - він повинен виходити з того ж домену, звідки завантажений сценарій сторінки, який створив Web Worker.

Потім потрібно вказати функцію обробника зворотного дзвінок за допомогою onmessage. Це функція зворотного виклику активізується після виконання сценарію Worker. message - це дані, які повертаються сценарієм Worker, і з цими даними можна робити все, що завгодно. Функція зворотного виклику виконується в головному потоці, тому він повинен мати доступ до DOM. Сценарій Worker працює в іншому потоці і не має доступу до DOM, так що дані зі сценарію Worker потрібно повертати в основний потік, де можна безпечно змінювати DOM для редагування користувальницького інтерфейсу додатку. Це ключова особливість архітектури Web Workers, заснованої на принципі "невтручання".

Останній рядок лістингу 1 ілюструє, як ініціюється Worker - шляхом виклику функції postMessage. Тут в Worker передається повідомлення (знову ж таки, це просто дані). Звичайно, postMessage - це асинхронна функція; ви викликаєте її, і вона відразу ж відгукується.

Тепер, розглянемо сценарій Worker. код лістингу 2 - це зміст файлу worker.js з лістингу 1 .

Лістинг 2. Сценарій Worker

importScripts ( "utils.js"); var workerState = {}; onmessage = function (message) {workerState = message.data; // зробити щось з повідомленням postMessage ({responseXml: this.responseText}); }

Як бачите, сценарій Worker має власну функцію onmessage. Вона активізується при виклику postMessage з основного потоку. Дані, передані зі сценарію сторінки, направляються в функцію postMessage об'єкта message. Для звернення до даних витягаємо властивість data об'єкта message. Після завершення обробки даних в сценарії Worker викликаємо функцію postMessage для передачі даних назад в основний потік. Основний потік може отримати ці дані і через властивість data прийнятого ним повідомлення.

Поки ми розглянули просту, але потужну семантику Web Workers. Тепер ви побачите, як застосувати її для прискорення роботи мобільних Web-додатків. Але перед цим необхідно поговорити про підтримку пристроїв. Адже це мобільні Web-додатки, і при їх розробці важливо подолати відмінності між браузерами.

підтримка пристроїв

Починаючи з Android 2.0, браузер Android повністю підтримує специфікацію Web Worker HTML 5. На момент написання цієї статті більшість нових Android-пристроїв, включаючи надзвичайно популярний Motorola Droid, оснащено версією Android 2.1. Крім того, ця функція повністю підтримуються в браузері Mozilla Fennec, що встановлюються на пристрої Nokia з операційною системою Maemo і на пристрої Windows Mobile. Помітним винятком є ​​iPhone. iPhone OS версій 3.1.3 і 3.2 (версії ОС, які працюють на IPad) поки не підтримують Web Workers. Однак ця функція вже підтримується в Safari, і її поява на браузері Mobile Safari, з якої працює iPhone, - просто питання часу. З огляду на домінування iPhone (особливо в США), краще не покладатися на присутність Web Workers і використовувати їх тільки для поліпшення роботи мобільних Web-додатків, коли це присутність виявлено. Отже, подивимося, як можна використовувати Web Workers для прискорення роботи мобільного Web-додатки.

Підвищення продуктивності за допомогою Workers

Підтримка Web Worker на браузерах смартфонів досить хороша і постійно поліпшується. Таким чином, постає питання: в яких випадках слід використовувати Workers в мобільних Web-додатках? Відповідь проста: всякий раз, коли потрібно зробити щось, що займає багато часу. Є приклади використання Workers для виконання інтенсивних математичних обчислень, таких як розрахунок числа "пі" з точністю до десятитисячних. Малоймовірно, що вам коли-небудь знадобиться виконувати такі обчислення в Web-додатку, тим більше мобільному. Однак вилучення даних з віддалених ресурсів застосовується досить часто, і для цієї статті обраний приклад, вирішальний саме таке завдання.

У цьому прикладі ми отримаємо список Daily Deals (щоденні пропозиції) з аукціону eBay. Список містить коротку інформацію про кожному реченні. Більш детальну інформацію можна отримати за допомогою API eBay Shopping. Скористаємося Web Workers для вилучення цієї додаткової інформації, поки користувач переглядає список пропозицій, вибираючи найбільш цікаві. Щоб отримати доступ до всіх цих даних eBay з Web-додатки, потрібно скористатися все тієї ж вихідної політикою браузера за допомогою загального проксі-сервера. Для цього проксі-сервера використовувався простий сервлет Java. Він входить до складу коду для цієї статті, і тут ми його не розглядаємо. Давайте краще зосередимося на коді, який працює з Web Workers. В лістингу 3 показана базова HTML-сторінка програми.

Лістинг 3. Код HTML додатки для роботи з аукціоном

<! DOCTYPE HTML> <html> <head> <meta http-equiv = "content-type" content = "text / html; charset = UTF-8"> <meta name = "viewport" content = "width = device- width "> <title> Worker Deals </ title> <script type =" text / javascript "src =" common.js "> </ script> </ head> <body onload =" loadDeals () "> <h1> Deals </ h1> <ol id = "deals"> </ ol> <h2> More Deals </ h2> <ul id = "moreDeals"> </ ul> </ body> </ html>

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

Лістинг 4. Функція loadDeals

var deals = []; var sections = []; var dealDetails = {}; var dealsUrl = "http://deals.ebay.com/feeds/xml"; function loadDeals () {var xhr = new XMLHttpRequest (); xhr.onreadystatechange = function () {if (this.readyState == 4 && this.status == 200) {var i = 0; var j = 0; var dealsXml = this.responseXML.firstChild; var childNode = {}; for (i = 0; i <dealsXml.childNodes.length; i ++) {childNode = dealsXml.childNodes.item (i); switch (childNode.localName) {case 'Item': deals.push (parseDeal (childNode)); break; case "MoreDeals": for (j = 0; j <childNode.childNodes.length; j ++) {var sectionXml = childNode.childNodes.item (j); if (sectionXml && sectionXml.hasChildNodes ()) {sections.push (parseSection (sectionXml)); }} Break; default: break; }} Deals.forEach (function (deal) {var entry = createDealUi (deal); $ ( "deals"). AppendChild (entry);}); loadDetails (deals); sections.forEach (function (section) {var ui = createSectionUi (section); $ ( "moreDeals"). appendChild (ui); loadDetails (section.deals);}); }}; xhr.open ( "GET", "proxy? url =" + escape (dealsUrl)); xhr.send (null); }

В лістингу 4 показана функція loadDeals, а також глобальні змінні, використовувані в додатку. Ми використовуємо масив пропозицій і масив розділів. Це додаткові групи взаємопов'язаних пропозицій (наприклад, пропозиції вартістю до $ 10). Є також відображення dealDetails, ключами якого будуть ідентифікатори Item (ми будемо отримувати їх з даних за пропозиціями), а значеннями - більш докладна інформація, отримана від API eBay Shopping.

Перше, що необхідно зробити, це Ajax-виклик, звернений до проксі-сервера, який, в свою чергу, викликає REST-API eBay Daily Deals. Результатом стає список пропозицій у вигляді XML-документа. Документ аналізується в функції onreadystatechange об'єкта XMLHttpRequest, який використовувався для Ajax-виклику. Дві інші функції, parseDeal і parseSection, використовуються для розкладання XML-вузлів на прості в застосуванні об'єкти JavaScript. Ці функції присутні в завантаженні прикладу коду (див. Розділ завантаження ), Але так як вони виконують лише рутинні операції аналізу XML, ми їх тут не розглядаємо. Нарешті, після розбору XML можна використовувати ще дві функції для модифікації DOM, createDealUi і createSectionUi. Коли все готово, інтерфейс виглядає як показано на малюнку 1 .

Малюнок 1. Інтерфейс користувача Mobile Deals
Створення мобільних Web-додатків із застосуванням HTML 5   Додайте в HTML 5 багатопотокових JavaScript

повертаючись до лістингу 4 , Зверніть увагу, що після первинного завантаження пропозицій ми викликаємо функцію loadDetails для кожного з розділів з пропозиціями. Ця функція завантажує додаткову інформацію по кожній пропозиції за допомогою API eBay Shopping - але тільки якщо браузер підтримує Web Workers. В лістингу 5 показана функція loadDetails.

Лістинг 5. Попередня вибірка деталей пропозиції

function loadDetails (items) {if (!! window.Worker) {items.forEach (function (item) {var xmlStr = null; if (window.localStorage) {xmlStr = localStorage.getItem (item.itemId);} if ( xmlStr) {var itemDetails = parseFromXml (xmlStr); dealDetails [itemDetails.id] = itemDetails;} else {var worker = new Worker ( "details.js"); worker.onmessage = function (message) {var responseXmlStr = message. data.responseXml; var itemDetails = parseFromXml (responseXmlStr); if (window.localStorage) {localStorage.setItem (itemDetails.id, responseXmlStr);} dealDetails [itemDetails.id] = itemDetails;}; worker.postMessage (item.itemId) ;}}); }}

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

Якщо XML знайдений локально, він аналізується функцією parseFromXml, і деталі додаються в об'єкт dealDetails. Якщо він не знайдений, то створюємо Web Worker і передаємо йому ID елемента пропозиції за допомогою postMessage. Як тільки Worker отримує дані і повертає їх в основний потік, ми аналізуємо XML, додаємо результат в dealDetails і зберігаємо XML в localStorage. В лістингу 6 показаний сценарій Worker, details.js.

Лістинг 6. Сценарій вилучення деталей пропозиції за допомогою Worker

importScripts ( "common.js"); onmessage = function (message) {var itemId = message.data; var xhr = new XMLHttpRequest (); xhr.onreadystatechange = function () {if (this.readyState == 4 && this.status == 200) {postMessage ({responseXml: this.responseText}); }}; var urlStr = generateUrl (itemId); xhr.open ( "GET", "proxy? url =" + escape (urlStr)); xhr.send (null); }

Сценарій Worker досить простий. Ми використовуємо Ajax для виклику проксі, який в свою чергу викликає API eBay Shopping. Отримавши XML від проксі-сервера, ми повертаємо його в основний потік з використанням литерала об'єкта JavaScript. Відзначимо, що, незважаючи на можливість використання XMLHttpRequest з Worker, все повертається в його властивість responseText, а не в властивість responseXml. Це тому, що в сферу дії сценарію Worker не входить аналізатор JavaScript DOM. Відзначимо, що функція generateUrl надходить з файлу common.js (див. лістинг 7 ). Common.js імпортується за допомогою функції importScripts.

Лістинг 7. Сценарій, імпортований Worker

function generateUrl (itemId) {var appId = "YOUR APP ID GOES HERE"; return "http://open.api.ebay.com/shopping?callname=GetSingleItem&"+" responseencoding = XML & appid = "+ appId +" & siteid = 0 & version = 665 "+" & ItemID = "+ itemId; }

Тепер, коли ми побачили, як заповнити деталі пропозиції (для браузерів, які підтримують Web Workers), повернемося до малюнку 1 , Щоб подивитися, як це застосовується в додатку. Зверніть увагу, що кожне речення забезпечено кнопкою Show Details (Показати деталі). При її натисканні інтерфейс користувача змінюється, як показано на малюнку 2 .

Малюнок 2. Відображення докладної інформації

Цей інтерфейс відображається при виконанні функції showDetails. Ця функція показана в лістингу 8 .

Лістинг 8. Функція ShowDetails

function showDetails (id) {var el = $ (id); if (el.style.display == "block") {el.style.display = "none"; } Else {el.style.display = "block"; if (! el.innerHTML) {var details = dealDetails [id]; if (details) {var ui = createDetailUi (details); el.appendChild (ui); } Else {var itemId = id; var xhr = new XMLHttpRequest (); xhr.onreadystatechange = function () {if (this.readyState == 4 && this.status == 200) {var itemDetails = parseFromXml (this.responseText); if (window.localStorage) {localStorage.setItem (itemDetails.id, this.responseText); } DealDetails [id] = itemDetails; var ui = createDetailUi (itemDetails); el.appendChild (ui); }}; var urlStr = generateUrl (id); xhr.open ( "GET", "proxy? url =" + escape (urlStr)); xhr.send (null); }}}}

Ми отримали ідентифікатор пропозиції, яке буде показано, і перемикач, який вказує, показувати його чи ні. При першому виклику функція перевіряє, чи зберігаються вже деталі в відображенні dealDetails. Якщо браузер підтримує Web Workers, то ці дані вже присутні, і призначений для користувача інтерфейс для них створено і доданий в DOM. Якщо деталі ще не завантажені, або якщо браузер не підтримує Workers, ми робимо Ajax-виклик, щоб завантажити ці дані. Так додаток може працювати однаково добре незалежно від наявності підтримки Workers. Якщо Workers підтримується, то дані вже завантажені і призначений для користувача інтерфейс відреагує миттєво. Якщо немає, інтерфейс все одно завантажиться, але на це буде потрібно кілька секунд.

Висновок

Інші статті цього циклу

Для Web-розробніків Web Workers звучить як нова екзотичних технологія. Насправді ж, як видно з цієї статті, вона має Цілком практичне! Застосування. Вона особливо актуальна для мобільніх Web-Додатків. Workers можна використовувати для попередньої вибірки даних або інших попередніх операцій, щоб забезпечити набагато більш чуйний призначений для користувача інтерфейс. Це може бути особливо важливо для мобільних Web-додатків, яким потрібно завантажувати дані по потенційно повільної мережі. Додайте до цього стратегії кешування, і ваші користувачі будуть вражені спритністю вашого застосування.

Ресурси для скачування

Схожі тими

  • оригінал статті (EN).
  • Створення мобільних Web-додатків із застосуванням HTML 5. Частина 1: Комбінування HTML 5, API-інтерфейсів геолокації і Web-сервісів для створення гібридних мобільних додатків (Michael Galpin, developerWorks, травень 2010 р.) Про функції пошуку і відстеження координат місця розташування для використання в різних Web-сервісах. Використання різних аспектів стандарту геолокації з HTML 5 і популярними Web-сервісами для створення цікавих гібридних мобільних додатків.
  • Створення мобільних Web-додатків за допомогою HTML 5. Частина 2: Організація локального сховища для мобільних Web-додатків за допомогою HTML 5 (Michael Galpin, developerWorks, травень 2010 р.) Зустрітися з важливими новими функціями HTML 5 для бездротових додатків. Стандартизація локального зберігання і простий API дозволяють зберігати великі обсяги даних на стороні клієнта і підвищити продуктивність.
  • Створення мобільних Web-додатків за допомогою HTML 5. Частина 3: Робота мобільних Web-додатків в автономному режимі за допомогою HTML 5 (Michael Galpin, developerWorks, червень 2010 року). Надайте своєму додатку здатність працювати як з підключенням до Інтернету, так і без нього, і навчитеся визначати, коли додаток переходить з офлайна в онлайн, і навпаки.
  • Створення мобільних Web-додатків за допомогою HTML 5. Частина 5: Розробка нових візуальних елементів призначеного для користувача інтерфейсу в HTML 5. (Michael Galpin, developerWorks, червень 2010 року). Забезпечте повну підтримку 2-D графіки в браузері за допомогою Canvas, найбільш привабливою з нових можливостей для користувача інтерфейсу HTML 5. Навчіться застосовувати в своїх мобільних Web-додатках Canvas і інші візуальні елементи.
  • Документація HTML 5 Offline Application Cache : Більш детальна інформація Apple про файлах декларації і кешуванні додатків.
  • Офлайнові ресурси в Firefox : Автономна робота - не тільки для мобільних пристроїв. Читайте про те, як Firefox реалізує цей стандарт в проекті Mozilla.
  • Створення Ajax-додатків для мобільного Web (Michael Galpin, developerWorks, березень 2010 року): навчитеся використовувати Ajax, ключову частину будь-якого мобільного Web-додатки (EN).
  • Нові елементи HTML 5 (Elliotte Rusty Harold, developerWorks, серпень 2007 року): HTML 5 - це не тільки JavaScript. Читайте про деякі нові способи розмітки HTML 5 (EN).
  • Android і iPhone - війни браузерів. Частина 1: WebKit поспішає на допомогу (Frank Ableson, developerWorks, грудень 2009 року). Вам подобається підхід використання HTML 5 для розробки мобільних Web-додатків, але ви хочете помістити свій додаток в iPhone App Store і Android Market? Читайте про те, як убити двох зайців, в першій частині цього циклу з двох статей (EN).
  • Занурення в HTML 5 : Ця безкоштовна книга дає уявлення про методи виявлення та багатьох інших особливостях HTML 5 (EN).
  • Бібліотека довідкових матеріалів по Safari : Цей ресурс зручний для тих, хто розробляє Web-додатки для iPhone.
  • Специфікація HTML 5 W3C (Робочий проект, березень 2010 року): основний джерело відомостей по HTML 5.
  • проект Modernizr - всеосяжна утиліта для виявлення функцій HTML 5.
  • Інші статті цього автора (Michael Galpin, developerWorks, з квітня 2006 року по теперішній час): читайте статті про XML, Eclipse, Apache Geronimo, Ajax, API Googl та інших технологіях.
  • проект Modernizr : Потужна утиліта для пошуку функцій HTML 5, в тому числі таких, як localStorage, Web Workers, applicationCache і інші.
  • Web-сайт розробників Android : Завантажте Android SDK, познайомтеся з матеріалами по API і стежте за останніми новинами про платформу Android.
  • SDK iPhone : Завантажте останню версію SDK iPhone для розробки додатків, що працюють на iPAD, iPhone і iPod Touch.
  • Проект Open Source Android : Отримаєте відкритий вихідний код мобільної платформи Android.
  • SDK Google App Engine : Завантажте інструменти Java і Python для створення масштабованих Web-додатків з використанням Google.
  • Сертифікація по XML IBM : Як стати сертифікованим розробником XML і суміжних технологій IBM.
  • Технічна бібліотека XML : Широкий вибір технічних статей і порад, посібників, стандартів і документації IBM в розділі developerWorks, присвяченому XML.
  • Ознайомчі версії продуктів IBM : Завантажте або вивчайте онлайнові версії продуктів в IBM SOA Sandbox і опануйте інструментами розробки додатків і сполучною ПО для DB2®, Lotus®, Rational®, Tivoli® і WebSphere®.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Jsp?
Таким чином, постає питання: в яких випадках слід використовувати Workers в мобільних Web-додатках?
GET", "proxy?
GET", "proxy?
Com/shopping?
GET", "proxy?
Вам подобається підхід використання HTML 5 для розробки мобільних Web-додатків, але ви хочете помістити свій додаток в iPhone App Store і Android Market?


Новости
    Без плагина
    На сайте WordPress имеется файл, именуемый как .htaccess. Многие пользователи не предают ему особого внимания и не используют все его возможности. На самом деле файл .htaccess – это дополнительные конфигурации

    Плагин подписки wordpress
    Очень трудно найти один плагин подписки wordpress , который объединил бы в себе все виды подписок, которые так необходимы сайту. Именно поэтому я решил сделать подборку лучших плагинов, которые смогут

    Слайд-шоу с помощью плагина для WordPress UnPointZero Slider
    Плагин для cms WordPress UnPointZero Slider – новостной слайдер. Он отражает в форме слайд-шоу изображения со ссылками на ваши статьи и краткие выдержки оттуда. Его можно установить и на новостной сайт,

    Плагины для Wordpress
    С помощью этого плагина вы легко сможете интегрировать Google диск на ваш WordPress сайт или блог . Gravity Forms — лучший плагин для создания форм на WordPress, от самых простых (например, форма

    Подписки плагином JetPack: размещение и редакция формы подписки
    Вступление Здравствуйте! В этой статье я покажу, как использовать плагин JetPack для создания пользовательской формы подписки и как эту формы подписки плагином JetPack добавлять в статьи сайта, а при

    Чистка сайта WordPress плагином WP-optimize
    От автора Со временем использования система WordPress накапливает не нужные файлы, комментарии и неиспользуемые данные в базе данных. Эти файлы и данные создаются в процессе работы и нужны для этого,

    Возможности Jetpack плагина
    Вступление Возможности Jetpack плагина это более 30 функциональных модуля плагина, делающего его универсальным плагином WordPress, заменяющего аналогичные сторонние плагины. Jetpack один заменяет десятки

    Резервное копирование WordPress сайта без плагинов
    Вступление Резервное копирование WordPress это второе, что нужно научиться делать после установки WordPress. Можно сколько угодно говорить о безопасности сайта и его защите, но лучшего варианта защиты

    Плагины на приват для Майнкрафт ПЕ
    > > Плагины на приват для Майнкрафт ПЕ Порой всем нам хочется попробовать себя в роли администратора сервера и испытать эту ответственность, но, к сожалению, вы не всегда все знаете о создании

    Плагин WordPress Database Backup. Архивация базы данных блога на WordPress
    Привет друзья! Сегодня на очереди еще один простой, НО, необходимый и полезный плагин — плагин WordPress Database Backup , который с легкостью и самостоятельно произведет процесс, который научно называется:

  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью