HAR İle Dosya İsteklerinin Derlenmesi ve Analizi
Bir web sitesi yüklenme sürecinde statik ve dinamik olarak pek çok farklı formattan dosyanın arka planda indirilmesi esasına göre hareket etmektedir. Tarayıcının Network sekmesi aracılığı ile dosyaların hangi aşamada indirildiği, boyutu ve içeriği gibi bilgilerine ulaşmak mümkün. Bu dosyalar ayrıca formatlarına göre de gruplandırılabilmekte. Ancak, ilgili dosyaları tarayıcı dışında offline olarak inceleyebilmek ve/veya analiz edebilmek için genelde dosyaların tek tek indirilmekte veya Network alanı üzerinden değerlendirme yapılmakta. Bu yazıda alternatif bir yöntem olan HAR olarak isteklerin edinilmesinden bahsedeceğim.
Görüntülenen bir web sayfası yüklenme sürecinde gerçekleştirilen istekleri (GET, POST, vb.) ve istekler neticesinde iletilen ve/veya dönen yanıtları Network aracılığı ile izleyebilmekteyiz.
İlgili istekleri genel olarak ya da belirli bir formata göre listeleyerek ilgili alan üzerine sağ tıkladığımızda karşımıza Save all as HAR with content seçeneği çıkar. Bu seçenek sayesinde ilgili istekler HAR formatında (*.har
) bilgisayarımıza indirilebilmektedir. Aşağıda JS isteklerini içeren örnek bir HAR içeriği yer almaktadır.
Peki, HAR nedir?
HTTP Archive (HAR) Formatı
HTTP Archive (HAR), bir web tarayıcısının bir siteyle etkileşiminin günlüğe (logging) JSON biçiminde arşivlenerek kaydedilmesi sonucu oluşan bir dosya formatıdır. Bu arşiv ilgili isteklerle ilgili ayrıntılı performans verilerini (header, metadata, cookies, form data, vs.) içerir ve bu bilgiler dışa aktarılabilir1 2 3.
Bu biçim, World Wide Web Konsorsiyumu'nun (W3C) Web Performansı Çalışma Grubu tarafından üretilmiştir ancak hiçbir zaman yayınlanmamıştır1.
Aşağıda JS isteklerini içeren örnek bir HAR arşiv içeriği yer almaktadır.
{
"log": {
"version": "1.2",
"creator": {
"name": "WebInspector",
"version": "537.36"
},
"pages": [],
"entries": [
{
"_initiator": {
"type": "script",
"stack": {
"callFrames": [
{
"functionName": "send",
"scriptId": "65",
"url": "https://script.bugpilot.io/d1d055a0-ece1-4f91-9ac1-9ae73f43df0d/adopto.js",
"lineNumber": 572,
"columnNumber": 665
},
{
"functionName": "Ta",
"scriptId": "164",
"url": "https://www.clarity.ms/s/0.7.7/clarity.js",
"lineNumber": 1,
"columnNumber": 40543
},
{
"functionName": "",
"scriptId": "164",
"url": "https://www.clarity.ms/s/0.7.7/clarity.js",
"lineNumber": 1,
"columnNumber": 39956
},
{
"functionName": "",
"scriptId": "164",
"url": "https://www.clarity.ms/s/0.7.7/clarity.js",
"lineNumber": 1,
"columnNumber": 7773
},
{
"functionName": "",
"scriptId": "164",
"url": "https://www.clarity.ms/s/0.7.7/clarity.js",
"lineNumber": 1,
"columnNumber": 7878
},
{
"functionName": "o",
"scriptId": "164",
"url": "https://www.clarity.ms/s/0.7.7/clarity.js",
"lineNumber": 1,
"columnNumber": 6595
}
]
}
}
}],
// ...
}
}
HAR dosyaları çeşitli araçlar aracılığı ile görüntülenebileceği4 5 gibi ilgili dosyaların (web sitesinin görüntülendiği süreçte gerçekleşen tüm etkileşimleri içerecek şekilde) indirilmesi için de kullanılabilmektedir6 7 8.
Github. "swiss-army-scripts". altında yayınladığım har-js-analyzer/js-file-downloader.py ile bir HAR dosyasında yer alan (örnek dosya bu işlemi JS formatlı dosyalar için gerçekleştirmekte) dosyaların indirilmesi sağlanabilmekte. har-js-analyzer/js-analyzer.py ile ise ilgili HAR içeriği için temel bir analiz gerçekleştirilebilmekte.
Temel HAR Analiz İşlemi
Örnek kod parçacığı JS dosyalarına ait istekleri içermekte ve analiz işlemi de yine bu dosyalar bağlamında gerçekleştirilmekte. Elbette dosya formatı değiştirilebileceği için format seçeneği kaldırılarak ilgili işlemler tüm istekler için gerçekleştirilebilir.
...
import json
from haralyzer import HarParser, HarPage
with open('har_data.har', 'r') as f:
har_parser = HarParser(json.loads(f.read()))
print har_parser.browser
# {u'name': u'Firefox', u'version': u'25.0.1'}
print har_parser.hostname
# 'humanssuck.net'
for page in har_parser.pages:
assert isinstance(page, HarPage, None)
# returns True for each
har-image-analyzer.py
dosyasında yer alan Python kod parçacığı ile entry
sayısı, entry
kapsamındaki sütunlar, isteklerle ilgili özet (min, max, mean, vb.) bilgiler, görsellerin isim ve boyutları gibi bilgilere ulaşabilir, görselleri gruplandırabilir ve toplam yüklenme sürelerini karşılaştırabilirsiniz.
- Entry sayısı 38
- Görsel isteği sayısı: 18
Dosya Adı | Boyut |
---|---|
wikipedia.png | 13444 B |
100px-Salvador_Dal%C3%AD_1939.jpg | 4674 B |
150px-The_Simpsons_yellow_logo.svg.png | 6716 B |
100px-YuanEmperorAlbumKhubilaiPortrait.jpg | 3038 B |
68px-Ask_and_Embla_by_Robert_Engels.jpg | 4934 B |
250px-Sergei_Rachmaninoff_LOC_33969u.jpg | 18170 B |
48px-Notification-icon-Wikiquote.svg.png | 1322 B |
48px-Notification-icon-Wikisource-logo.svg.png | 1784 B |
48px-Notification-icon-Commons-logo.svg.png | 960 B |
48px-Notification-icon-Wiktionary-logo.svg.png | 4270 B |
48px-Notification-icon-Wikidata-logo.svg.png | 568 B |
48px-Notification-icon-Wikibooks-logo.svg.png | 2770 B |
48px-Notification-icon-Wikiversity-logo.svg.png | 1813 B |
48px-MediaWiki-2020-icon.svg.png | 2890 B |
48px-Notification-icon-Wikivoyage-logo.svg.png | 628 B |
48px-Notification-icon-Wikispecies-logo.svg.png | 1680 B |
48px-Notification-icon-Meta-logo.svg.png | 2010 B |
171px-Logo_original-t.png | 9212 B |
Dosya Adı | İstek Sayısı | Toplam Boyut | Maksimum Yükleme Süresi | Minimum Yükleme Süresi | Ortalama Yükleme Süresi |
---|---|---|---|---|---|
wikipedia.png | 1 | 13444 B | 318.45 ms | 318.45 ms | 318.45 ms |
100px-Salvador_Dal%C3%AD_1939.jpg | 1 | 4674 B | 522.38 ms | 522.38 ms | 522.38 ms |
150px-The_Simpsons_yellow_logo.svg | 1 | 4977 B | 285.14 ms | 285.14 ms | 285.14 ms |
220px-Leonhard_Euler_2.jpg | 1 | 13595 B | 308.75 ms | 308.75 ms | 308.75 ms |
1200px-Manhattan_wikivoyage_banner.jpg | 1 | 142069 B | 1.25 s | 1.25 s | 1.25 s |
2000px-BlankMap-World6.svg | 1 | 171246 B | 982.39 ms | 982.39 ms | 982.39 ms |
1400px-Rubik's_cube.svg.png | 1 | 182729 B | 1.22 s | 1.22 s | 1.22 s |
2000px-Map_of_the_world_by_the_US_Gov_as_of_2016.svg | 1 | 710413 B | 1.54 s | 1.54 s | 1.54 s |
- HTTP Archive (HAR) format ↩ ↩
- HAR (file format). Wikipedia ↩
- View request payload. Network features reference. Chrome Developer ↩
- HAR Viewer ↩
- Google Yönetici Araç Kutusu. HAR Analiz Aracı ↩
- Github. "swiss-army-scripts". har-js-analyzer/js-file-downloader.py ↩
- Leonardo Faria. "How to Use HAR Files to Analyze Performance Over Time" ↩
- Rakesh Seal. "A Comprehensive Guide on HAR Files" ↩