開発日記21.06.13第1週WIL


1.スモールプロジェクト


 フラスコで真字をフロントに伝える機能はとても便利です.これはajaxとは比べものにならない便利さです.振動子を用いてhtmlに必要な位置に情報を直感的に表示できるので,フロントの詳細な理解がなくても容易に行うことができる.

クライアント側のメリットとデメリット


長所


1-1. りゅうりょうを減らす
必要な変更データのみ受信
1-2. ユーザーエクスペリエンス
リフレッシュがなく、ユーザーはネイティブアプリケーションのような体験をすることができます.

短所


2-1. 検索エンジン
JavaScriptを中心としたプロジェクトに戻ると、JavaScriptエンジンが戻ってこない場合は、必要な情報を表示できません.REACTで作成したWebアプリケーションのソースコードをChromeで確認すると、内容は空になります.そのため、検索エンジンChrollerはデータを正しく収集できません.しかしZzangMan Googleの検索エンジンにはJavaScriptエンジンが内蔵されている.ただし、Naver、Nextなどの検索エンジンが正常にスクロールできないため、サーバ側レンダリングを個別に実行する必要があります.

サーバ側レンダリングのメリットとデメリット


長所


1-1.最適化可能な検索エンジン(SEO)
サーバ側レンダリングの最大の利点!
1-2.パフォーマンスの向上
最初にレンダリングされたhtmlをクライアントに渡すため、初期ロード速度を大幅に低減できます.JavaScriptファイルをロードおよびレンダリングする前に、ユーザーはサイトコンテンツを使用できます.

短所


2-1. プロジェクトの複雑さ
Reactでサーバ側レンダリングを実行する場合、RouterやReduxと一緒に使用すると複雑になる可能性があります.
2-2. 性能低下の可能性
サーバ側をレンダリングする場合、ReactDOMServer.renderToString関数を使用します.この関数は同期して実行されます.したがって、レンダリング中にイベントループがブロックされます.でも…!ライブラリでコードを記述して非同期で作業できます.

代替案


3-1. メタタグのみ追加
サーバ側では,ルーティングに応じて必要なメタタグのみを追加する.これにより、スクロールでページの基本情報を取得できます.
3-2. Prerender
このサービスは検索エンジンの最適化にのみ使用されます
 チームメンバーがプロジェクトを計画する際に実現不可能だと判断した機能は、最初から除外されているため、プロジェクトを完了するのはそれほど難しくありません.翌日、私が決めたすべての機能を実現しました.その後、これらの機能をどのように発展させるかを考えるのに時間がかかりました.結果、この過程はかえって難しくなりました.簡単なapiではなくseleniumを利用してより正確で詳細な情報を取得しようとした結果、多くの失敗と挫折に遭遇しました.結局諦めて、これから役に立つCelenniumの機能がたくさんあることしか知りませんでした.

2.データ構造とアルゴリズム


 ミニプロジェクト終了後、アルゴリズム週間が始まりました.今週まで課題は4週目までに航海99から提供された資料構造/アルゴリズム講座を完了することであり、一旦終了したものの、正確な意味は不明である.
 聞けば聞くほど、今回初めてコードを聞いた私が短時間でこの授業を理解できるかどうか疑問に思っています.幸いなことに、私はこのような問題を解決して頭を働かすのが好きなので、努力しましたが、結果は以下のようになりました.
def get_melon_best_album(genre_array, plays_array):
    genre_list = []
    genre_counts = {}
    genre_rank = []
    genre_dicts = []
    for i in range(len(genre_array)):
        genre_dicts.append({genre_array[i]: (plays[i], i)})
    for x in genre_array:
        if x not in genre_list:
            genre_list.append(x)
    for g in range(len(genre_array)):
        for genre in genre_list:
            if genre_array[g] == genre:
                if genre not in genre_counts:
                    genre_counts[genre] = plays_array[g]
                elif genre_counts[genre] < plays_array[g]:
                    genre_counts[genre] = plays_array[g]
    genre_counts_list = list(genre_counts)
    genre_counts_points = [0] * len(genre_counts_list)
    for n in range(len(genre_array)):
        for nl in range(len(genre_counts_list)):
            if genre_array[n] == genre_counts_list[nl]:
                genre_counts_points[nl] += plays_array[n]
    genre_counts = {name: value for name, value in zip(genre_counts_list, genre_counts_points)}
    for delete in range(len(genre_counts)):
        genre_rank.append(max(genre_counts, key=genre_counts.get))
        del genre_counts[max(genre_counts, key=genre_counts.get)]
    answer = list()
    for rank in genre_rank:  # pop, classic
        temp_rank_dicts = []
        for genre_dict in genre_dicts:  # [{'classic': 500}, {'pop': 600}, {'classic': 150}, {'classic': 800}, {'pop': 2500}]
            if rank in genre_dict:  # pop, classic
                temp_rank_dicts.append(genre_dict)
        temp_rank = list()
        temp_rank_list = list()
        temp_rank_checker = list()
        for t in range(
                len(temp_rank_dicts)):  # [{'pop': (600, 1)}, {'pop': (2500, 4)}]     # [{'classic': (500, 0)}, {'classic': (150, 2)}, {'classic': (800, 3)}]
            if len(temp_rank_dicts) == 2:
                temp_rank.append(temp_rank_dicts[t][rank][1])
            else:
                temp_rank_list.append(temp_rank_dicts[t][rank][0])
                if t is len(temp_rank_dicts) - 1:
                    temp_rank_list.sort(reverse=True)
                    temp_rank_list = temp_rank_list[:2]
                    for m in range(len(temp_rank_dicts)):
                        if temp_rank_dicts[m][rank][0] == temp_rank_list[0] and temp_rank_dicts[m][rank][1] not in temp_rank_checker:
                            temp_rank_checker.append((temp_rank_dicts[m][rank][0]))
                            temp_rank.append(temp_rank_dicts[m][rank][1])
                    for m in range(len(temp_rank_dicts)):
                        if temp_rank_dicts[m][rank][0] == temp_rank_list[1] and temp_rank_dicts[m][rank][1] not in temp_rank_checker:
                            temp_rank_checker.append((temp_rank_dicts[m][rank][0]))
                            temp_rank.append(temp_rank_dicts[m][rank][1])
        temp_rank.sort(reverse=True)
        answer += temp_rank
    return answer
结果は出るけど难しい死のハードコード...
 Pythonの文法もよくわかりませんが、無理にやっていくと、こんなコードも出てきます.头が引きつったかと思ったらいずれも解けるように解説動画を見て、TutterがDickShowneryできれいに問題を解決している様子を見て、賢太にも似ていました.こんなゴミ箱のコードを使ったなんて
 ディックの年譜を書くことがあまりできないので、ディックの年譜の内容を様々なリスト変数に分けて解くのは、本当に複雑になります.
 来週(もうすぐ明日!)これから本格的に解き始めるので、楽しみです.最初の週が終わった時に感じましたが、コードは本当に面白くて、私の性格に合っていると思います.本当に面白かった
先行研究項目リンク0週
スモールプロジェクトリンク1週