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.
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:
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.
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.
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.
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
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
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.
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.