Анализ сайта fastlz.org
Основное Готовность: 100%
Домен
fastlz.org
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Домен второго уровня идеален для продвижения.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Цепочка редиректов:
http://fastlz.org
302 Found
https://ariya.github.io/FastLZ/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
Не настроен HSTS (Strict-Transport-Security) — рекомендуется включить.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 01.11.2026 2:38:01.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
utf-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице utf-8.
Язык
en-US
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en-US.
Скорость загрузки
~0,58сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,58сек оптимальна.
Объем документа
34Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 34Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 2
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 2 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | /FastLZ/assets/css/style.css?v=b1342dabcf5257ab303743c9332fe75e9147a011 | |
| stylesheet | text/css | /FastLZ/assets/css/print.css |
Серверные заголовки
Кол-во: 17
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 17шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Server | GitHub.com |
| Access-Control-Allow-Origin | * |
| ETag | "66acdd92-8948" |
| Cache-Control | max-age=600 |
| x-proxy-cache | MISS |
| x-github-request-id | 293A:1459C1:3196092:3200F11:6A8A44E4 |
| x-github-edge-region | fra |
| Accept-Ranges | bytes |
| Age | 0 |
| Date | Sun, 23 Aug 2026 00:55:01 GMT |
| Via | 1.1 varnish |
| X-Served-By | cache-fra-eddf8230178-FRA |
| X-Cache | MISS |
| x-cache-hits | 0 |
| x-timer | S1787446502.503207,VS0,VE106 |
| Vary | Accept-Encoding |
| x-fastly-request-id | 7caf562f2f4e604d13d383ca5ca8e796c74ed783 |
CMS
Jekyll v3.9.5
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
В мета-теге generator указано: Jekyll v3.9.5.
Веб-сервер
GitHub.com
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
В заголовке Server указано: GitHub.com.
Мета-теги Готовность: 48%
Title
FastLZ | Small & portable byte-aligned LZ77 compression
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо уменьшить число символов в title (текущее значение: 59, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
Small & portable byte-aligned LZ77 compression
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Необходимо увеличить число символов в description (текущее значение мало: 50, минимум: 80, оптимально: от 120 до 130)
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
https://ariya.github.io/FastLZ/
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Канонический Url прописан корректно.
Robots
Ошибок нет
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots не указан. Страница свободна для индексации.
Адаптивность
width=device-width, initial-scale=1
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Разметка OpenGraph
Кол-во: 6
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph задана. Страница оптимизирована под социальные сети.
Показать полный список og мета-тегов
| Тип | Значение |
|---|---|
| og:title | FastLZ |
| og:locale | en_US |
| og:description | Small & portable byte-aligned LZ77 compression |
| og:url | https://ariya.github.io/FastLZ/ |
| og:site_name | FastLZ |
| og:type | website |
Все мета-теги
Кол-во: 11
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 11шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width, initial-scale=1 |
| name | generator | Jekyll v3.9.5 |
| name | description | Small & portable byte-aligned LZ77 compression |
| name | twitter:card | summary |
| property | og:title | FastLZ |
| property | og:locale | en_US |
| property | og:description | Small & portable byte-aligned LZ77 compression |
| property | og:url | https://ariya.github.io/FastLZ/ |
| property | og:site_name | FastLZ |
| property | og:type | website |
| property | twitter:title | FastLZ |
Оптимизация Готовность: 82%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют по одному на документ).
Контент
Ошибок нет
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Слова из title 6 встречаются в тексте достаточно.
Абзацев с текстом 35 достаточно.
Среднее число слов в абзаце 38 достаточно.
Кол-во знаков контента 9601 на странице оптимально.
Кол-во слов 1841 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h1> 1. Это прекрасно.
На странице присутствуют заголовки <h2> 4. Это хорошо.
На странице присутствуют заголовки <h3> 2.
Тошнота
4,90
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 3. Измените текст страницы!
Академич. тошнота
23,79%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| fastlz | 24 | 1,30% |
| output | 20 | 1,09% |
| literal | 16 | 0,87% |
| buffer | 14 | 0,76% |
| length | 13 | 0,71% |
| instruction | 13 | 0,71% |
| decompressor | 12 | 0,65% |
| opcode | 12 | 0,65% |
| compression | 11 | 0,60% |
| compressed | 10 | 0,54% |
| copies | 9 | 0,49% |
| reference | 9 | 0,49% |
| offset | 7 | 0,38% |
| following | 6 | 0,33% |
| uncompressed | 6 | 0,33% |
| determines | 6 | 0,33% |
| indicates | 6 | 0,33% |
| available | 5 | 0,27% |
| install | 5 | 0,27% |
| example | 5 | 0,27% |
Индексация Готовность: 30%
Индексирование
Ошибок нет
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 35 оптимально. Поисковые роботы обязательно проиндексируют сайт.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 35039 байт. Загружен за: 1сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://fastlz.org/robots.txt
302 Found
https://ariya.github.io/FastLZ/
200 OK
Показать содержимое robots.txt
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="/FastLZ/assets/css/style.css?v=b1342dabcf5257ab303743c9332fe75e9147a011">
<link rel="stylesheet" type="text/css" href="/FastLZ/assets/css/print.css" media="print">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>FastLZ | Small & portable byte-aligned LZ77 compression</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="FastLZ" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Small & portable byte-aligned LZ77 compression" />
<meta property="og:description" content="Small & portable byte-aligned LZ77 compression" />
<link rel="canonical" href="https://ariya.github.io/FastLZ/" />
<meta property="og:url" content="https://ariya.github.io/FastLZ/" />
<meta property="og:site_name" content="FastLZ" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="FastLZ" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","description":"Small & portable byte-aligned LZ77 compression","headline":"FastLZ","name":"FastLZ","url":"https://ariya.github.io/FastLZ/"}</script>
<!-- End Jekyll SEO tag -->
<!-- start custom head snippets, customize with your own _includes/head-custom.html file -->
<!-- Setup Google Analytics -->
<!-- You can set your favicon here -->
<!-- link rel="shortcut icon" type="image/x-icon" href="/FastLZ/favicon.ico" -->
<!-- end custom head snippets -->
</head>
<body>
<div id="container">
<div class="inner">
<header>
<h1>FastLZ</h1>
<h2>Small & portable byte-aligned LZ77 compression</h2>
</header>
<section id="downloads" class="clearfix">
</section>
<hr>
<section id="main_content">
<p><a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License" /></a>
<a href="https://github.com/ariya/fastlz/actions"><img src="https://github.com/ariya/fastlz/workflows/Code%20style/badge.svg" alt="Code style" /></a>
<a href="https://github.com/ariya/fastlz/actions"><img src="https://github.com/ariya/fastlz/workflows/Address%20Sanitizer/badge.svg" alt="Address Sanitizer" /></a></p>
<h2 id="overview">Overview</h2>
<p>FastLZ (MIT license) is an ANSI C/C90 implementation of <a href="https://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77">Lempel-Ziv 77 algorithm</a> (LZ77) of lossless data compression. It is suitable to compress series of text/paragraphs, sequences of raw pixel data, or any other blocks of data with lots of repetition. It is not intended to be used on images, videos, and other formats of data typically already in an optimal compressed form.</p>
<p>The focus for FastLZ is a very fast compression and decompression, doing that at the cost of the compression ratio. As an illustration, the comparison with zlib when compressing <a href="http://www.mattmahoney.net/dc/textdata.html">enwik8</a> (also in <a href="https://github.com/inikep/lzbench">more details</a>):</p>
<table>
<thead>
<tr>
<th> </th>
<th>Ratio</th>
<th>Compression</th>
<th>Decompression</th>
</tr>
</thead>
<tbody>
<tr>
<td>FastLZ</td>
<td>54.2%</td>
<td>159 MB/s</td>
<td>305 MB/s</td>
</tr>
<tr>
<td>zlib -1</td>
<td>42.3%</td>
<td>50 MB/s</td>
<td>184 MB/s</td>
</tr>
<tr>
<td>zlib -9</td>
<td>36.5%</td>
<td>11 MB/s</td>
<td>185 MB/s</td>
</tr>
</tbody>
</table>
<p>FastLZ is used by many software products, from a number of games (such as <a href="https://en.wikipedia.org/wiki/Death_Stranding">Death Stranding</a>) to various open-source projects (<a href="https://godotengine.org/">Godot Engine</a>, <a href="https://hhvm.com/">Facebook HHVM</a>, <a href="https://trafficserver.apache.org/">Apache Traffic Server</a>, <a href="https://www.calligra.org/">Calligra Office</a>, <a href="http://osv.io/">OSv</a>, <a href="https://netty.io/">Netty</a>, etc). It even serves as the basis for other compression projects like <a href="https://blosc.org/">BLOSC</a>.</p>
<p>For other implementations of byte-aligned LZ77, take a look at <a href="https://lz4.github.io/lz4/">LZ4</a>, <a href="http://google.github.io/snappy/">Snappy</a>, <a href="https://github.com/centaurean/density">Density</a>, <a href="http://www.oberhumer.com/opensource/lzo/">LZO</a>, <a href="http://oldhome.schmorp.de/marc/liblzf.html">LZF</a>, <a href="https://en.wikipedia.org/wiki/LZJB">LZJB</a>, <a href="http://www.ross.net/compression/lzrw1.html">LZRW</a>, etc.</p>
<h2 id="usage">Usage</h2>
<p>FastLZ can be used directly in any C/C++ applications. For other programming languages/environments, use the corresponding binding:</p>
<ul>
<li><a href="https://crates.io/crates/fastlz">Rust</a>, available on Crates: <code class="language-plaintext highlighter-rouge">cargo install fastlz</code></li>
<li><a href="https://pypi.org/project/fastlz/">Python</a>, available on PyPi: <code class="language-plaintext highlighter-rouge">pip install fastlz</code></li>
<li><a href="https://www.npmjs.com/package/fastlz">JavaScript</a>, available on npm: <code class="language-plaintext highlighter-rouge">npm install fastlz</code></li>
<li><a href="https://rubygems.org/gems/fastlz">Ruby</a>, available on Rubygems: <code class="language-plaintext highlighter-rouge">gem install fastlz</code></li>
<li>Lua via <a href="https://github.com/oneoo/lua-fastlz">github.com/oneoo/lua-fastlz</a></li>
</ul>
<p>FastLZ consists of only two files: <code class="language-plaintext highlighter-rouge">fastlz.h</code> and <code class="language-plaintext highlighter-rouge">fastlz.c</code>. Just add these files to your project in order to use FastLZ. For the detailed information on the API to perform compression and decompression, see <code class="language-plaintext highlighter-rouge">fastlz.h</code>.</p>
<p>For <a href="https://github.com/microsoft/vcpkg">Vcpkg</a> users, FastLZ is <a href="https://github.com/microsoft/vcpkg">already available</a>: <code class="language-plaintext highlighter-rouge">vcpkg install fastlz</code>.</p>
<p>A simple file compressor called <code class="language-plaintext highlighter-rouge">6pack</code> is included as an example on how to use FastLZ. The corresponding decompressor is <code class="language-plaintext highlighter-rouge">6unpack</code>.</p>
<p>FastLZ supports any standard-conforming ANSI C/C90 compiler, including the popular ones such as <a href="https://gcc.gnu.org/">GCC</a>, <a href="https://clang.llvm.org/">Clang</a>, <a href="https://visualstudio.microsoft.com/vs/features/cplusplus/">Visual Studio</a>, and even <a href="https://bellard.org/tcc/">Tiny CC</a>. FastLZ works well on a number of architectures (32-bit and 64-bit, big endian and little endian), from Intel/AMD, PowerPC, System z, ARM, MIPS, and RISC-V.</p>
<p>The continuous integration system runs an extensive set of compression-decompression round trips on the following systems:</p>
<p>For more details, check the corresponding <a href="https://github.com/ariya/FastLZ/actions">GitHub Actions build logs</a>.</p>
<table>
<thead>
<tr>
<th> </th>
<th style="text-align: right"> </th>
<th style="text-align: right"> </th>
<th style="text-align: right"> </th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>amd64</strong></td>
<td style="text-align: right"><strong>Linux</strong></td>
<td style="text-align: right"><strong>Windows</strong></td>
<td style="text-align: right"><strong>macOS</strong></td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_linux_gcc/badge.svg" alt="amd64_linux_gcc" /></td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_windows_gcc/badge.svg" alt="amd64_windows_gcc" /></td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_macos_gcc/badge.svg" alt="amd64_macos_gcc" /></td>
</tr>
<tr>
<td>Clang</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_linux_clang/badge.svg" alt="amd64_linux_clang" /></td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_windows_clang/badge.svg" alt="amd64_windows_clang" /></td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_macos_clang/badge.svg" alt="amd64_macos_clang" /></td>
</tr>
<tr>
<td>TinyCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_linux_tcc/badge.svg" alt="amd64_linux_tcc" /></td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_windows_tcc/badge.svg" alt="amd64_windows_tcc" /></td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>VS 2019</td>
<td style="text-align: right"> </td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/amd64_windows_vs2019/badge.svg" alt="amd64_windows_vs2019" /></td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>i686</strong></td>
<td style="text-align: right"><strong>Linux</strong></td>
<td style="text-align: right"><strong>Windows</strong></td>
<td style="text-align: right"><strong>macOS</strong></td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/i686_linux_gcc/badge.svg" alt="i686_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>Clang</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/i686_linux_clang/badge.svg" alt="i686_linux_clang" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>TinyCC</td>
<td style="text-align: right"> </td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/i686_windows_tcc/badge.svg" alt="i686_windows_tcc" /></td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>VS 2019</td>
<td style="text-align: right"> </td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/i686_windows_vs2019/badge.svg" alt="i686_windows_vs2019" /></td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>i586</strong></td>
<td style="text-align: right"><strong>Linux</strong></td>
<td style="text-align: right"><strong>DOS</strong></td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"> </td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/i586_dos_gcc_cross/badge.svg" alt="i586_dos_gcc_cross" /></td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td> </td>
<td style="text-align: right"><strong>Linux</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>powerpc</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/powerpc_linux_gcc/badge.svg" alt="powerpc_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>ppc64(le)</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/ppc64_linux_gcc/badge.svg" alt="ppc64_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/ppc64le_linux_gcc/badge.svg" alt="ppc64le_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>s390x</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/s390x_linux_gcc/badge.svg" alt="s390x_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>armhf</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/armhf_linux_gcc/badge.svg" alt="armhf_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>arm64</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/arm64_linux_gcc/badge.svg" alt="arm64_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>mips(el)</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/mipsel_linux_gcc/badge.svg" alt="mipsel_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/mips_linux_gcc/badge.svg" alt="mips_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>mips64(el)</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/mips64el_linux_gcc/badge.svg" alt="mips64el_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/mips64_linux_gcc/badge.svg" alt="mips64_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>riscv</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/riscv_linux_gcc/badge.svg" alt="riscv_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td><strong>riscv64</strong></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
<tr>
<td>GCC</td>
<td style="text-align: right"><img src="https://github.com/ariya/FastLZ/workflows/riscv64_linux_gcc/badge.svg" alt="riscv64_linux_gcc" /></td>
<td style="text-align: right"> </td>
<td style="text-align: right"> </td>
</tr>
</tbody>
</table>
<h2 id="block-format">Block Format</h2>
<p>Let us assume that FastLZ compresses an array of bytes, called the <em>uncompressed block</em>, into another array of bytes, called the <em>compressed block</em>. To understand what will be stored in the compressed block, it is illustrative to demonstrate how FastLZ will <em>decompress</em> the block to retrieve the original uncompressed block.</p>
<p>The first 3-bit of the block, i.e. the 3 most-significant bits of the first byte, is the <strong>block tag</strong>. Currently the block tag determines the compression level used to produce the compressed block.</p>
<table>
<thead>
<tr>
<th>Block tag</th>
<th>Compression level</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>Level 1</td>
</tr>
<tr>
<td>1</td>
<td>Level 2</td>
</tr>
</tbody>
</table>
<p>The content of the block will vary depending on the compression level.</p>
<h3 id="block-format-for-level-1">Block Format for Level 1</h3>
<p>FastLZ Level 1 implements LZ77 compression algorithm with 8 KB sliding window and up to 264 bytes of match length.</p>
<p>The compressed block consists of one or more <strong>instructions</strong>.
Each instruction starts with a 1-byte opcode, 2-byte opcode, or 3-byte opcode.</p>
<table>
<thead>
<tr>
<th>Instruction type</th>
<th>Opcode[0]</th>
<th>Opcode[1]</th>
<th>Opcode[2]</th>
</tr>
</thead>
<tbody>
<tr>
<td>Literal run</td>
<td><code class="language-plaintext highlighter-rouge">000</code>, L₄-L₀</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Short match</td>
<td>M₂-M₀, R₁₂-R₈</td>
<td>R₇-R₀</td>
<td>-</td>
</tr>
<tr>
<td>Long match</td>
<td><code class="language-plaintext highlighter-rouge">111</code>, R₁₂-R₈</td>
<td>M₇-M₀</td>
<td>R₇-R₀</td>
</tr>
</tbody>
</table>
<p>Note that the <em>very first</em> instruction in a compressed block is always a literal run.</p>
<h4 id="literal-run-instruction">Literal run instruction</h4>
<p>For the literal run instruction, there is one or more bytes following the code. This is called the literal run.</p>
<p>The 5 least-significant bits of <code class="language-plaintext highlighter-rouge">opcode[0]</code>, <em>L</em>, determines the <strong>number of literals</strong> following the opcode. The value of 0 indicates a 1-byte literal run, 1 indicates a 2-byte literal run, and so on. The minimum literal run is 1 and the maximum literal run is 32.</p>
<p>The decompressor copies (<em>L + 1</em>) bytes of literal run, starting from the first one right after opcode.</p>
<p><em>Example</em>: If the compressed block is a 4-byte array of <code class="language-plaintext highlighter-rouge">[0x02, 0x41, 0x42, 0x43]</code>, then the opcode is <code class="language-plaintext highlighter-rouge">0x02</code> and that means a literal run of 3 bytes. The decompressor will then copy the subsequent 3 bytes, <code class="language-plaintext highlighter-rouge">[0x41, 0x42, 0x43]</code>, to the output buffer. The output buffer now represents the (original) uncompressed block, <code class="language-plaintext highlighter-rouge">[0x41, 0x42, 0x43]</code>.</p>
<h4 id="short-match-instruction">Short match instruction</h4>
<p>The 3 most-significant bits of <code class="language-plaintext highlighter-rouge">opcode[0]</code>, <em>M</em>, determines the <strong>match length</strong>. The value of 1 indicates a 3-byte match, 2 indicates a 4-byte match and so on. The minimum match length is 3 and the maximum match length is 8.</p>
<p>The 5 least-significant bits of <code class="language-plaintext highlighter-rouge">opcode[0]</code> combined with the 8 bits of the <code class="language-plaintext highlighter-rouge">opcode[1]</code>, <em>R</em>, determines the <strong>reference offset</strong>. Since the offset is encoded in 13 bits, the minimum is 0 and the maximum is 8191.</p>
<p>The following C code retrieves the match length and reference offset:</p>
<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">M</span> <span class="o">=</span> <span class="n">opcode</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">>></span> <span class="mi">5</span><span class="p">;</span>
<span class="n">R</span> <span class="o">=</span> <span class="mi">256</span> <span class="o">*</span> <span class="p">(</span><span class="n">opcode</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><<</span> <span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">opcode</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
</code></pre></div></div>
<p>The decompressor copies <em>(M+2)</em> bytes, starting from the location offsetted by <em>R</em> in the output buffer. Note that <em>R</em> is a <em>back reference</em>, i.e. the value of 0 corresponds the last byte in the output buffer, 1 is the second to last byte, and so forth.</p>
<p><em>Example 1</em>: If the compressed block is a 7-byte array of <code class="language-plaintext highlighter-rouge">[0x03, 0x41, 0x42, 0x43, 0x44, 0x20, 0x02]</code>, then there are two instructions in the there. The first instruction is the literal run of 4 bytes (due to <em>L = 3</em>). Thus, the decompressor copies 4 bytes to the output buffer, resulting in <code class="language-plaintext highlighter-rouge">[0x41, 0x42, 0x43, 0x44]</code>. The second instruction is the short match of 3 bytes (from <em>M = 1</em>, i.e <code class="language-plaintext highlighter-rouge">0x20 >> 5</code>) and the offset of 2. Therefore, the compressor goes back 2 bytes from the last position, copies 3 bytes (<code class="language-plaintext highlighter-rouge">[0x42, 0x43, 0x44]</code>), and appends them to the output buffer. The output buffer now represents the complete uncompressed data, <code class="language-plaintext highlighter-rouge">[0x41, 0x42, 0x43, 0x44, 0x42, 0x43, 0x44]</code>.</p>
<p><em>Example 2</em>: If the compressed block is a 4-byte array of <code class="language-plaintext highlighter-rouge">[0x00, 0x61, 0x40, 0x00]</code>, then there are two instructions in there. The first instruction is the literal run of just 1 byte (<em>L = 0</em>). Thus, the decompressor copies the byte (<code class="language-plaintext highlighter-rouge">0x61</code>) to the output buffer. The output buffer now becomes <code class="language-plaintext highlighter-rouge">[0x61]</code>. The second instruction is the short match of 4 bytes (from <em>M = 2</em>, i.e. <code class="language-plaintext highlighter-rouge">0x40 >> 5</code>) and the offset of 0. Therefore, the decompressor copies 4 bytes starting using the back reference of 0 (i.e. the position of <code class="language-plaintext highlighter-rouge">0x61</code>). The output buffer now represents the complete uncompressed data, <code class="language-plaintext highlighter-rouge">[0x61, 0x61, 0x61, 0x61, 0x61]</code>.</p>
<h4 id="long-match-instruction">Long match instruction</h4>
<p>The value of <code class="language-plaintext highlighter-rouge">opcode[1]</code>, <em>M</em>, determines the <strong>match length</strong>. The value of 0 indicates a 9-byte match, 1 indicates a 10-byte match and so on. The minimum match length is 9 and the maximum match length is 264.</p>
<p>The 5 least-significant bits of <code class="language-plaintext highlighter-rouge">opcode[0]</code> combined with the 8 bits of <code class="language-plaintext highlighter-rouge">opcode[2]</code>, <em>R</em>, determines the <strong>reference offset</strong>. Since the offset is encoded in 13 bits, the minimum is 0 and the maximum is 8191.</p>
<p>The following C code retrieves the match length and reference offset:</p>
<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">M</span> <span class="o">=</span> <span class="n">opcode</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="n">R</span> <span class="o">=</span> <span class="mi">256</span> <span class="o">*</span> <span class="p">(</span><span class="n">opcode</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><<</span> <span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="n">opcode</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
</code></pre></div></div>
<p>The decompressor copies <em>(M+9)</em> bytes, starting from the location offsetted by <em>R</em> in the output buffer. Note that <em>R</em> is a <em>back reference</em>, i.e. the value of 0 corresponds to the last byte in the output buffer, 1 is for the second to last byte, and so forth.</p>
<p><em>Example</em>: If the compressed block is a 4-byte array of <code class="language-plaintext highlighter-rouge">[0x01, 0x44, 0x45, 0xE0, 0x01, 0x01]</code>, then there are two instructions in there. The first instruction is the literal run with the length of 2 (due to <em>L = 1</em>). Thus, the decompressor copies the 2-byte literal run (<code class="language-plaintext highlighter-rouge">[0x44, 0x45]</code>) to the output buffer. The second instruction is the long match with the match length of 10 (from <em>M = 1</em>) and the offset of 1. Therefore, the decompressor copies 10 bytes starting using the back reference of 1 (i.e. the position of <code class="language-plaintext highlighter-rouge">0x44</code>). The output buffer now represents the complete uncompressed data, <code class="language-plaintext highlighter-rouge">[0x44, 0x45, 0x44, 0x45, 0x44, 0x45, 0x44, 0x45, 0x44, 0x45, 0x44, 0x45]</code>.</p>
<h4 id="decompressor-reference-implementation">Decompressor Reference Implementation</h4>
<p>The following 40-line C function implements a fully-functional decompressor for the above block format. Note that it is intended to be educational, e.g. no bound check is implemented, and therefore it is absolutely <strong>unsafe</strong> for production.</p>
<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">void</span> <span class="nf">fastlz_level1_decompress</span><span class="p">(</span><span class="k">const</span> <span class="kt">uint8_t</span><span class="o">*</span> <span class="n">input</span><span class="p">,</span> <span class="kt">int</span> <span class="n">length</span><span class="p">,</span> <span class="kt">uint8_t</span><span class="o">*</span> <span class="n">output</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">src</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">dest</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">src</span> <span class="o"><</span> <span class="n">length</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">type</span> <span class="o">=</span> <span class="n">input</span><span class="p">[</span><span class="n">src</span><span class="p">]</span> <span class="o">>></span> <span class="mi">5</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">type</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="cm">/* literal run */</span>
<span class="kt">int</span> <span class="n">run</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">input</span><span class="p">[</span><span class="n">src</span><span class="p">];</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">src</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">run</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">output</span><span class="p">[</span><span class="n">dest</span><span class="p">]</span> <span class="o">=</span> <span class="n">input</span><span class="p">[</span><span class="n">src</span><span class="p">];</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">src</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">run</span> <span class="o">=</span> <span class="n">run</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">type</span> <span class="o"><</span> <span class="mi">7</span><span class="p">)</span> <span class="p">{</span>
<span class="cm">/* short match */</span>
<span class="kt">int</span> <span class="n">ofs</span> <span class="o">=</span> <span class="mi">256</span> <span class="o">*</span> <span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="n">src</span><span class="p">]</span> <span class="o">&</span> <span class="mi">31</span><span class="p">)</span> <span class="o">+</span> <span class="n">input</span><span class="p">[</span><span class="n">src</span> <span class="o">+</span> <span class="mi">1</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">+</span> <span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="n">src</span><span class="p">]</span> <span class="o">>></span> <span class="mi">5</span><span class="p">);</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">src</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">-</span> <span class="n">ofs</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">len</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">output</span><span class="p">[</span><span class="n">dest</span><span class="p">]</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="n">ref</span><span class="p">];</span>
<span class="n">ref</span> <span class="o">=</span> <span class="n">ref</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">len</span> <span class="o">=</span> <span class="n">len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="cm">/* long match */</span>
<span class="kt">int</span> <span class="n">ofs</span> <span class="o">=</span> <span class="mi">256</span> <span class="o">*</span> <span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="n">src</span><span class="p">]</span> <span class="o">&</span> <span class="mi">31</span><span class="p">)</span> <span class="o">+</span> <span class="n">input</span><span class="p">[</span><span class="n">src</span> <span class="o">+</span> <span class="mi">2</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="mi">9</span> <span class="o">+</span> <span class="n">input</span><span class="p">[</span><span class="n">src</span> <span class="o">+</span> <span class="mi">1</span><span class="p">];</span>
<span class="n">src</span> <span class="o">=</span> <span class="n">src</span> <span class="o">+</span> <span class="mi">3</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">ref</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">-</span> <span class="n">ofs</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">len</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">output</span><span class="p">[</span><span class="n">dest</span><span class="p">]</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="n">ref</span><span class="p">];</span>
<span class="n">ref</span> <span class="o">=</span> <span class="n">ref</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">len</span> <span class="o">=</span> <span class="n">len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
<h3 id="block-format-for-level-2">Block Format for Level 2</h3>
<p>(To be written)</p>
</section>
<footer>
FastLZ is maintained by <a href="https://github.com/ariya">ariya</a><br>
This page was generated by <a href="https://pages.github.com">GitHub Pages</a>.
</footer>
</div>
</div>
</body>
</html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Не найдено
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 0 оптимально.
Внешние ссылки
Кол-во: 32
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 32 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| en.wikipedia.org |
Lempel-Ziv 77 algorithm
|
Анализировать url |
| mattmahoney.net |
enwik8
|
Анализировать url |
| github.com |
more details
|
Анализировать url |
| en.wikipedia.org |
Death Stranding
|
Анализировать url |
| godotengine.org |
Godot Engine
|
Анализировать url |
| hhvm.com |
Facebook HHVM
|
Анализировать url |
| trafficserver.apache.org |
Apache Traffic Server
|
Анализировать url |
| calligra.org |
Calligra Office
|
Анализировать url |
| osv.io |
OSv
|
Анализировать url |
| netty.io |
Netty
|
Анализировать url |
| blosc.org |
BLOSC
|
Анализировать url |
| lz4.github.io |
LZ4
|
Анализировать url |
| google.github.io |
Snappy
|
Анализировать url |
| github.com |
Density
|
Анализировать url |
| oberhumer.com |
LZO
|
Анализировать url |
| oldhome.schmorp.de |
LZF
|
Анализировать url |
| en.wikipedia.org |
LZJB
|
Анализировать url |
| ross.net |
LZRW
|
Анализировать url |
| crates.io |
Rust
|
Анализировать url |
| pypi.org |
Python
|
Анализировать url |
| npmjs.com |
JavaScript
|
Анализировать url |
| rubygems.org |
Ruby
|
Анализировать url |
| github.com |
github.com/oneoo/lua-fastlz
|
Анализировать url |
| github.com |
Vcpkg
|
Анализировать url |
| github.com |
already available
|
Анализировать url |
| gcc.gnu.org |
GCC
|
Анализировать url |
| clang.llvm.org |
Clang
|
Анализировать url |
| visualstudio.microsoft.com |
Visual Studio
|
Анализировать url |
| bellard.org |
Tiny CC
|
Анализировать url |
| github.com |
GitHub Actions build logs
|
Анализировать url |
| github.com |
ariya
|
Анализировать url |
| pages.github.com |
GitHub Pages
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Таким сайт fastlz.org видят поисковые системы. Процент оптимизации невысокий - 65%. Чтобы улучшить сайт и попасть в ТОП необходимо:
Исправьте ошибки в мета-тегах.
Исправьте ошибки индексации.
Поделитесь с друзьями: