Dartdoc: Dartdoc di Dart 2 jauh lebih lambat dari Dart 1

Dibuat pada 15 Mar 2019  ·  12Komentar  ·  Sumber: dart-lang/dartdoc

Ringkasan

Menjalankan dartdoc pada paket pribadi, saya perhatikan dibutuhkan 32x lebih lama pada dart 2. Di bawah dart 1 itu hanya mem-parsing perpustakaan tunggal sedangkan di bawah dart 2 itu mem-parsing SEMUA paket bahkan sebelum menghasilkan dokumen apa pun.

15s - dartdoc di dart 1.24.3 (dartdoc versi 0.9.14-dev)
8m 17s - dartdoc di dart 2.2.0 (dartdoc versi 0.28.1+2)

panah 1

time dartdoc
Generating documentation for 'tour' into /Users/robbecker/code/tour.dart/doc/api/

parsing lib/tour.dart...
Parsed 1 file in 12.5 seconds.

documenting tour
generating docs for library tour from tour.dart...
Documented 1 library in 15.0 seconds.

Success! Docs generated into /Users/robbecker/code/tour.dart/doc/api
dartdoc  19.77s user 1.28s system 136% cpu 15.424 total

panah 2

time dartdoc
Documenting tour...
parsing /Users/robbecker/code/tour.dart/lib/tour.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/core/core.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/collection/collection.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/internal/internal.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/async/async.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/convert/convert.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/typed_data/typed_data.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/math/math.dart...
parsing /Users/robbecker/code/tour.dart/lib/src/interaction_utils.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/html/dart2js/html_dart2js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/html/html_common/html_common.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/js/dart2js/js_dart2js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/_internal/js_runtime/lib/foreign_helper.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/_internal/js_runtime/lib/shared/embedded_names.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/_internal/js_runtime/lib/interceptors.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/_internal/js_runtime/lib/js_helper.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/_internal/js_runtime/lib/native_typed_data.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/_internal/js_runtime/lib/js_names.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/js/_js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/mirrors/mirrors.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/html/dartium/nativewrappers.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/web_gl/dart2js/web_gl_dart2js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/html/html_common/metadata.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/indexed_db/dart2js/indexed_db_dart2js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/svg/dart2js/svg_dart2js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/web_audio/dart2js/web_audio_dart2js.dart...
parsing /usr/local/Cellar/dart/2.2.0/libexec/lib/web_sql/dart2js/web_sql_dart2js.dart...
parsing /Users/robbecker/code/tour.dart/lib/src/tour.dart...
parsing /Users/robbecker/.pub-cache/hosted/pub.workiva.org/web_skin_dart-2.37.0/lib/ui_components.dart...

[...snip hundreds of more packages in the .pub-cache ...]

parsing /Users/robbecker/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/mock_client.dart...
Initialized dartdoc with 1509 libraries in 491.9 seconds
documenting tour
Generating docs for library tour from package:tour/tour.dart...
  warning: unresolved doc reference [rootNode]
    from tour.TourComponent.componentDidMount: (file:///Users/robbecker/code/tour.dart/lib/src/tour_component.dart:74:8)
    in documentation inherited from react.Component.componentDidMount: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:299:8)
  warning: unresolved doc reference [reactComponentClass]
    from tour.TourComponent.getDefaultProps: (file:///Users/robbecker/code/tour.dart/lib/src/tour_component.dart:66:7)
    in documentation inherited from react.Component.getDefaultProps: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:439:7)
  warning: unresolved doc reference [Element]
    from tour.TourComponent.render: (file:///Users/robbecker/code/tour.dart/lib/src/tour_component.dart:87:16)
    in documentation inherited from react.Component.render: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:448:11)
  warning: unresolved doc reference [DivElement]
    from tour.TourComponent.render: (file:///Users/robbecker/code/tour.dart/lib/src/tour_component.dart:87:16)
    in documentation inherited from react.Component.render: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:448:11)
  warning: unresolved doc reference [rootNode]
    from tour.TourComponent.componentDidUpdate: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:375:8)
    in documentation inherited from react.Component.componentDidUpdate: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:375:8)
  warning: unresolved doc reference [Element]
    from tour.TourComponent.componentWillUnmount: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/over_react-2.3.0+dart2/lib/src/component_declaration/component_base.dart:230:8)
    in documentation inherited from react.Component.componentWillUnmount: (file:///Users/robbecker/.pub-cache/hosted/pub.dartlang.org/react-4.6.2/lib/react.dart:383:8)
  warning: unresolved doc reference [defaultRepositionOverlay]
    from tour.TourProps.useLegacyPositioning: (file:///Users/robbecker/.pub-cache/hosted/pub.workiva.org/web_skin_dart-2.37.0/lib/src/ui_components/overlay/overlay_renderer.dart:53:8)
    in documentation inherited from web_skin_dart.ui_components.overlays.OverlayPositionPropsMixin.useLegacyPositioning: (file:///Users/robbecker/.pub-cache/hosted/pub.workiva.org/web_skin_dart-2.37.0/lib/src/ui_components/overlay/overlay_renderer.dart:53:8)
Validating docs...
found 7 warnings and 0 errors
Documented 1 public library in 4.6 seconds
Success! Docs generated into /Users/robbecker/code/tour.dart/doc/api
dartdoc  611.26s user 38.81s system 130% cpu 8:17.03 total
P2

Komentar yang paling membantu

Saya juga tertarik untuk mengetahui apakah --no-auto-include-dependencies berfungsi seperti yang diharapkan (atau mungkin jika saya salah memahami tujuan yang dimaksudkan?) karena saya masih melihat sebagian besar waktu yang dihabiskan untuk menguraikan file di ~/.pub-cache ketika berlari dengan bendera itu.

Semua 12 komentar

Terima kasih atas laporannya!

Apakah ini terkait dengan #1827?

Saya menduga tidak terkait, dan mungkin tidak terkait dengan pergantian dart 1 / dart 2. Kami sekarang memverifikasi lebih banyak aspek dari kode yang dihasilkan, sehingga perlambatan kemungkinan karena melakukan pekerjaan tambahan. Konon, 30x lebih lambat memang terdengar lebih besar dari yang diharapkan.

Terima kasih telah menyelidiki @devoncarew .. ada detail lain yang dapat saya berikan untuk membantu menjelaskan semuanya?

@devoncarew Kami semakin dekat untuk memiliki semua paket kami beralih ke dart2 di mana kami harus memindahkan pembuatan dokumen dari dart 1 ke 2. Kami ingin menghindari peningkatan besar dalam waktu pembuatan ketika itu terjadi, jadi bantuan apa pun di sini akan dihargai. Saya juga mencoba flag --no-auto-include-dependencies tetapi tampaknya tidak berpengaruh (dartdoc v0.28.1+2).

Apakah ini terkait dengan keharusan membangun AST yang diselesaikan sepenuhnya untuk semua dependensi?

Saya juga tertarik untuk mengetahui apakah --no-auto-include-dependencies berfungsi seperti yang diharapkan (atau mungkin jika saya salah memahami tujuan yang dimaksudkan?) karena saya masih melihat sebagian besar waktu yang dihabiskan untuk menguraikan file di ~/.pub-cache ketika berlari dengan bendera itu.

Ada pembaruan tentang ini? Menemukan bahwa menjalankan dartdoc membutuhkan waktu 27 menit pada paket yang cukup kecil karena ~/.pub-cache, jadi kami memilih untuk tidak menjalankannya sama sekali. Terima kasih!

@devoncarew @jcollins-g apakah mungkin untuk mendapatkan pembaruan apa pun tentang ini? Apakah dartdoc seharusnya berjalan di semua dependensi secara default? Dan jika demikian, apakah ada cara untuk hanya menghasilkan dokumen untuk paket saat ini? Saya pikir berdasarkan nama bahwa --no-auto-include-dependencies akan melakukan itu, tetapi tidak berhasil (https://github.com/dart-lang/dartdoc/issues/1943#issuecomment-494479752). Saya mencobanya lagi hari ini di Dart 2.6.0-dev.8.1.

Saya juga mencoba menambahkan dartdoc_options.yaml yang hanya menyertakan paket root, misalnya:

dartdoc:
  include:
    - w_transport

Tapi itu hanya mempercepat generasi beberapa detik.

Akan sangat membantu untuk mengetahui apakah perlambatan ini hanya hasil yang diharapkan mengingat jumlah pekerjaan tambahan yang dilakukan dartdoc sekarang dibandingkan dengan pada dart 1, atau jika ini tidak terduga.

Ketika paket diterbitkan ke pub, perintah apa yang dijalankan untuk menghasilkan dokumen tersebut? Apakah hanya dartdoc ? Apakah ada analitik tentang berapa lama pembuatan dokumen untuk paket publik yang dapat kami gunakan untuk membandingkan dengan waktu pembuatan yang kami lihat?

Ini adalah hasil yang diharapkan; dartdoc mencoba untuk menghitung lebih banyak, termasuk dukungan untuk hyperlink eksternal dan paket hyperlink bersama-sama, dan kanonikalisasi antarmuka publik. Ini berarti dartdoc saat ini memeriksa semua paket dependen untuk menentukan di mana elemen tertentu perlu didokumentasikan. Ini rumit, karena bergantung pada flag, Dartdoc mungkin mendokumentasikan elemen yang diwarisi atau diekspor kembali di banyak tempat berbeda.

Namun, seharusnya tidak selambat itu -- ada banyak ruang untuk perbaikan.

pertanyaan tentang bagaimana dartdoc dijalankan di situs pub rumit, tetapi di sini adalah titik masuk utama: https://github.com/dart-lang/pub-dev/blob/1148c9180efe14e05d2be09da5697848bee0af40/pkg/pub_dartdoc/bin/pub_dartdoc. anak panah

FYI, --no-auto-include-dependencies adalah default. Dartdoc masih perlu membaca banyak dependensi meskipun tidak menghasilkan dokumen tentangnya.

Berikut adalah beberapa tanda yang dapat Anda coba untuk mengurangi waktu pembuatan jika Anda berada di CI atau lingkungan lain di mana kinerja penting:

--no-generate-docs -- Lakukan segalanya kecuali menulis dokumen dan memvalidasinya. Karena perpustakaan templating Dartdoc sangat lambat, dan validator dokumen sangat teliti, ini dapat menghemat BANYAK waktu. Ini mungkin tampak konyol (mengapa menjalankan dartdoc?) tetapi jika Anda tidak benar-benar menerbitkan dokumen tetapi hanya ingin pemberitahuan awal tentang peringatan baru dan kesalahan fatal, saya sangat merekomendasikan tanda ini. Menyiratkan --no-validate-docs .

--no-validate-docs -- Ini menghasilkan dokumen tetapi tidak menjalankannya melalui pemeriksaan "periksa setiap tautan tunggal yang dihasilkan dartdoc tidak rusak". Jika Anda memiliki validator tautan yang rusak pada publikasi situs web Anda, Anda tidak memerlukan ini kecuali debugging. Saat men-debug, dartdoc dapat memberi tahu Anda dengan tepat dari baris kode asli mana tautan yang rusak itu berasal, tetapi itu sangat mahal, dan validator tautan kami tidak dioptimalkan.

Saya telah mengurangi waktu untuk menghasilkan dokumen, untuk dartdoc 0.32.3, tetapi tidak hingga 32x. :/

Apakah halaman ini membantu?
0 / 5 - 0 peringkat