У меня есть проект, который использует LINQ к SQL для бэкенда данных. У меня есть два основных пространства имен: Бизнес и Данные. Модель данных LINQ живет в Данных и отмечена "внутренняя"; пространство имен Бизнеса имеет общедоступные классы, которые переносят классы данных LINQ.
, Таким образом, существует Data.Client
, и Biz.Client
; последний представляет все соответствующие свойства объекта данных, например:
private Data.Client _client;
public int Id { get { return _client.Id; } set { _client.Id = value; } }
объекты Бизнеса имеют частного конструктора (для принуждения использования методов фабрики), и внутренний конструктор, который похож на это:
internal Client(Data.Client client) {
this._client = client;
}
, Который может использоваться любым из бизнес-классов в библиотеке, но фронтенд (UI) не имеет никакого способа прямого доступа к модели данных, гарантируя, что бизнес-слой всегда выступает в качестве посредника.
Это - первый раз, когда я действительно использовал internal
очень, и это оказывается довольно полезным.
Работает ли это только для HTML / XML файлы?
Нет: он довольно часто используется, например, для файлов CSS и JS - поскольку они являются одними из самых важных элементов, из которых состоят веб-сайты (кроме изображений), из-за JS-фреймворков и полнофункциональных приложений JS он представляет собой огромный выигрыш!
На самом деле, любой текстовый формат можно довольно хорошо сжать (наоборот, изображения не могут, например, поскольку они обычно уже сжаты) ; иногда данные JSON, возвращаемые из Ajax-запросов, тоже сжимаются - в конце концов, это текстовые данные; -)
Допустим, мой файл PHP / Perl генерирует некоторые простые данные, разделенные запятыми, и отправляет это в браузер, это будет закодировано по умолчанию?
Это вопрос конфигурации: если вы настроили свой сервер для сжатия такого контента, он, вероятно, будет сжат :-)
(Если браузер сообщает, что принимает данные в кодировке gzip)
Вот образец конфигурации для Apache 2 (с использованием mod_deflate), который я использую в своем блоге:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/xml
</IfModule>
Здесь я хочу html / xml / css / JS можно сжать.
И вот то же самое, плюс / минус несколько параметров конфигурации, которые я использовал однажды в Apache 1 (mod_gzip):
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_can_negotiate Yes
mod_gzip_minimum_file_size 256
mod_gzip_maximum_file_size 500000
mod_gzip_dechunk Yes
mod_gzip_item_include file \.css$
mod_gzip_item_include file \.html$
mod_gzip_item_include file \.txt$
mod_gzip_item_include file \.js$
mod_gzip_item_include mime text/html
mod_gzip_item_exclude mime ^image/
</IfModule>
Здесь можно заметить то, что я тоже не хочу небольшие (выигрыш не будет иметь большого значения) или слишком большие (потребляет слишком много ресурсов процессора для сжатия) файлы для сжатия; и я хочу, чтобы файлы css / html / txt / js сжимались, но не изображения.
Если вы хотите, чтобы данные, разделенные запятыми, сжимались таким же образом, вам нужно будет добавить либо его тип содержимого, либо его расширение конфигурации вашего веб-сервера, чтобы активировать для него сжатие gzip.
Есть ли способ проверить это?
Для любого контента, возвращаемого непосредственно в браузер, расширения Firefox Firebug или LiveHTTPHeaders являются обязательными.
Для контент, который не проходит стандартным способом связи браузера, это может быть сложнее; в конце концов, вам, возможно, придется использовать что-то вроде Wireshark , чтобы «нюхать», что действительно происходит по трубам ... Удачи с этим!
Что насчет таких платформ, как Silverlight или Flash, когда они загрузят такие данные, будут ли они сжаты / распакованы браузером / средой выполнения автоматически?
Чтобы ответить на ваш вопрос о Silverlight и Flash, если они отправят заголовок Accept, указывающий, что они поддерживают сжатый контент, Apache будет использовать mod_deflate или mod_gzip. Если они не поддерживают сжатие, они не будут отправлять заголовок. Это будет «просто работать». - Нейт
Браузер отправляет заголовок «Accept-Encoding» с типами сжатия, которые он знает, как понять. Сервер смотрит на это вместе с пользовательским агентом и решает, как кодировать результат. Некоторые браузеры лгут о том, что они могут понять, поэтому это сложнее, чем просто поиск «deflate» в заголовке.
Технически любой ответ HTTP / 2xx с содержимым может быть закодирован с использованием любой допустимой кодировки содержимого ( gzip, zlib, deflate и т. д.), но на практике применять сжатие к обычным типам изображений расточительно, потому что оно фактически увеличивает их.
Вы определенно можете сжать ответ от динамических страниц PHP. Самый простой способ - добавить:
<?php ob_start("ob_gzhandler"); ?>
в начало каждой страницы PHP. Конечно, лучше настроить его через конфигурацию PHP.
Есть много тестовых страниц, легко найти с помощью Google :
Я думаю, что Apache mod_deflate
более распространен, чем mod_gzip
, потому что он встроен и делает то же самое. Посмотрите документацию для mod_deflate
(ссылка выше), и вы увидите, что легко указать, какие типы файлов сжимать, на основе их MIME-типов. Обычно стоит сжимать HTML, CSS, XML и JavaScript. Изображения уже сжаты, поэтому от сжатия они не выигрывают.