Подтвердить что ты не робот

Каковы ваши советы по наилучшей практике для структуры веб-приложений?

Я работаю над множеством пользовательских приложений. Я пытаюсь определить некоторые стандарты для новых приложений. Что-то вроде Элементов.

CSS. Как вы упорядочиваете таблицы стилей? Должен ли я иметь одну базовую таблицу стилей для всего сайта и по одной для каждой отдельной страницы для настроек? Должен ли я иметь другой для стилей печати? Я слышал, что для связывания большего количества файлов требуется больше времени, чтобы браузер их извлекал. (Больше объектов на странице... также проблема с большим количеством файлов или изображений javascript)... Сколько их слишком много? Вы сильно комментируете свой CSS? Предоставить любую вложенную структуру? Алфавит внутри элементов? Нужен ли мне reset? Как насчет импорта? И типография?

Javascript. В принципе, тот же вопрос. Файлы Javascript... Должен ли я включать одну или две красивые библиотеки (например, JQuery и Prototype), а затем добавить другую для каждой страницы? Теперь я внезапно включаю 5 или 6 файлов CSS и JS...

Структура каталогов. Как вы организовываете сайт? В настоящее время я использую что-то вроде

/CSS          ... For CSS files
/JS           ... For javascript files
/INC          ... For private code includes
/ASSETS/IMG   ... For images
/ASSETS/AU    ... For audio
/ASSETS/SWF   ... For Flash

Кроме того, любые другие советы будут приветствоваться. Спасибо!!

4b9b3361

Ответ 1

Должен ли я иметь одну базовую таблицу стилей для всего сайта и по одной для каждой отдельной страницы для настроек?

Будьте прагматичны. Если у вас мало правил, вы можете организовать их все в одном файле и сохранить контроль над тем, что что-то делает, сделайте это. Если у вас есть значительное количество правил, которые применяются только к определенным разделам или отдельным страницам вашего сайта, непременно их разломайте в свои собственные таблицы стилей, но не чувствуйте необходимости создавать отдельную таблицу стилей для каждой отдельной страницы даже если он содержит только два правила. Добавьте класс или идентификатор страницы в <body> , чтобы вы могли выделять отдельные страницы из общей таблицы стилей, если вам нужно.

Разделение стилей на таблицы стилей для вашей пользы как автора, поэтому сделайте то, что вам легче всего управлять. Для сложного сайта, который, вероятно, будет более одного файла CSS, но он не будет десятки.

Должен ли я иметь другой для стилей печати?

Вообще-то да. Хотя вы можете встроить стили печати в другую таблицу стилей с помощью правила @media, это традиционно было ошибкой, поэтому размещение медиа в теге <link> обычно проще всего. В любом случае таблицы стилей печати часто настолько отличаются от их сопоставлений с экраном, что имеет смысл сохранять свои правила отдельно.

Я слышал, что для связывания большего количества файлов требуется больше времени, чтобы браузер мог их восстановить.

Да, но этот эффект часто завышается. HTTP/1.1 уменьшает задержку для каждого запроса, поддерживая соединения между клиентом и сервером, что является сильным смягчением.

Сколько их слишком много?

Достаточно того, что у вас маловероятно, чтобы у вас было много таблиц стилей. Сценарии могут быть проблемой, если вы используете тип фреймворка, который требует один файл script для каждого класса, но в остальном, как правило, это нормально. Это чаще всего проблематично с большим количеством небольших изображений.

Вы сильно комментируете свой CSS?

Легкого комментирования обычно должно быть достаточно. Стиль декларативного правила CSS обычно не становится достаточно сложным, чтобы потребовать подробный код объяснения, который может потребоваться. В частности, однако, документируйте что-нибудь противоречивое, как взломы, специфичные для браузера.

Алфавит в элементах?

Нет, если это не облегчит вам управление. Обычно это не так, вы бы попытались сгруппировать аналогичные правила или правила, применяемые к подобным группам элементов.

Нужен ли мне reset?

Полный reset? Если вы не знаете, что делаете, и можете выбрать конкретные проблемы по умолчанию, которые вы хотите использовать reset.

Должен ли я включать одну или две красивые библиотеки (например, JQuery и Prototype)

Не включайте более одного фреймворка, если вам не нужно.

а затем включить другую для каждой страницы?

Если каждая страница имеет особое пользовательское поведение, вы можете. Но это обычно не происходит. Если вы создаете сценарии поведения с прогрессивным улучшением, которые привязаны, например. имена классов, вы можете включить script для каждого поведения на каждой странице, которая его использует, а затем позволить автоматически находить элементы для привязки.

Структура каталога: как вы организовываете сайт?

Лично для моих приложений Python/WSGI:

appfolder
    application.py       - main WSGI entry point and control/configuration script
    data                 - run-time writable application file store
        private          - files not available through the web server
        public           - mounted as a virtual directory on the web server
    logs                 - access, error, application log files
    system               - all the static application code and data
        htdocs           - web server root folder
            file         - static servable files
            img          - static images
            script       - JavaScript
            style        - CSS
        lib              - Python modules used by site
            appmodule    - main application code package
        templates        - HTML page templates
            mail         - mail text templates

Мне важно сохранить "данные в отдельном месте (с отдельными разрешениями) для приложения в" системе ". Вы должны иметь возможность поменять" системную папку" для обновления приложения, не опасаясь, что есть загруженные изображения в htdocs/img, которые вам нужно беспокоиться о сохранении.

Ответ 2

CSS: Я использую только одну таблицу стилей. Я просто продолжаю прикладываться к дну, когда я иду. Обычно я помещаю комментарий перед каждым набором правил, специфичных для каждой страницы. Ctrl + F, если мне нужно что-то редактировать.

Javascript: Обычно включают только одну библиотеку и, возможно, несколько плагинов. Используется для того, чтобы бросить любую JS-страницу непосредственно в заголовок этой страницы, но я нахожу ее немного уродливой и смешивает "поведение" с данными. Поэтому я начинаю новую парадигму -

MVCB. Модель, представление, контроллер, поведение. MVC отлично подходит для настольных приложений с довольно статическими пользовательскими интерфейсами, но когда вы добавляете много JS, я думаю, что он требует дополнительного слоя абстракции.

Таким образом, моя исходная структура файла:

index.php
app
    config
        bootstrap.php               -- code that needs to run before anything else, or functions that don't really fit elsewhere
        core.php                    -- timezone, database, and misc settings
        routes.php                  -- default routes
    layouts                         -- layout/template files
        flash                       -- layouts for one-time popup messages
    objects                         -- all files are stored in the same folder as the controller to keep directories
                                            smaller and ease reusability
        object
            controller.php
            model.php
            routes.php              -- object-specific routes to override default routes
            behaviours              -- page-specific javascript files
                action.js           -- included automatically on that page if this file exists
            views
                action.php          -- the view for this action
    public                          -- static media files, sometimes called "assets"
        favicon.ico
        xrds.xml
        css
        img
        js
        uploads         
core
    app.php                         -- initializes stuff
    controller.php                  -- default controller
    dispatcher.php                  -- includes everything and calls all the appropriate functions
    model.php                       -- default model that all other models inherit from
    components                      -- helper functions to used in controllers
    datasources                     -- mysql, oracle, flat-file...
    helpers                         -- functions to be used in views and layouts
    structures                      -- model helpers such as tree or polymorphic behaviours
    utils                           -- functions that are useful everywhere
libs                                -- 3rd party libs

.htaccess

Options -Indexes 

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/app/public/
RewriteCond %{DOCUMENT_ROOT}/app/public%{REQUEST_URI} -f
RewriteRule .* /app/public/$0 [L]

RewriteCond %{REQUEST_URI} !^/app/objects/
RewriteRule ^([^/]+)/(.+\.js)$ /app/objects/$1/behaviours/$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php?url=$0 [L,QSA]

Ответ 3

Я разместил свою структуру каталогов и комментарии в другом потоке, но это применимо и здесь!

Я использую следующую настройку в течение некоторого времени с отличными результатами:

  • /site: Здесь будет жить мой фактический рабочий сайт. Я установил свою CMS или платформу в этот каталог после создания шаблонов.

    • .htaccess(основные настройки, которые я обычно оказываю себе в любом случае)
    • robots.txt(поэтому я не забываю запрещать такие элементы, как /admin позже).
  • /source: содержит любые команды, заметки, документы, спецификации и т.д.

  • /шаблоны: Начните здесь! Создайте все статические шаблоны, которые в конечном итоге необходимо будет портировать в CMS или структуру/сайт.

    • /_ поведение
      • global.js(код сайта, может быть разбит на несколько файлов по мере необходимости)
    • /_ media: Изображения, загружаемые файлы и т.д. Организуется при необходимости

    • /_ style: Я предпочитаю модульную разработку CSS, поэтому я обычно получаю много таблиц стилей для каждого уникального раздела веб-сайта. Это сильно очищено Blender - Я настоятельно рекомендую этот инструмент!

      • print.css(это в конечном итоге смешивается, поэтому используйте печать @media)
      • reset.css(Эрик Мейер)
      • screen.css(для экрана @media, handheld)
      • дополнительные модули при необходимости
    • /_ vendor: весь сторонний код (jQuery, shadowbox и т.д.)

    • Blendfile.yaml(для Blender, см. выше)

    • template.html(базовый шаблон запуска, может быть скопирован и переименован для каждого уникального шаблона)
  • /tests: Selenium модульные тесты

Ответ 4

Просто убедитесь, что вы не используете заглавные буквы для папок. Это может укусить вас, когда вы разрабатываете окна и развертываете на сервере Linux.

Ответ 5

Сделайте все возможное, чтобы иметь одну таблицу стилей. Связывание отдельных таблиц стилей для отдельных страниц поражает цель.

Вы можете наследовать другие таблицы стилей в своем CSS, включая следующие строки в верхней части листа

@import url('blueprint/screen.css');
@import url('blueprint/styles.css');

В этом случае я наследую стили css проекта, добавляя ниже свои пользовательские стили.

В терминах JS-библиотек я предпочитаю связывать 3 файла.

Библиотека, одна страница со всеми плагинами, и, наконец, код страницы.

Для структуры каталогов я обычно имею следующее:

/_ CSS /_изображений /_scripts Файлы

но в последнее время я начал использовать все, чтобы сайт выглядел/работал так, как я хочу, чтобы он был в каталоге /_presentation... тогда что-нибудь дополнительное, как изображения для сообщений в блогах и т.д., включалось бы /images

Надеюсь, что это поможет.

Ответ 6

Я всегда стараюсь, чтобы браузер не загружал и не интерпретировал CSS-правила и JS-код, который не используется в рассматриваемом HTML. Я согласен с @bobince в том, что вам нужно только сломать стили и скрипты страниц в отдельный файл, если это необходимо для организации, но если ваш сайт очень большой, вы достигнете этой точки.

Однако, поскольку я только создаю сайты на основе шаблонов, я начинаю задаваться вопросом, почему я вообще привязываюсь к внешним файлам. Например, если у меня есть базовый шаблон, то вещи, которые я помещаю в голову этого шаблона, будут применяться ко всем страницам моего сайта. Так почему бы просто не поместить мои стили и скрипты?

Приходят на ум две причины. Сначала браузер может кэшировать внешний файл и повторно использовать его на каждой странице, которая включает его, не загружая его снова и снова. Во-вторых, дизайнеры могут быть не так удобны в ваших шаблонах, поскольку они возились с простыми файлами CSS.

Что хорошо и хорошо для глобальных стилей, которые применяются к каждой отдельной странице вашего сайта, но как насчет тех одноразовых страниц, которые имеют какой-то стиль, который не используется нигде? Если вы добавили этот стиль к глобально примененному внешнему файлу, вы увеличили начальное время загрузки вашего сайта, чтобы иметь стиль, который используется только на одной странице. Кроме того, когда вы вернетесь к этому файлу через несколько месяцев, вы, вероятно, забудете, для чего были эти правила.

Я предлагаю, чтобы любое правило стиля, которое не выражено на каждой отдельной странице, должно быть помещено в теги <style> в подшаблоне, которое отображает HTML, к которому применяется правило. Это переместит нагрузку и сложность с глобальной таблицы стилей на фактическую страницу, где нужны стили, и дайте контекст правил, чтобы они могли поддерживаться в будущем. Если это пугает вашего дизайнера, им не нужно писать CSS в любом случае. Просто скажите им, чтобы они придерживались Photoshop и позволяли вам выполнять работу большого мальчика.