lightpanda.io

Lightpanda adalah browser open-source yang dibuat untuk penggunaan tanpa kepala:

  • Eksekusi Javascript
  • Dukungan API Web (parsial, WIP)
  • Kompatibel dengan penulis naskah, dalang melalui CDP (WIP)

Otomatisasi Web Cepat untuk Agen AI, Pelatihan LLM, Mengikis dan Menguji dengan Jejak Memori Minimal:

  • Jejak memori ultra-rendah (9x kurang dari chrome)
  • Eksekusi yang sangat cepat (11x lebih cepat dari Chrome) & Startup Instan

Lihat Detail Benchmark.

Instal dari build malam

Anda dapat mengunduh biner terakhir dari Build Nightly untuk Linux X86_64 dan MacOS AARCH64.

# Download the binary
$ wget 
$ chmod a+x ./lightpanda-x86_64-linux
$ ./lightpanda-x86_64-linux -h
usage: ./lightpanda-x86_64-linux (options) (URL)

  start Lightpanda browser

  * if an url is provided the browser will fetch the page and exit
  * otherwhise the browser starts a CDP server

  -h, --help      Print this help message and exit.
  --host          Host of the CDP server (default "127.0.0.1")
  --port          Port of the CDP server (default "9222")
  --timeout       Timeout for incoming connections of the CDP server (in seconds, default "3")
  --dump          Dump document in stdout (fetch mode only)
$ ./lightpanda-x86_64-linux --dump 
info(browser): GET / http.Status.ok
info(browser): fetch script  http.Status.ok
info(browser): eval remote  TypeError: Cannot read properties of undefined (reading 'pushState')
$ ./lightpanda-x86_64-linux --host 127.0.0.1 --port 9222
info(websocket): starting blocking worker to listen on 127.0.0.1:9222
info(server): accepting new conn...

Setelah server CDP dimulai, Anda dapat menjalankan skrip dalang dengan mengkonfigurasi
browserWSEndpoint.

'use scrict'

import puppeteer from 'puppeteer-core';

// use browserWSEndpoint to pass the Lightpanda's CDP server address.
const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

// The rest of your script remains the same.
const context = await browser.createBrowserContext();
const page = await context.newPage();

await page.goto('https://wikipedia.com/');

await page.close();
await context.close();

Lightpanda ditulis dengan Zig 0.13.0. Anda harus menginstalnya dengan versi yang tepat untuk membangun proyek.

Lightpanda juga tergantung pada zig-js-runtime (dengan v8),
Netsurf Libs Dan
Mimalloc.

Untuk dapat membangun mesin V8 untuk zig-js-runtime, Anda harus menginstal beberapa lib:

Untuk Linux berbasis Debian/Ubuntu:

sudo apt install xz-utils 
    python3 ca-certificates git 
    pkg-config libglib2.0-dev 
    gperf libexpat1-dev 
    cmake clang

Untuk macOS, Anda hanya perlu cmake:

Instal dan Bangun Ketergantungan

Anda bisa berlari make install untuk menginstal DEP semuanya dalam satu (atau make install-dev Jika Anda membutuhkan versi pengembangan).

Ketahuilah bahwa tugas pembuatan sangat panjang dan memakan CPU, karena Anda akan membangun dari sumber semua ketergantungan, termasuk mesin V8 JavaScript.

Langkah demi langkah membangun ketergantungan

Proyek ini menggunakan submodul Git untuk dependensi.

Untuk memulai atau memperbarui submodul di vendor/ direktori:

Netsurf Libs

Netsurf Libs digunakan untuk parsing html dan generasi pohon DOM.

Untuk dev env, gunakan make install-netsurf-dev.

Mimalloc

Mimalloc digunakan sebagai alokasi memori C.

Untuk dev env, gunakan make install-mimalloc-dev.

Catatan: Saat Mimalloc dibangun dalam mode dev, Anda dapat membuang statistik memori dengan Env var MIMALLOC_SHOW_STATS=1. Melihat
https://microsoft.github.io/mimalloc/environment.html.

Zig-Js-Runtime

Runtime Zig/JavaScript kami sendiri, yang mencakup mesin V8 JavaScript.

Tugas pembuatan ini sangat panjang dan memakan CPU, karena Anda akan membangun V8 dari sumber.

make install-zig-js-runtime

Untuk dev env, gunakan make iinstall-zig-js-runtime-dev.

Anda dapat menguji lightpanda dengan berlari make test.

Lightpanda diuji terhadap standar Tes platform web.

Kasus tes yang relevan dilakukan dalam repositori khusus yang diambil oleh make install-submodule memerintah.

Semua kasus tes yang dijalankan berada di tests/wpt Sub-direktori.

Untuk referensi, Anda dapat dengan mudah menjalankan wadah uji WPT dengan browser Anda melalui
wpt.live.

Untuk menjalankan semua tes:

Atau satu tes khusus:

make wpt Node-childNodes.html

Kami menambahkan file kasus tes yang relevan baru ketika kami menerapkan perubahan di Lightpanda.

Untuk menambahkan tes baru, salin file yang Anda inginkan dari repo WPT ke tests/wpt direktori.

⚠️ Harap simpan struktur pohon direktori asli tests/wpt.

Lightpanda menerima permintaan tarik melalui GitHub.

Anda harus menandatangani CLA kami selama proses permintaan tarik jika tidak, kami tidak dapat menerima kontribusi Anda.

Eksekusi Javascript wajib untuk web modern

Di masa lalu yang indah, mengikis halaman web semudah membuat permintaan HTTP, seperti keriting. Itu tidak mungkin lagi, karena JavaScript ada di mana -mana, suka atau tidak:

  • Ajax, aplikasi satu halaman, pemuatan tak terbatas, “klik untuk ditampilkan”, pencarian instan, dll.
  • JS Web Frameworks: React, Vue, Angular & Others

Chrome bukan alat yang tepat

Jika kita membutuhkan JavaScript, mengapa tidak menggunakan browser web nyata? Ambil aplikasi desktop besar, retas, dan jalankan di server. Ratusan atau ribuan contoh Chrome jika Anda menggunakannya pada skala. Apakah Anda yakin itu ide yang bagus?

  • Berat di RAM dan CPU, mahal untuk dijalankan
  • Sulit untuk mengemas, menggunakan dan mempertahankan skala
  • Kembung, banyak fitur tidak berguna dalam penggunaan tanpa kepala

Lightpanda dibangun untuk kinerja

Jika kita menginginkan JavaScript dan kinerja di browser tanpa kepala sejati, kita harus mulai dari awal. Bukan iterasi kromium lagi, benar -benar dari halaman kosong. Gila kan? Tapi itu yang kami lakukan:

  • Tidak berdasarkan kromium, blink atau webkit
  • Bahasa Pemrograman Sistem Tingkat Rendah (Zig) dengan mempertimbangkan optimisasi
  • Opini: Tanpa rendering grafis

Lightpanda masih dalam proses dan saat ini berada pada tahap beta.

⚠️ Anda harus mengharapkan sebagian besar situs web gagal atau macet.

Berikut adalah fitur utama yang telah kami terapkan:

Catatan: Ada ratusan API Web. Mengembangkan browser (bahkan hanya untuk mode tanpa kepala) adalah tugas besar. Cakupan akan meningkat dari waktu ke waktu.

Anda juga dapat mengikuti kemajuan dukungan JavaScript kami dalam proyek Zig-JS-JS kami yang berdedikasi.

Sumber

Krystian Wiśniewski
Krystian Wiśniewski is a dedicated Sports Reporter and Editor with a degree in Sports Journalism from He graduated with a degree in Journalism from the University of Warsaw. Bringing over 14 years of international reporting experience, Krystian has covered major sports events across Europe, Asia, and the United States of America. Known for his dynamic storytelling and in-depth analysis, he is passionate about capturing the excitement of sports for global audiences and currently leads sports coverage and editorial projects at Agen BRILink dan BRI.