1. Краткий обзор веб-разработки телевизионной приставки
Для веб-разработки браузера Liantong, встроенного в операционную систему UUTVOS кабельной приставки Oriental, обобщим некоторые проблемы и навыки, возникшие при разработке. Браузер основан на кастрированной версии Firefox, поэтому в разработке есть какие-то необъяснимые ямки. Я пытался использовать Vue для разработки веб-проекта телевизионной приставки, и опыт оказался плохим: первое время загрузки долгое, и страница зависает. В связи с ходом проекта не было попыток ленивой загрузки компонентов и обработки ленивой загрузки маршрутизации, что может сократить время первой загрузки. Для разработки рекомендуется использовать JQuery.
1.1 Уведомление о карьере
- Средства разработки: WebStrom. Его Инструменты > Развертывание можно настроить для подключения к удаленным серверам. Загружайте код в любое время.
- Технология, использованная при разработке: JQuery + Sass.
- Не используйте JS для динамического управления вещами, которые можно отобразить с помощью HTML + CSS.
- Избегайте использования события focus для запуска ненужных действий.
- Когда какой-то кусок кода JS не запускается, попробуйте добавить в него функцию задержки, и возникшие проблемы перестанут быть проблемой.
- Рекомендации по макету CSS
position:absolute;
позиционирование, координацияdisplay:inline-block;
Лучше использовать. -
<iframe></iframe>
Теги не совместимы. Чтобы загрузить .html, запрошенный с сервера, используйте JQuery.load()
Дафа. overflow:scroll
, кнопки пульта дистанционного управления могут прокручиваться только вниз, а не вверх.- Переключитесь на воспроизведение нескольких видео, чтобы избежать реакции пользовательского интерфейса и задержки воспроизведения видео, «анти-тряски», которую вы заслуживаете.
- Gulp сжимает код и изображения для ускорения первой загрузки, а степень сжатия изображений достигает 90% без искажений.
1.2 Резюме разработки
1.2.1 Достаточно одного WebStrom ☞↑
Наш фон уже готов, а код напрямую копируется на сервер, а проект можно в любой момент просмотреть на приставке.
- Tools>Deployment на панели инструментов WebStorm можно подключить к удаленному серверу конфигурации.Каждый раз, когда вы нажимаете CTRL + S, файл проекта будет автоматически загружен.Рекомендуется трещина в стене!
- Настроив WebStrom, вы можете отслеживать и компилировать файлы Sass.Автоматическая компиляция CTRL + S очень удобна.
- Если вам нравится VSCode, ничего страшного, может в VSCode есть эти функциональные плагины, я не стал заморачиваться.
- Если в WS используется Sass или Less, скомпилированный файл CSS не будет автоматически загружаться на сервер при каждом сохранении, и его необходимо загружать вручную в WS.
1.2.2 Используйте любимую технологию ☞↑
- Официальная документация по веб-разработке приставок рекомендует нативную разработку на JS, в настоящее время JQ более удобен в использовании, да и недостатков в производительности пока нет.
- Лесс и Сасс оба влюблены. Сила переменных велика. Даже если изображение ресурса представляет собой машину с разрешением 1080p, я использую ее для компоновки на машине с разрешением 720p. Используя переменные Sass и функции расчета, очень легко управлять значениями атрибутов в CSS.
- При рендеринге списка используется art-template, механизм шаблонов от Tencent, и начать работу легко, обратившись к его документации.официальная документация.
1.2.3 Отображение HTML-элементов с меньшим контролем JS ☞↑
Производительность браузера приставки очень низкая, если вы хотите еще и проигрывать видео, то место для проигрывания JS весьма ограничено.
- Под панелью вкладок есть 6 опций. Структура HTML в опциях в основном такая же. Если вы планируете повторно использовать HTML-код той же структуры с JS, остановитесь быстро и честно копируйте и вставляйте HTML-код. Иначе при переключении Табов случайные лаги отвратительны.
- аналогичный
$(id).css({"backgroundImage":"url('...')"})
а также$(id).attr({"src":"./*.jpg"})
Такого рода операции по управлению уровнем отображения пользовательского интерфейса в JS следует избегать, и ее следует выполнять непосредственно в HTML, насколько это возможно, и эта операция может быть принята самое большее:$(id).addClass()
. Браузер приставки такой наглый. (Это то, что я пробовал, а суть разницы в операционных показателях JQ еще предстоит изучить.) - Размер кнопок в веб-приставке, как правило, очень большой. Не используйте фоновое изображение кнопки в JS. Если воспроизведение видео вызывает большие потери производительности, вы будете ошеломлены картой пользовательского интерфейса в Интернете в это время. .
1.2.4 "Фокусное событие" используется некоторое время ☞↑
- Обязательно избегайте использования «событий фокуса» для запуска связанных операций. События фокуса — это системные события с высокой частотой. Когда Интернет работает на телеприставке, события фокуса, как правило, не находятся под абсолютным контролем разработчиков. Также следует избегать события «потеря фокуса».
- «Событие фокусировки» и «события кнопок вверх, вниз, влево и вправо» имеют определенную связь, «событие фокусировки» используется неправильно, и возникает много проблем.
- События кнопки «вверх», «вниз», «влево» и «вправо» обычно могут заменить события фокуса.
-
a:focus {}
Этот селектор CSS можно использовать с уверенностью.
1.2.5 Универсальный setTimeout()☞↑
Встроенный браузер приставки отвратительный, даже если это кастрированная версия, некоторые логические вещи отличаются от таковых на ПК.
- Некоторые операции независимо от того, как они написаныне бегать, или не может получить значение (null), особенно в сценариях загрузки страницы и перехода между родительскими и дочерними страницами. добавить это
setTimeout(function(), ms)
Готово, попробуй Бейлинга, большинству людей я ему не говорю ^_^.
$(document).keydown(function () {
if (event.which === 4097) {
var distance = $("#list").scrollTop();
sessionStorage.removeItem("listScrollTopVal");
sessionStorage.setItem("listScrollTopVal", JSON.stringify(distance));
// 按下确定键后,把获得焦点的元素的 id 保存到 sessionStorage中,
// 这个时候就要在外边加一个延时函数,甚至可以将时间设置成 0ms 也行。
setTimeout(function () {
sessionStorage.removeItem("listFocusItemId");
sessionStorage.setItem("listFocusItemId",JSON.stringify(document.activeElement.id));
}, 100);
}
});
1.2.6 Абсолютное позиционированиеposition:absolte;
экономить время и энергию ☞↑
- Видимая область установленного ящика фиксирована, а абсолютное позиционирование является самой экономией времени и экономия труда.
- Родительский элемент с элементами абсолютного позиционирования должен быть
position:relative
Позиционирование, это обязательно! - Несколько элементов блочного уровня располагаются на одной линии, рассмотрите возможность использования
display:inline-block;
, чем при использованииflaot:...
Плавающая планировка.
1.2.7overflow:scroll;
не могу прокрутить вверх ☞↑
Область просмотра телевизора фиксирована, и вся страница не прокручивается.В бизнес-сценариях прокручивать нужно части страницы: страницу со списком и страницу с подробностями.
- На ПК установите элементы, которые необходимо прокручивать:
overflow:scroll;
Появится полоса прокрутки, позволяющая прокручивать. А вот на ТВ-приставке есть проблема прокрутки вниз, но не прокрутки вверх. - Решение. Оберните элемент, который нужно прокручивать.
<a href="#"></a>
.и должен установить display:block. ;
<div class="content">
<a href="#/" style="display:block;outline:none;">
<div class="content-html">需要滚动的内容</div>
</a>
</div>
1.2.8 Переключение воспроизведения видео, добавление защиты от сотрясений имеет важное значение ☞↑
Производительность браузера приставки по своей природе низкая.При переключении нескольких воспроизведений видео на вкладке одной и той же страницы, когда кнопка нажимается слишком быстро, фокус в пользовательском интерфейсе постоянно переключается на множество элементов, а адреса воспроизведения видео переключаются на прошлое один за другим. , в это время легко вызвать зависание или сбой браузера. В дополнение к дрожанию, он может эффективно устранить заикание, вызванное быстрым переключением воспроизведения пользователем.
- Anti-shake на самом деле является функцией задержки, которую можно представить как:Проведите картой, чтобы сесть в автобус, пока кто-то проводит картой, водитель не может вести машину.
$("#nav--second").keydown(function(event){
if(event.which === 39) {
// 这里的EVAN是一个全局的命名空间,EVAN.timer是一个全局变量
clearTimeout(EVAN.timer);
EVAN.timer = setTimeout(function ()
create(EVAN.homePageVideoUrlArr[2]);
}, EVAN.gap); // 时间1-2s左右比较合适。
}
});